Localisation d’IPV4 à l’aide de GeoIP

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	

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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