Vous connaissez surement les sites http:://iplocation.net pour géolocaliser une IPV4.
Mais comment géolocaliser un ensemble de nombreuses IPV4 de manière pratique et rapide ?
MaxMind met à disposition une base de données d’IP géolocalisée régulièrement mise à jour et un paquet geoip-update pour la mettre à jour. Voir sur https://dev.maxmind.com/geoip/
Son accès est gratuit, il suffit de se créer un compte. Je l’utilise en réalisant une mise à jour quotidienne de ma base de données.
Mais il y a un problème : le paquet geoip-update n’est plus disponibles pour les architectures 32 bits depuis quelques temps.
Si votre Raspberry est en 64 bits, pas de soucis :
sudo apt-get install geoip-update
Sinon, voici un backup du paquet pour l’architecture 32 bits : geoipupdate_4.9_0_linux_armv6.deb
Pour l’installer :
sudo dpkg -i geoipupdate_4.9_0_linux_armv6.deb
Une fois fait, modifiez le fichier /etc/GeoIP.conf pour y indiquer votre username et password de mise à jour de la base de données
Puis, pour la mettre à jour, il suffit de taper la commande :
/usr/bin/geoipupdate
Ce qui peut être fait une fois par jour dans la crontab.
Votre base de données sera le fichier GeoLite2-Country.mmdb. Selon les architectures, il est soit dans /var/lib/GeoIP/, soit dans /usr/share/GeoIP/
Ensuite, pour l’interroger en python, il suffit d’installer la bibliothèque geoip2.database et de faire une fonction comme par exemple :
ou geodbfile est le chemin d’accès complet à GeoLite2-Country.mmdb et où public est l’ipv4 que vous souhaitez localiser. Cette fonction vous donnera en retour le code ISO du Pays de provenance l’IP
def get_localisation_country(public): COUNTRY_CODE="" if ((public=="") or (public=="NONE")): return COUNTRY_CODE reader = geoip2.database.Reader(geodbfile) try: err=0 response = reader.country(public) except Exception as e: err=1 print("Erreur pour l'ip "+public) print(e) if (err==0): COUNTRY_CODE=format(response.country.iso_code) return COUNTRY_CODE