Dernière mise à jour : 15 mai 2003
Par Hugo ETIEVANT (cyberzoide)
Téléchargez la version PDF (269 Ko)
GénéralitésInternet est connu pour être un espace de liberté où l'on peut surfer anonymement. Depuis quelques années, le commerce électronique connaît un fort développement et la pub en ligne est une source de revenus importante. Les publicitaires déploient beaucoup d'efforts pour profiler les visiteurs, mais avec une efficacité toute relative. Le pays de provenance des visiteurs est ainsi une information stratégique pour mieux analyser la fréquentation d'un site, pour savoir dans quelle langue afficher une publicité... ![]() La société Directi - société d'enregistrement de noms de domaines accréditée par l'ICANN - propose un service nommé Ip-to-country qui permet de connaître le pays d'origine d'un internaute en fonction de son adresse IP. Son offre gratuite se décline en deux volets :
![]() Ce service est fiable à 98% et permet d'offrir les fonctionnalités suivantes :
Le WebService IP-to-CountryUn web service ("service web" en français) est un service en ligne distant géré par une société et interagissant avec les scripts de n'importe quel autre site web. On peut demander au site Pour effectuer cette requète en PHP, il faut procéder ainsi :
La socket doit être ouverte sur le serveur Exemple :
<?php Format du nom du pays![]()
Le résultat renvoyé par le serveur "Ces noms de pays sont ceux notifiés officiellement par les pays concernés au Secrétaire général de l'ONU. Cette origine permet de préserver la neutralité politique de la norme et est l'un des facteurs déterminants de l'acceptation mondiale que connaît aujourd'hui l'ISO 3166.", ISO.ch. Format de l'adresse IPL'adresse IP doit être transformée en un nombre avant d'être envoyée au serveur ip-to-country.com car les points sont des caractères spéciaux qui ne peuvent être envoyés directement dans l'URL, pour cela utiliser la fonction de transformation ci-bas. Une adresse IP est de la forme A.B.C.D, le nombre correspondant est de la forme : A * (256*256*256) + B * (256*256) + C * 256 + D.
<?php La fonction inverse permettant de revenir à la forme avec des points est la suivante :
<?php ExempleSuite à la requête, voici ce que retourne le serveur : HTTP/1.1 200 OK Date: Mon, 19 May 2003 06:28:46 GMT Server: Apache/1.3.22 (Unix) (Red-Hat/Linux) PHP/4.0.4pl1 X-Powered-By: PHP/4.0.4pl1 Connection: close Content-Type: text/html France
<?php Exemple : d'après votre adresse IP Limites du service webUtiliser le service web implique de pouvoir utiliser les sockets, ce que la configuration de votre serveur ne permet peut-être pas. De plus, en cas d'interruption de service du serveur ip-to-country.com ou bien d'aléas dans les performances du réseau vers les Etats-Unis (où est localisé leur serveur), il n'est plus possible de déterminer le pays d'un visiteur. De plus, il peut être préférable pour des raisons de performances (ou autres) d'avoir sur son propre serveur toutes les données nécessaires à la résolution du nom de pays des visiteurs. Pour toutes ces raisons il peut s'avérer utile de télécharger la base de données de ip-to-contry.com Mise à jour (03 juillet 2010) : le service n'est temporairement plus accessible en ligne, il reste donc le mode local à exploiter. La base de données de IP-to-CountryTéléchargementLe site ip-to-country.com propose aussi de télécharger sa base de données au format CSV (fichier texte dont le séparateur de champs est la virgule, le séparateur de ligne \n et les champs sont encadrés par des doubles quotes). Dont une copie miroir se trouve ici : March-2003.zip (161 ko). Structure de la baseCette base de données est constituée d'une table associant un pays à des plages d'adresses IP. Ces adresse IP sont codées en un nombre comme vu plus haut. Les pays sont identifiés par leur code sur deux lettres ainsi que leur nom complet anglais dans la norme ISO-3166. La structure de la table de la base est la suivante : CREATE TABLE `ip-to-country` ( `IP_FROM` DOUBLE NOT NULL, `IP_TO` DOUBLE NOT NULL, `COUNTRY_CODE` CHAR(2), `COUNTRY_NAME` VARCHAR(50), PRIMARY KEY(`IP_FROM`,`IP_TO`) ) ExempleVoici quelques lignes de cette table :
Ainsi la plage des adresses de InterrogationL'interrogation en language SQL est relativement simple, voici un exemple de requète :
SELECT `COUNTRY_NAME`
FROM `ip-to-country`
WHERE $ip2 BETWEEN `IP_FROM` AND `IP_TO`
$ip2 est l'adresse IP du visiteur codée numériquement.
Noms en françaisDans la norme ISO-3166, les noms de pays sont en anglais, le site iso.ch permet de télécharger les noms en français, ce qui permet de modifier la base de données afin d'afficher le nom du pays en français. Limites de cette méthodeCette méthode se base exclusivement sur l'adresse IP qu'utilise le visiteur pour se connecter à Internet. Or les grands groupes mondiaux centralisent bien souvent leurs accès au Net par continents sur un seul site auquel sont reliées toutes les machines du groupe. Et c'est ainsi une seule et même plage d'adresses IP qui est répartie entre toutes les machines connectées de plusieurs pays. Alors notre méthode tombe à l'eau car le pays d'origine ainsi déterminé est celui de la connexion unique centralisée et pas celui de la machine cliente. Alternatives
Il existe d'autres moyens de connaître le pays d'origine de l'internaute, par exemple, la variable d'environnement
ConclusionCette méthode offerte par "IP to Country" de Directi permet sans doute de déterminer le pays d'origine de l'internaute dans la majorité des cas, mais certaines plages minoritaires d'adresses IP ne sont pas référencées ou ne permettent pas de connaître le pays réel d'origine. Cependant, en l'absence d'autre solution plus fiable, ce service semble un outil utile et performant. Remerciements à Youri.ch et à jérôme pour leurs remarques constructives ; ainsi qu'à stessy et à Alacazam pour la correction orthographique. |
Date de première publication : | 15 mai 2003 |
Date de dernière modification : | 15 mai 2003 |
Titre original : | Connaître le pays d'un visiteur en fonction de son adresse IP |
Auteur : | Hugo Etiévant - cyberzoide at yahoo dot fr |
URL originale : | http://cyberzoide.developpez.com/php4/ip-to-country/index.php3 |
Tous droits de reproduction réservés. Toute copie de ce document doit faire l'objet d'une autorisation écrite préalable. |