Géolocalisation, connaître le pays de vos utilisateurs
Divulgâchage : Développeur ou utilisateur d’application, vous avez forcément été confronté au problème de géolocalisation. Avant de rentrer dans des précisions milimétriques, on va aujourd’hui voir comment obtenir le Pays à l’aide des bases de données publiques.
Lorsqu’on développe une application (web ou mobile), on a rapidement besoin de savoir de quel pays viennent nos utilisateurs.
Parfois, c’est pour rendre la navigation plus ergonomique. Même si le navigateur vous envoie la langue de préférence de son utilisateur, il ne vous envoie pas sa localisation. Avec en particulier son fuseau horaire, ce qui peut gêner pour afficher des horaires.
Sans géolocalisation, on doit déléguer à un bout de JS la tâche de localiser les horodatages.
D’autres fois, c’est pour respecter des contraintes légales. Comme la retransmission vidéo d’événements sportifs pour lesquelles les chaînes de télévisions achètent des droits de diffusions sur des territoires bien délimités.
C’est ainsi qu’en France, les fans de vrai football doivent tricher et utiliser des VPN pour regarder la meilleure équipe du monde (sur la RTBF).
Pour être complet, c’est aussi une source d’information pour proposer aux visiteurs des suggestions adaptées ; plus proches de chez eux (ou de leurs préoccupations locales). Que ce soit des actualités, des résultats de recherches ou encore des produits et services spécifiques. La publicité ciblée n’est alors plus très loin.
Mis à part si vos visiteurs vous envoient leur position, vous en êtes rendu à deviner la (géo)localisation d’après leur adresse IP. Pour ça, vous pouvez obtenir des bases de données faisant ce lien, dont le montant varie en fonction de la précision (géographique et temporelle).
Véridique, les navigateurs ont maintenant une API pour avoir les coordonnées. Heureusement, si l‘application veut vos donnée, le navigateur vous demandera la permission (que vous devriez refuser) avant de les lui fournir.
Des entreprises mettent à disposition des bases de géolocalisation mais pour n’obtenir le pays, il serait dommage de payer car, comme on va le voir aujourd’hui, ces informations sont publiques et librement accessible.
Répartition des adresses
Pour tout un tas de raisons techniques, les machines utilisent, pour
communiquer sur Internet, des adresses sous la forme d’une suite de
bits, des 0
et des 1
, de longueur fixe. IPv4
utilise 32 bits qu’on écrit avec 4 nombres (correspondants à des
octets). IPv6 en utilise 128 qu’on écrits en hexadécimal.
Pour faciliter le routage des paquets à travers le réseau, ces adresses sont coupées en deux. Le préfixe désigne le réseau et est commun à toutes les machines qui en font partie. Le suffixe désigne la machine, au sein de son réseau. Un réseau pouvant bien sûr être divisé en sous-réseaux (la partie de l’adresse attribuée au réseau augmente, au détriment de celle identifiant la machine) mais c’est une autre histoire.
Pour éviter que ça devienne le bordel, un organisme s’est chargé de superviser globalement l’attribution des adresses IP, l’IANA. Par diplomatie, car on est en 1990 et ça n’aurait pas plut que le réseau mondial soit géré uniquement par les États Unis d’Amériques, l’IANA a délégué ses prérogatives à des Registres Internet Régionaux (les RIR), dont le RIPE NCC créé en 1992 pour l’Europe.
La bonne blague, c’est que les registres régionaux, sentant qu’il serait bien pratique de se regrouper pour s’organiser, ont fondé le NRO, un nouvel organisme pour centraliser leurs activités…
Lorsqu’un opérateur de réseau (on parle de Système Autonome) a besoin que des machines soient accessibles, il en fait la demande au registre dont son pays dépend qui lui fournis alors un préfixe réseau libre (s’il en reste).
Obtenir les données
Heureusement pour nous, Internet a été créé par des universitaires idéalistes. Les données concernant son fonctionnement, même si elles ne sont pas faciles à trouver, sont quand même librement accessible au public.
Il en va donc de même avec les attributions des préfixes effectués par les Registres au bénéfice des Opérateurs. On les appelles « RIRs delegation files », ils sont diffusés par les registres et sont mis à jours quotidiennement. Les voici :
- ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest
- ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest
- ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
- ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
- ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest
Si vous êtes fans de statistiques ou avez une approche un peu plus touristique de ces histoires d’attributions d’adresses, je vous suggère l’excellente page de statistiques de Patrick Maigron. Entre autres choses, vous y trouverez l’historique d’utilisation des préfixes et des cartes géographiques pour la répartition (inégale) entre pays.
Le contenu de ces bases est fourni sous format CSV
(où
le séparateur est le caractère |
). Les détails sont communs
et fournis par chaque RIR (i.e. celui du RIPE-NCC
car la version de l’APNIC – premier résultat google ;– a une
erreur 😉).
En-tête & résumés
La première ligne du fichier sert d’en-tête. Elle permet de déterminer le format et le contenu du fichier. Exemple avec le RIPE-NCC :
2|ripencc|1580684399|210814|19830705|20200202|+0100
Les champs ont la signification suivante :
- Version :
2
depuis un bon moment, - Nom du registre :
ripencc
ici pour le registre européen, - Numéro de série : il doit s’incrémenter à chaque
mise à jours, ici c’est un timestamp (
1580684399
) mais ça peut aussi être une date (i.e. c’est le choix de l’AFRINIC), - Nombre d’enregistrements : nombre de lignes sans compter l’en-têtes et les résumés,
- Date de départ : date de début de la période,
19830705
ici (pour le 5 juillet 1983), certains RIR mettent des 0. - Date de fin : date de la fin de la période,
20200202
ici (pour le 2 février 2020), - Décalage horaire UTC : du RIR qui a généré le
fichier,
+0100
ici.
Suivent ensuite trois lignes de résumés dont le but est de fournir le nombre d’enregistrement pour de chaque type (réseaux IPv4, réseaux IPv6 et intervalles de numéros d’opérateurs). Exemple avec les réseaux IPv4 du RIPE-NCC :
ripencc|*|ipv4|*|81452|summary
Les champs ont la signification suivante :
- Nom du registre : comme précédemment,
*
: le caractère « étoile »,- Type d’enregistrement : parmi
ipv4
,ipv6
etasn
, *
: le caractère « étoile »,- Nombre d’enregistrements : nombre de lignes pour ce type (et surtout pas le nombre d’adresses),
summary
: le mot « summary », avec les étoiles, ils permettent de différentier les lignes de résumé des autres.
Enregistrements
Toutes les autres lignes concernent ces fameux enregistrements. Exemple avec le premier réseau IPv4 alloué en Europe :
ripencc|FR|ipv4|2.0.0.0|1048576|20100712|allocated|ec66869d-4669-423f-8a24-0cb99c3e1491
Les champs sont les suivants :
- Nom du registre : vous commencez a avoir l’habitude,
- Code du pays : sur deux caractères (suivant la
norme ISO-3166), ici
FR
, - Type d’enregistrement : des fois que la donnée soit
pas claire, ici c’est donc
ipv4
, - Début d’intervalle : première adresse du réseau ou
premier numéro du système autonome, ici c’est le réseau
2.0.0.0
, - Taille : pour les réseaux IPv4 et les numéros
d’opérateurs, c’est le nombre de ressources (ici,
1048576
adresses dans ce réseau), pour les réseaux IPv6, c’est la longueur du préfixe, - Date d’enregistrement : date à laquelle cette ressource a été allouée ou assignée (ici le 12 juillet 2010),
- Statu : alloué (
allocated
ici) ou assignée, - ID opaque : identifiant unique qui identifie le
propriétaire de la ressource
(
ec66869d-4669-423f-8a24-0cb99c3e1491
ici pour Orange, ça peut changer d’une version du fichier à l’autre)
Et Voilà… Pour connaître le pays d’une adresse IP, il suffit donc de trouver l’enregistrement correspondant à son réseau.
Les RIR ont officiellement communiqué qu’ils ne sont pas des fournisseurs de données de géolocalisation et qu’on devrait plutôt utiliser les bases fournies par de entreprises dont c’est le métier. Mais comme ici, on ne s’intéressait qu’au pays (et pas aux villes ou aux coordonnées), les données des RIRs nous suffiront amplement.
Et après
En attendant la suite avec d’autres articles pour obtenir une géolocalisation plus précise (ville ou coordonnées), voici un article sur la complexité algorithmique…
- Complexité algorithmique
-
4 Juin 2018 - tbowan. Quelques explications sur la complexité des algorithmes. Différente mais non moins importante lorsqu’il s’agit d’avoir des applications efficaces.