If you are managing content based on the country then there is always a chance that a user tries to access other country content using VPN or Proxy.
If you are not validating it then the user can access the content.
In this tutorial, I show how you can detect VPN or Proxy server with IPHub API.
I am using PHP to get an IP address and send an API request.

Contents
1. Get API Key
- Create an account in IPHub and verify your account.

- Click on the link under Your API keys.

- Purchase a plan or select the free plan for testing. That allows sending 1000 requests per day.

- Copy the API key.
2. Get IP
Create get_client_ip() function to get the IP address.
Completed Code
// Get IP address
function get_client_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
3. Check VPN and Proxy
Get IP address by calling get_client_ip() and assign to $ipaddress.
Send a cURL GET request to "http://v2.api.iphub.info/ip/".$ipaddress. Pass API key with the header.
Assign cURL response to $response. API returns following response –
stdClass Object
(
[ip] => 8.8.8.8
[countryCode] => IN
[countryName] => India
[asn] => 15169
[isp] => RELIANCEJIO-IN
[block] => 0
[hostname] => 8.8.8.8
)
Read block value from $response and assign to $block variable.
If $block == 1 means user is using VPN or Proxy.
Completed Code
## Check VPN and Proxy
$ipaddress = get_client_ip(); // Get IP
$apikey = "YI51XTM6Z2JUa1RlRk9EbW1kUXpDdE1qamh6MGlpUzFlT0pXT0c="; // API Key
// cURL request
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://v2.api.iphub.info/ip/".$ipaddress,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"x-key: ".$apikey
),
));
$response = json_decode(curl_exec($curl));
$err = curl_error($curl);
curl_close($curl);
$block = 0;
if ($err) {
echo "cURL Error :" . $err;
} else {
$block = $response->block;
}
if($block == 1){
echo "Using VPN or Proxy.";
}else{
echo "Not using VPN or Proxy.";
}
echo "<pre>";
print_r($response);
echo "</pre>";
4. Output
5. Conclusion
IPHub only allows sending 1000 requests per day. Buy a plan if more than 1000 requests send from your website.
Perform your action if API returns block value is 1 like – stop the user from accessing the website or redirect with a warning message to disable VPN or Proxy server.