Localiser une adresse IP avec Python : APIs et cartes

localiser adresse ip python

Sommaire

L’essentiel à retenir : localiser une adresse IP en Python s’effectue principalement via des API externes pour la rapidité ou des bases de données locales comme GeoIP2 pour les gros volumes. Cette méthode permet d’extraire instantanément des coordonnées géographiques pour enrichir vos applications. À noter, le service ipinfo.io offre un plan gratuit généreux de 50 000 requêtes mensuelles.

Vous sentez-vous souvent aveugle face à une liste interminable de connexions anonymes qui saturent vos fichiers de logs ? Il est heureusement très simple de localiser adresse ip python pour convertir ces données brutes en informations géographiques concrètes et comprendre enfin qui visite votre site. Préparez-vous à découvrir des méthodes efficaces, du simple appel API à la base de données locale, pour cartographier précisément l’origine de votre trafic web.

Géolocalisation par API : la méthode rapide et accessible

Le principe : interroger un service web externe

On ne va pas tourner autour du pot. Vous envoyez une adresse IP à une API, et elle vous retourne instantanément sa position géographique. C’est la méthode reine pour localiser une adresse IP avec Python car elle évite de gérer des bases de données lourdes en local.

Pour dialoguer avec ces services, la bibliothèque requests est incontournable. Elle gère les appels HTTP sans prise de tête. C’est l’outil standard que tout développeur Python utilise pour ce type de tâche réseau.

La réponse arrive généralement en JSON, un format structuré parfait pour nous. Python le manipule nativement pour extraire les données clés comme la ville ou le pays.

Exemple pratique avec l’API ipinfo.io

Ipinfo.io est une référence fiable avec un plan gratuit solide permettant 50 000 requêtes par mois. Mais attention, l’inscription est nécessaire pour obtenir un jeton d’accès (token) et garantir la stabilité de vos appels.

Voici le code pour récupérer les infos. On importe requests, on définit l’IP cible et le token, puis on construit l’URL. La fonction requests.get() interroge le service, et .json() transforme la réponse en dictionnaire exploitable :

import requests

ip = ‘35.65.56.98’
token = ‘VOTRE_TOKEN’
url = f »https://ipinfo.io/{ip}?token={token} »

response = requests.get(url)
data = response.json()

print(data)

Le script affiche un JSON clair avec la ville, la région et les coordonnées. Pour cibler une donnée précise, utilisez simplement data['city']. C’est effrayant de simplicité : quelques lignes suffisent pour obtenir un résultat concret et exploitable immédiatement.

Quels autres services API utiliser ?

Ipinfo n’est pas le seul acteur sur le marché, il existe des alternatives valables. Votre choix final dépendra souvent de votre budget ou du volume de requêtes que vous prévoyez.

Service APIAvantagesInconvénients/Limites
ip-api.comTrès simple, pas de clé API requise pour un usage de base.Limite de requêtes plus stricte, moins de données détaillées.
geolocation-db.comFacile à utiliser, pas de clé nécessaire.Données parfois moins précises que les concurrents payants.
ipstackOffre beaucoup de détails (devise, fuseau horaire).Le plan gratuit est très limité, HTTPS est une option payante.

Bref, jetez toujours un œil à la documentation technique avant de choisir. Ignorer les limites de taux (rate limits) est le meilleur moyen de faire planter votre script en production.

L’approche hors ligne avec une base de données locale

Les API c’est bien, mais que faire si vous avez des milliers d’IP à traiter ou si vous ne voulez pas dépendre d’un service externe ? C’est là que l’approche locale entre en jeu.

GeoIP2 de MaxMind : la référence du marché

Oubliez les solutions bricolées, MaxMind et sa base de données GeoLite2 s’imposent comme le standard absolu pour la géolocalisation locale. Le principe est d’une efficacité redoutable : vous téléchargez un fichier de base de données gratuit et votre script Python l’interroge directement sur votre disque. C’est une autonomie totale vis-à-vis des services tiers.

Pourquoi 90 % des experts privilégient cette méthode ? Simplement parce qu’il n’y a pas de limite de requêtes et que les performances sont fulgurantes pour le traitement de masse, le tout fonctionnant parfaitement hors ligne.

Pourtant, cette puissance a une contrepartie logistique. Vous risquez de perdre en précision si vous ne maintenez pas la base à jour ; il faut impérativement la retélécharger chaque mois pour garantir la fraîcheur des données.

