La lecture en ligne est gratuite
Télécharger
Connaître le pays d’origine des internautes avec le service web IP
-
To
-
Country
Hugo ETIEVANT
Developpez.com
Page
1
sur
6
Connaît re le pays d'un visit eur
en fonction de son adresse IP
15 mai 2003
Par Hugo ETIEVANT (
cyberzoide
)
1.
Généralités
2.
Le WebService IP
-
to
-
Country
a.
Format du nom du pays
b.
Format de l'adresse IP
c.
Exemple
d.
Limites du service web
3.
La base de données de IP
-
to
-
Country
a.
Téléchargement
b.
Structure de la base
c.
Exemple
d.
Interrogation
e.
Noms en français
4.
Limites de cette méthode
5.
Alternatives
6.
Conclusion
1 Généralités
Internet 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 p
ublicitaires 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 quell
e langue afficher une publicité...
La société
Directi
(
http://www.directi.com
)
-
société d'enregistrement de noms de
domaines accréditée par l'ICANN
-
propose un s
ervice nommé
Ip
-
to
-
country
(
http://www.ip
-
to
-
country.com
) 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 :
un service web interactif
une base de données à télécharger
Connaître le pays d’origine des internautes avec le service web IP
-
To
-
Country
Hugo ETIEVANT
Developpez.com
Page
2
sur
6
Ce service est
fiable à 98%
et permet d'offrir les fonctionnalités suivantes
:
formater correctement les données (monnaies, nombres, dates...)
ciblage p
ublicitaire
internationalisation des pages
détection de fraude à la carte bancaire
gestion des droits d'accès
géo
-
localisation des visiteurs
etc.
2 Le WebService
IP
-
to
-Country
Un 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
htpp://www.ip
-
to
-
country.com
le pays correspondant à une
IP via la méthode
GET
du protocole
HTTP
. Cette connexion requiert une authentificatio
n
avec l'identifiant
guest
et le mot de passe
guest
.
Pour effectuer cette requète en PHP, il faut procéder ainsi :
1.
ouvrir une socket avec
fsockopen()
2.
envoyer la requête au travers de la socket avec
fputs()
3.
et lire avec
fgets()
le résultat retourné par l
e serveur
La socket doit être ouverte sur le serveur
www.ip
-
to
-
country.com
et la requète se
décompose en la directive
GET
sur la ressource
"/get
-
country/?ip=".$ip2."&user=guest&pass=guest
$ip2
est l'adresse IP traduite en un
nombre unique (sans les poi
nts de séparation des 4 champs codés sur 8 bits) et l'autre
directive
Host
rappelant le domaine du serveur :
ip
-
to
-
country.com
.
Exemple :
<?php
/* extraction adresse IP du visiteur */
$ip
=
$_SERVER
[
'REMOTE_ADDR'
];
/* transformation IP */
$
dotted
=
preg_split
(
"/[.]+/"
,
$ip
);
$ip2
=
(double)
(
$dotted
[
0
]*
16777216
)+(
$dotted
[
1
]*
65536
)+(
$dotted
[
2
]*
25
6
)+(
$dotted
[
3
]);
/* URL du serveur et paramètres à lui passer */
$url
=
"/get
-
country/?ip="
.
$ip2
.
"&user=guest&pass=guest"
;
/* ouverture de la socket */
$fp
=
fsockopen
(
"www.ip
-
to
-
country.com"
,
80
, &
$errno
, &
$errstr
,
30
);
/* test si erreur à l'ouverture */
if
(!
$fp
) {
/* affichage de l'erreur */
echo
"$errstr
($errno)<br>
\n
"
;
}
else
{
/* envoie de la requète HTTP */
fputs
(
$fp
,
"GET
$url
HTTP/1.0
\r\n
Host:
ip
-
to
-
country.com
\r\n\r\n
"
);
/* réception des données en retour */
while
(!
feof
(
$fp
))
{
/* extraction réponse */
Connaître le pays d’origine des internautes avec le service web IP
-
To
-
Country
Hugo ETIEVANT
Developpez.com
Page
3
sur
6
$response
.=
fgets
(
$fp
,
128
);
}
/* fermeture socket */
fclose
(
$fp
);
}
?>
2.1
Format du nom du pays
Le résultat renvoyé par le serveur
ip
-
to
-
country.com
est le
code ISO
-
3166
du pays associé à l'adresse IP soumise. Ce code
correspond à une norme internationale
définie par l'
International
Organization for Standardization
(aller directement à la page
norme I
SO
-
3166
en français).
"
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.
",
http://www.iso.ch/
.
2.2
Format de l'adresse IP
L'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èr
es 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.
<?ph
p
function
IPAddress2IPNumber
(
$dotted
) {
$dotted
=
preg_split
(
"/[.]+/"
,
$dotted
);
$ip
=
(double)
(
$dotted
[
0
]*
16777216
)+(
$dotted
[
1
]*
65536
)+(
$dotted
[
2
]
*
256
)+(
$dotted
[
3
]);
return
$ip
;
}
?>
La fonction inverse permettant de re
venir à la forme avec des points est la suivante :
<?php
function
IPNumber2IPAddress
(
$number
) {
$a
= (
$number
/
16777216
)%
256
;
$b
= (
$number
/
65536
)%
256
;
$c
= (
$number
/
256
)%
256
;
$d
= (
$number
)%
256
;
$dotted
=
$a
.
"."
.
$b
.
"."
.
$c
.
"."
.
$d
;
return
$dotted
;
}
?>
2.3
Exemple
Suite à la requête, voici ce que retourne le serveur :
HTTP/1.1 200 OK
Date: Mon, 19 May 2003 06:28:46 GMT
Connaître le pays d’origine des internautes avec le service web IP
-
To
-
Country
Hugo ETIEVANT
Developpez.com
Page
4
sur
6
Server: Apache/1.3.22 (Unix)
(Red
-
Hat/Linux) PHP/4.0.4pl1
X-
Powered
-
By: PHP/4.0.4pl1
C
onnection: close
Content
-
Type: text/html
France
dont il faut extraire le nom du pays, c'est facile c'est la dernière ligne qu'on extrait de la
façon suivante :
<?php
$lignes
=
explode
(
"\
n"
,
$response
);
$pays
=
$lignes
[
sizeof
(
$lignes
)-
1
];
?>
Exemp
le : d'après votre adresse IP
81.48.177.151
transformée en
1362145687
, votre
pays d'origine est :
France
2.4
Limites du service web
Utiliser le service web implique de pouvoir utiliser les sockets, ce que la configuration de
votre serveur ne permet peut
-
être p
as. 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 êtr
e 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
3 La base de données de
IP
-
to
-Country
3.1
Téléchargement
Le 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
:
http://cyberzoide.developpez.com/php4/ip
-
to
-
country/March
-
2003.zip
(161 ko).
3.2
Structure de la base
Cette 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
no
rme 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),
Connaître le pays d’origine des internautes avec le service web IP
-
To
-
Country
Hugo ETIEVANT
Developpez.com
Page
5
sur
6
PRIMARY KEY(`IP_FROM`,`IP_TO`)
)
3.3
Exemple
Voi
ci quelques lignes de cette table :
IP_FROM
IP_TO
COUNTRY_CODE
COUNTRY_NAME
1042284544 1042292735
CH
SWITZERLAND
1042292736 1042317311
UK
UNITED KINGDOM
1042317312 1042350079
PL
POLAND
1042350080 1042415615
RU
RUSSIAN FEDERATION
1042415616 1042546687
FR
FRANCE
1042546688 1042677759
ES
SPAIN
1042677760 1042743295
GR
GREECE
1042743296 1042808831
FR
FRANCE
1042808832 1042817023
DE
GERMANY
1042817024 1042825215
IE
IRELAND
1042825216 1042833407
CZ
CZECH REPUBLIC
Ainsi la plage des adresses de
62.32.
0.0
(codée en
1042284544
) à
62.32.31.255
(codée
en
1042292735
) correspondent à la Suisse (
SWITZERLAND
).
3.4
Interrogation
L'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.
3.5
Noms en français
Dans 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 l
a base de données afin
d'afficher le nom du pays en français.
4 Limites de cette méthode
Cette 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.
Connaître le pays d’origine des internautes avec le service web IP
-
To
-
Country
Hugo ETIEVANT
Developpez.com
Page
6
sur
6
5 Alternatives
Il existe d'autres moyens de connaître le pays d'origine de l'internaute, par exemple, la
variable d'environnement
$_SERVER
["HTTP_ACCEPT_LANGUAGE"]
du serveur retourne la
langue du client, qui dépend de la configuration du navigateur de l'internaute (donnée
non fiable). Cet artifice ne permet pas
-
en revanche
-
de distinguer le visiteur parlant
anglais connecté depuis une mac
hine en Angleterre ou depuis son hôtel au Congo...
6 Conclusion
Cette 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.
Les noms et marques cités ici sont la propriété de leurs propriétaires respectifs.
Ce
t article est issu du site
Developpez.com
,
Site francophone N°1 de la communauté des développeurs.
Toute reproduction ou
diffusion de ce présent document ne peut se faire
sans le consentement préalable de son auteur.
L’auteur a par ailleurs rédigé de nombreuses autres ressources scientifiques
et techniques disponibles à l’adresse
http://cyberzoide.developpez.com/
This document was created with Win2PDF available at
http://www.daneprairie.com.
The unregistered version of Win2PDF is for evaluation or non-commercial use only.