Keep banned players off your game server
A ban holds only if the player can't come back on a new address. Look up each address as players connect, and turn away VPNs, proxies and hosting servers, or flag them for your moderators.
- VPNNordVPNKickedSteve_42 joined203.0.113.24
- ISPHome broadbandJoinedLena_K joined198.51.100.7
- HostingOVHcloudKickedxGhostx joined192.0.2.140
- Residential ProxyFlagged for modsMarek joined203.0.113.91
What it stops
Ban evasion
A banned player back on a VPN or a fresh proxy address. Checked on connect, the ban sticks.
Caught byis_vpnis_resproxyAlt accounts
Second and third accounts made from VPN exits to farm rewards, vote twice or grief.
Caught byis_vpnis_torRegion locks
Players on a VPN to reach servers, prices or events meant for another country.
Caught byis_vpnlocation.countryBots and cheat farms
Bot accounts run from hosting servers and proxy pools, where real players connect from home and mobile networks.
Caught byis_hostingis_dcproxy
The fields that decide it
The four a rule here reads most, each marked with the plan that answers it.
is_vpnA commercial VPN. A paid plan names which one.Unlimitedis_torA Tor node, from the public list, rebuilt daily.Unlimitedis_hostingA hosting server, where bots and alt farms run.Paid plansis_resproxySomeone's home connection resold as a proxy.Paid plans
Where to check
- 01
On connect
Look up the address before the player spawns, so a VPN never reaches the world. The Minecraft plugin does it on the server or its proxy; for any other game, call the API from your join handler and keep the answer for the session.
- 02
At sign-up
Check new accounts on your website, launcher or forum, where alt accounts start. A banned player then can't open a fresh account through a VPN or a rented server.
- 03
In reports
Show moderators what an address is when they review a player: the VPN by name, or a residential proxy with when it was last seen. A ban then rests on the address as well as the behavior.
Start free, then add every field
The same rule runs with no key and with one. Without a key the paid fields are left out of the answer, so the second check waits for your upgrade.
- 1
Call it with no key
UnlimitedThe snippet runs as it is: the VPN, Tor and relay flags, the location and the network, with no daily or monthly cap.
- 2
Sign up for a key
No cardYour account's first 100 lookups each day answer every field, so you can try the paid half of the rule on real traffic.
- 3
Upgrade for every lookup
From $19 a monthEvery paid plan answers every field on every lookup, proxies, hosting and the operator behind each flag, and up to 1,000 addresses a batch.
import { VPNDetection } from "vpndetection";// No key needed. With one, every field answers.const client = new VPNDetection({ apiKey: process.env.VPNDETECTION_API_KEY });export async function onPlayerJoin(player) {const r = await client.lookup(player.ip);if (r.isVpn || r.isTor) {return kick(player, "VPNs aren't allowed on this server");}// Proxies and hosting answer on a paid plan.if (r.isResproxy || (r.isHosting && !r.isRelay)) {alertModerators(player, r);}}
Common questions
Will it kick players on mobile data or a home connection?
No. Home broadband and mobile carrier addresses aren't flagged unless the address is in a proxy pool, which a paid plan's is_resproxy and is_mobproxy say, with the last day each was seen.
What does it cost to run on a server?
Nothing for the VPN, Tor and relay checks: Unlimited answers them with no key and no daily cap. Proxies and the hosting company behind an address come with every paid plan, from $19 a month for 250,000 lookups.
Is there a plugin for my game?
For Minecraft, one jar runs on Paper, Spigot, Purpur, Folia, Velocity and BungeeCord, and works without an account. For any other game, a check is one GET per address, with 13 official clients, one of them for the browser.
Should I look up every player on every join?
Once per address is enough for a while: the official clients keep each answer for an hour by default, and a kept answer costs no lookup. Check again when a player's address changes.
What if a regular player gets flagged?
Have the rule alert your moderators rather than kick, as the Minecraft plugin's alert action does, and let them allow the player. If we've classified an address wrongly, report it from its page on vpndetection.io and the fix lands in the next daily build.
Unlimited lookups, no sign-up.
Paste it into a terminal. Any address answers its VPN, Tor and relay flags, where it is and which network announces it, with no daily or monthly cap.
{"ip": "146.70.116.130","is_vpn": true,"is_relay": false,"is_tor": false,"location": {"country": "AT", ...},"asn": { "asn": 9009, ... }}