Mise en place pas à pas de GeoIP2

La première étape consiste à installer la bibliothèque Python qui servira de connecteur via votre terminal : pip install geoip2. C’est cette librairie qui va traduire le format binaire de la base de données en informations lisibles pour votre code.

Ensuite, il faut récupérer le fichier source. Vous devez vous créer un compte sur le site de MaxMind (c’est gratuit mais obligatoire) pour obtenir le lien de téléchargement de la base GeoLite2-City.mmdb. Ne vous trompez pas de format, le CSV ne fonctionnera pas ici.

Voici comment orchestrer le tout dans votre script. On commence par importer geoip2.database, puis on définit le chemin vers votre fichier .mmdb. En utilisant geoip2.database.Reader(), vous ouvrez la connexion au fichier. Il suffit ensuite d’appeler la méthode reader.city('adresse_ip'). Le résultat est immédiat : vous pouvez extraire le nom de la ville via response.city.name et la latitude précise avec response.location.latitude.

API vs base locale : que choisir ?

On se retrouve souvent face à ce dilemme technique : choisir la simplicité immédiate des API distantes ou la puissance brute et l’autonomie des bases de données locales.

  • Utilisez une API si : vous avez peu de requêtes, besoin d’une mise en place ultra-rapide pour un petit projet, ou si vous voulez des données annexes (fuseau horaire, etc.) sans effort.
  • Optez pour GeoIP2 si : vous devez traiter un grand volume d’adresses IP, si la latence réseau est un problème, ou si votre application doit fonctionner sans accès constant à internet.
  • Mon avis : Pour tout projet sérieux ou à grande échelle, l’investissement de temps dans GeoIP2 est largement rentabilisé.
@genepixontiktok La localisation d’une adresse IP, comment ça fonctionne ? #tiktokacademie #pythonprogramming ♬ Dancefloor – Instrumental – N J Crisp

Aller plus loin : visualisation et bonnes pratiques

Mettre les IP sur une carte avec Folium

Si vous voulez visualiser vos données, Folium est l’outil Python qu’il vous faut pour créer des cartes interactives. Cette bibliothèque s’appuie sur la puissance de Leaflet.js pour générer des fichiers HTML clairs.

L’installation se fait en une seconde via votre terminal. Il suffit de taper pip install folium.

Voici comment transformer des coordonnées brutes en une carte exploitable. D’abord, récupérez votre latitude et longitude via votre API préférée ou GeoIP2. Ensuite, initialisez la carte avec m = folium.Map(location=[lat, lon]). Pour marquer le point précis, ajoutez folium.Marker([lat, lon]).add_to(m). Enfin, exportez le résultat en HTML grâce à m.save('carte.html'), ce qui vous permet d’ouvrir le fichier directement dans n’importe quel navigateur pour visualiser la position.

Les limites à connaître : pourquoi la géolocalisation n’est pas parfaite

Attention, la géolocalisation par IP n’est pas une science exacte. Vous ne localisez pas une personne physique dans son salon. Vous identifiez seulement un point d’entrée réseau.

La précision varie énormément : elle peut être juste au niveau de la ville pour une connexion fixe, mais complètement à côté pour une connexion mobile ou derrière un VPN.

Souvent, l’adresse pointe vers le siège du fournisseur ou le point de raccordement de votre FAI. Sur mobile, vous ciblez l’antenne relais. Pire, l’utilisation d’un VPN comme pour Droskop faussera totalement la donne en affichant un serveur distant.

Gérer sa propre adresse IP et les adresses locales

Vous cherchez votre IP publique ? Des outils comme geocoder.ip('me') font le travail à votre place. Ils interrogent automatiquement un service externe pour récupérer votre identifiant sur le web.

Ne confondez pas cela avec votre adresse IP locale (privée). Ce sont souvent ces fameuses séries en 192.168.x.x. Elles servent uniquement à votre réseau domestique. Elles ne sont pas routables sur internet et donc impossibles à géolocaliser.

Pour capturer cette IP locale via le module socket, oubliez gethostbyname. La méthode fiable consiste à initier une connexion UDP vers une IP externe comme 8.8.8.8. Le système révèle alors l’interface réseau active sans envoyer de données.

Construire un outil complet de géolocalisation en Python

