La base de données geolocalise-ip

Et oui !!! Tout vient de la base de données. Il n’y a pas de secret, on est tous en quelque sorte fichés par notre adresse IP.
Sans rentrer dans le détail, cela ne sert à rien chacun voit sa base de données comme il le veut, nous allons voir quelques tables essentielles.

Donc en fait pas de secret toutes les informations concernant une adresse IP sont stockées dans une base de données.
Il est bien évidement primordial que cette base de données soit mise à jour régulièrement et c’est là une des plus grandes difficulté.

Ces données sont récupérées gracieusement sur le site www.maxmind.com (qui à priori utilisent eux-même une partie des données de www.geonames.org), bien évidement un grand merci à eux.

Les tables minimum pour la localisation IP :

  • Blocks
  • Locations

La table « blocks » comprend les champs suivants :

  1. start (int 10) : début de la plage du numéro IP
  2. end (int 10) : fin de la plage numéro IP
  3. start (mediumint 9) : id de localisation pour une correspondance sur la table « locations »

La table « locations » comprend les champs suivants :

  1. locid (mediumint 8) : id pour la relation avec « blocks »
  2. country (char 2) : abréviation du pays suivant la norme ISO 3166-1
  3. region (char 2) : le numéro de la région (qui permet avec « country » de retrouver le nom dans une autre table)
  4. city (varchar 50) : le nom de la ville
  5. postalcode (varchar 8) : le code postal
  6. latitude (float 7,4) : la latitude (pour en savoir plus : coordonnées géographiques)
  7. longitude (float 7,4) : la longitude
  8. metrocode (char 2) : le code de la ligne de métro (uniquement pour les US et la CANADA, et encore à priori pas très fiable)
  9. areacode (char 3) : préfixe téléphonique (3 premiers chiffres ) par région (uniquement pour les US)

Donc voilà, le processus est simple :

  1. on a une adresse IP que l’on transforme avec un savant calcul (cela fera partie d’un autre billet)
  2. on regarde dans la table « blocks » à quel intervalle elle appartient, comme ça par exemple :
    SELECT locid FROM blocks WHERE 67283456 BETWEEN start AND end
  3. et donc avec le locid récupéré (ici avec 67283456 cela donne 223 au moment où j’écris ce billet), et donc une simple requête sur locations :
    SELECT * FROM locations WHERE locid='223' LIMIT 0,1

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.