Détecter un VPN, un proxy, un VPS ou une mauvaise IP - PHP Script Java

Détecter un VPN, un proxy, un VPS ou une mauvaise IP

Détecter les VPN, les proxies, les VPS, les serveurs dédiés ou les mauvaises IP, c'est possible, à partir de scripts PHP ou Java.

Que ce soit pour vérifier un vote, pour bloquer les mauvaises adresses IP de votre site web, bloquer les fraudes sur votre boutique en ligne, les possibilités sont nombreuses avec les API de détection de VPN et de Proxies comme IPWarner.

Nombreux sont les services qui, en effet, utilisent des systèmes permettant de détecter des VPN. Netflix, par exemple, afin d'éviter les activités malicieuses ou de regarder des séries et films disponibles dans d'autres pays, a mis en place un système permettant de détecter si l'utilisateur regarde son show préféré sous un réseau privé virtuel. Le système n'est pas totalement fiable, et il existe de nombreuses techniques plus ou moins acceptables de pouvoir contourner cette limitation.

Après s'être renseigné sur le sujet, des services existent, et ils sont nombreux. Proposant de donner des détails sur une adresse IP, comme par exemple l'ASN (Autonomous System Numer),le FAI (fournisseur d'accès Internet),le pays, la ville voire la longitude et la latitude, les services qui proposent ces API sont de plus en plus concentrées sur l'ajout de fonctionnalités qui permettent différents usages.

Nous avons testé IPHub, un service connu depuis longtemps et permettant de détecter les VPN. Après quelques essais, il échoue sur beaucoup de proxies et serveurs français, américains et chinois. Serveur MultiGames est alors parti à la recherche d'un détecteur de VPN avec la possibilité d'intégrer l'API en PHP.

IPWarner - VPN Detect API

Nous sommes tombé sous le charme du service IPWarner et nous avons décidé de l'utiliser sur Serveur MultiGames pour vérifier les votes.

L'API est très simple d'utilisation et est documentée, les offres sont beaucoup moins chères qu'IPHub, et nous avons une détection de 99,97% des 41 817 proxies que nous avons essayé en comparaison avec IPHub, qui ne détecte lui que 61,02% de notre liste, soit un peu plus d'un proxy sur deux.

J'ai décidé d'écrire des scripts PHP et Java pour détecter un VPN avec l'API IPWarner. Le service propose trois offres : une offre gratuite (limitée à 1 000 requêtes par jour, ce qui est déjà pas mal),une offre Essential, avec 50 000 requêtes par jour, et une offre Entreprise, avec un nombre de requêtes illimitées. L'offre gratuite ne nous suffisait pas, et afin d'avoir de la marge, nous avons décidé d'essayer l'offre Entreprise, avec des fonctionnalités en plus, comme un Support 24/7.

Exemple de script PHP pour détecter un VPN :

function isGoodIp($apiKey, $ip, $defaultErrorIpResult = true) {
    $ch = curl_init();   
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_URL, 'https://api.ipwarner.com/'.$ip);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array('API-Key: '.$apiKey));
   $result = curl_exec($ch);
   curl_close($ch);
    if ($result == null)
   {
      return $defaultErrorIpResult;
   }
   $obj = json_decode($result, true);
   if ($obj == null)
   {
      return $defaultErrorIpResult;
   }
   if (isset($obj['error']))
   {
      return $defaultErrorIpResult;
   }
   return $obj['goodIp'] == '1';
}
$apiKey = "Your API key"; // Clé API à générer sur https://ipwarner.com
$ip = $_SERVER['REMOTE_ADDR'];
if (!isGoodIP($apiKey, $ip))
{
   echo 'Bad IP';
}
else
{
   echo 'Good IP';
}

Vous pouvez générer une clé API directement sur le site https://ipwarner.com, l'inscription prend seulement quelques secondes.
Exemple complet de detect VPN PHP et detect VPN Java disponibles sur Github.

Tests de performances

Pour vérifier que les promesses soient vraies, j'ai effectué plusieurs stress-test dès que je me suis procuré une offre Entreprise. L'API a été générée en quelques secondes après le paiement. L'offre promet un cap à 100 000 requêtes par minute, soit environ 1 666 requêtes par seconde au maximum, et un nombre de requêtes par jour illimité.

L'envoi de 3 000 requêtes en même temps pour récupérer les informations de 3 000 IPs différentes a fonctionné, en réalité il n'y a pas de limite par seconde, mais lorsque l'on atteint les 100 000 requêtes à la minute, on est bloqué jusqu'à la minute suivante. Soit, c'est pas trop mal, je me demande qui peut utiliser autant de ressources et effectuer autant de requêtes pour vérifier et détecter un VPN / Proxy.

En moyenne, la requête me prend 3 millisecondes de l'aller jusqu'au retour, même avec la connexion SSL (puisque le certificat est mis en cache) sur un serveur OVH en France. J'ai été particulièrement étonné du résultat, dans le bon sens du terme. C'est vrai que 75$ par mois c'est une somme assez conséquente pour l'offre Entreprise, mais sachant qu'elle est réservée aux entreprises, et vu les résultats que renvoient l'API, je pense que cela vaut son prix, en comparaison à IPHub, où pour 89€, on a seulement 50 000 requêtes par jour au maximum...

Conclusion

Il est impossible de détecter avec exactitude si un utilisateur est sous un VPN ou un proxy, étant donné qu'il existe des milliards d'adresses IPv4 (le service est aussi compatible avec les IPv6, c'est un point positif supplémentaire). En revanche, des services comme IPWarner proposent d'aller au plus proche de la demande, à savoir de détecter l'usage d'un VPN, en plus de donner des informations assez précises sur les adresses IP. Internet évolue, les adresses IPv4 aussi, les blocs d'adresses, les ASN, les FAI, les adresses IPv6 qui existent déjà depuis un moment, mais qui commencent à être utilisées et connues de ces services. Le web évolue tous les jours et pour le moment, je ne peux que tirer mon chapeau concernant le service que j'ai testé.

Auteur : Ryan B., bénévole de Serveur MultiGames et créateur de contenu