On a vu les briques séparées. Maintenant, assemblons tout ça pour construire un véritable outil capable de traiter une liste d’adresses IP et de générer un rapport visuel.

Structurer le projet : lire les IP depuis un fichier

Coder des adresses en dur est une erreur de débutant qui vous fera perdre un temps précieux. Un script viable doit digérer des sources externes variables sans nécessiter une réécriture constante du code source, garantissant ainsi une flexibilité maximale pour vos audits.

Voici la marche à suivre : créez un fichier standard `ips.txt`. En Python, on utilise un bloc `with open` pour lire le fichier ligne par ligne. L’astuce consiste à appliquer la méthode `.strip()` pour nettoyer les sauts de ligne parasites avant d’ajouter chaque adresse dans une liste Python propre. C’est la base indispensable pour lancer un traitement par lot efficace sans polluer vos données.

Combiner les méthodes pour un script robuste

L’architecture du script repose sur la modularité. Définissez une fonction dédiée, disons `geolocate_ip(ip_address)`, dont l’unique responsabilité est d’interroger l’API ou la base de données et de renvoyer un dictionnaire structuré contenant la ville, la latitude et la longitude.

Le moteur du script itère ensuite sur votre liste d’IP pour alimenter cette fonction. Que vous utilisiez la base locale GeoIP2 ou une requête `requests` vers une API, la fiabilité n’est pas négociable. Vous devez impérativement intégrer un bloc `try…except` pour capturer les échecs inévitables, comme une IP invalide ou absente de la base de données. Cela empêche le script de planter brutalement au milieu d’un traitement de 500 adresses, garantissant une exécution complète.

Générer une carte avec plusieurs marqueurs

Il ne reste plus qu’à projeter ces données brutes sur une interface visuelle cohérente pour identifier les clusters géographiques.

Attention à l’ordre des opérations avec Folium. Instanciez votre objet `folium.Map()` une seule fois, en dehors de la boucle principale. C’est seulement à l’intérieur de l’itération, pour chaque géolocalisation réussie, que vous viendrez greffer un `folium.Marker()` sur cette carte existante, en utilisant les coordonnées latitude et longitude fraîchement récupérées.

Une fois la boucle terminée, finalisez l’opération avec `map.save()`. Vous obtenez alors un fichier HTML unique, interactif, regroupant l’ensemble de vos points d’intérêt, bien plus exploitable pour l’analyse qu’une série de logs textuels dans la console.

Optimisation et gestion des erreurs pour passer à l’échelle

Votre script fonctionne pour 10 IP, très bien. Mais que se passe-t-il avec 10 000 ? Le temps de traitement explose et les API vous ferment la porte. Il faut penser à l’optimisation.

Gérer les ratés : exceptions et adresses invalides

Un script solide ne doit jamais planter au premier obstacle imprévu. Dans la réalité, les données sont souvent « sales » et pleines de pièges : adresses IP mal formées, plages privées locales, ou entrées tout simplement inexistantes dans les bases de données.

Pour éviter le crash, enrobez systématiquement votre appel de géolocalisation dans un bloc try…except. Si vous utilisez la bibliothèque GeoIP2, vous devrez spécifiquement attraper l’erreur `geoip2.errors.AddressNotFoundError` pour continuer proprement. Pour les appels API classiques, vérifiez toujours que `response.status_code != 200` et gérez les `requests.exceptions.RequestException`. Cela permet à votre programme d’ignorer les erreurs ponctuelles sans interrompre brutalement toute la chaîne de traitement.

Accélérer le traitement des API : le multithreading

Le problème majeur des appels API séquentiels, c’est l’attente passive. Votre script passe la majorité de son temps à attendre la réponse du serveur distant pendant que votre processeur se tourne littéralement les pouces. C’est un gaspillage de temps énorme.

La solution pour combler ces temps morts est le multithreading. Cette technique permet de lancer plusieurs requêtes API en parallèle ; pendant qu’un « thread » patiente pour une réponse, un autre peut en initier une nouvelle. Python simplifie grandement cette gestion avec le module `concurrent.futures.ThreadPoolExecutor`. Pas de panique pour la mise en œuvre : il suffit souvent d’utiliser la méthode `executor.map()` pour appliquer votre fonction de géolocalisation à toute votre liste d’IP simultanément, boostant ainsi radicalement la vitesse d’exécution.

