This guide explains how to detect VPN, proxy, TOR, and bot IP addresses in Java using the built-in HttpClient (Java 11+) and the Focsec API.

You'll learn to query any IP address and check whether it's masked by a VPN, proxy, or TOR connection.

1

Create the response class

Define a class to hold the API response. We'll use Jackson for JSON parsing:

java
import com.fasterxml.jackson.annotation.JsonProperty;

public class IpResponse {
    public String ip;

    @JsonProperty("is_vpn")
    public boolean isVpn;

    @JsonProperty("is_proxy")
    public boolean isProxy;

    @JsonProperty("is_tor")
    public boolean isTor;

    @JsonProperty("is_bot")
    public boolean isBot;

    @JsonProperty("is_datacenter")
    public boolean isDatacenter;

    public String city;
    public String country;

    @JsonProperty("iso_code")
    public String isoCode;

    @JsonProperty("is_in_european_union")
    public boolean isInEuropeanUnion;

    public String flag;

    @JsonProperty("autonomous_system_number")
    public int autonomousSystemNumber;

    @JsonProperty("autonomous_system_organization")
    public String autonomousSystemOrganization;

    public boolean isSuspicious() {
        return isVpn || isProxy || isTor || isBot || isDatacenter;
    }
}
2

Check an IP for VPN or proxy

Use Java's HttpClient to query the Focsec API.

Register for a free API key to get started.

java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import com.fasterxml.jackson.databind.ObjectMapper;

public class FocsecExample {
    private static final String API_KEY = "your-api-key-here";
    private static final HttpClient client = HttpClient.newHttpClient();
    private static final ObjectMapper mapper = new ObjectMapper();

    public static IpResponse checkIp(String ip) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.focsec.com/v1/ip/" + ip))
            .header("Authorization", API_KEY)
            .GET()
            .build();

        HttpResponse<String> response = client.send(
            request,
            HttpResponse.BodyHandlers.ofString()
        );

        return mapper.readValue(response.body(), IpResponse.class);
    }

    public static void main(String[] args) throws Exception {
        IpResponse result = checkIp("82.40.11.200");

        System.out.println("IP: " + result.ip);
        System.out.println("VPN: " + result.isVpn);
        System.out.println("Proxy: " + result.isProxy);
        System.out.println("TOR: " + result.isTor);
    }
}

API Response

The API returns a JSON object containing threat detection flags and location data:

Response
{
  "ip": "82.40.11.200",
  "is_vpn": false,
  "is_proxy": false,
  "is_bot": false,
  "is_tor": false,
  "is_datacenter": false,
  "city": "London",
  "country": "United Kingdom",
  "iso_code": "gb",
  "is_in_european_union": false,
  "flag": "šŸ‡¬šŸ‡§",
  "autonomous_system_number": 5089,
  "autonomous_system_organization": "Virgin Media Limited"
}
3

Detect suspicious IPs

Use the isSuspicious() method to flag anonymous connections:

java
public static void main(String[] args) throws Exception {
    IpResponse result = checkIp("82.40.11.200");

    if (result.isSuspicious()) {
        System.out.println("VPN/Proxy detected: " + result.ip);
        System.out.println("VPN: " + result.isVpn);
        System.out.println("Proxy: " + result.isProxy);
        System.out.println("TOR: " + result.isTor);
        System.out.println("Datacenter: " + result.isDatacenter);
    } else {
        System.out.println("Clean IP: " + result.ip);
        System.out.println("Location: " + result.city + ", " + result.country);
    }
}

Next steps

You're now ready to detect VPN and proxy IPs in Java. Browse the API Reference for detailed documentation on all response fields.

Ready to get started?

Sign up for a free account and start detecting VPNs, proxies, and bots in your application.

Get your API key »