Et l’asynchrone avec asyncio et aiohttp ?

Si vous visez la performance pure, l’approche asynchrone (async/await) constitue une alternative moderne au multithreading, souvent plus efficace pour gérer massivement les opérations d’entrées/sorties comme les requêtes réseau.

Ici, on s’appuie sur `asyncio`, natif à Python, couplé à la librairie `aiohttp`, qui remplace `requests` dans ce paradigme. Le principe reste similaire : ne jamais bloquer l’exécution en attendant une réponse serveur. C’est certes plus complexe à appréhender pour un débutant, mais c’est la voie royale à suivre pour construire des applications à très haute performance capables de traiter des milliers de requêtes.

L’asynchrone, c’est comme un chef cuisinier qui lance plusieurs cuissons en même temps au lieu d’attendre la fin de la première pour commencer la seconde.

Au-delà de la géolocalisation : que peut-on faire d’autre ?

Localiser une IP, c’est bien. Mais une adresse IP peut nous en dire bien plus. Voyons comment Python peut nous aider à creuser un peu plus loin.

Identifier le propriétaire de l’IP (ASN)

Un ASN (Autonomous System Number) est l’identifiant unique d’un réseau sur Internet, comme un FAI ou un hébergeur web. C’est la signature technique d’une entité, qu’il s’agisse d’un opérateur télécom ou d’une grande entreprise. Sans ce numéro, le routage mondial serait impossible.

La majorité des services de géolocalisation, comme les API ipinfo.io ou les bases GeoIP2, fournissent aussi cette information. En Python, vous pouvez extraire le nom de l’organisation via un champ spécifique, souvent nommé response.traits.autonomous_system_organization. C’est très utile pour qualifier le trafic : cela permet de distinguer instantanément une connexion issue d’un FAI résidentiel légitime d’un serveur hébergé dans un data center.

Détection de proxy et de VPN

Savoir si un utilisateur se cache derrière un proxy ou un VPN est capital pour la détection de fraude, la personnalisation de contenu ou la cybersécurité. C’est un enjeu de taille pour protéger vos services. Ignorer ce signal vous expose à des risques évitables.

Il n’y a pas de méthode miracle, mais on s’appuie sur une combinaison de signaux. De nombreux services d’IP payants proposent un champ « type » explicite, classant l’IP en « hosting », « vpn » ou « residential ». L’information ASN est aussi un bon indicateur : si l’IP appartient à un hébergeur connu, il y a de fortes chances que ce soit un serveur et non un particulier.

Le cas des adresses IPv4 vs IPv6

Rappelons brièvement la différence : IPv4 est l’ancien format (ex: 8.8.8.8), aujourd’hui en pénurie. À l’inverse, IPv6 est le nouveau standard (ex: 2001:4860:4860::8888), bien plus long et complexe.

Heureusement, les outils modernes comme GeoIP2 et les bonnes API gèrent les deux formats de manière transparente. Le code Python reste identique, il suffit de passer l’adresse IPv6 à la fonction. La bibliothèque ipaddress de Python peut être utile pour valider et manipuler les deux types d’adresses sans effort.

Il existe cependant une subtilité technique à ne pas négliger. La géolocalisation des adresses IPv6 peut parfois être moins précise que celle des IPv4, car leur déploiement est plus récent et les blocs d’adresses sont alloués différemment.

  • IPv4 : Le standard historique, facile à lire mais en voie d’épuisement.
  • IPv6 : Le futur d’internet, offre un espace d’adressage quasi infini.
  • Compatibilité : La plupart des outils modernes pour localiser une adresse IP en Python gèrent les deux sans problème.

Vous voilà désormais armé pour localiser une adresse IP avec Python, que ce soit via une API rapide ou une base de données locale robuste. De la simple requête à la carte interactive, les possibilités sont vastes. À vous maintenant d’intégrer ces briques techniques dans vos futurs projets de cybersécurité ou d’analyse de données

Picture of Adrien Drancourt
Adrien Drancourt

Fondateur de Leonova, Adrien évolue depuis plus de 10 ans dans l’univers du numérique et de l’entrepreneuriat. Passionné par les nouvelles technologies et l’innovation, il décrypte les tendances qui façonnent le monde digital d’aujourd’hui.

Nos derniers articles
Rejoignez notre Newsletter