Accueil » Localiser une adresse IP en Python

Localiser une adresse IP en Python

Apprenez étape par étape comment localiser une adresse IP en Python, que vous soyez débutant ou confirmé. Ce guide couvre les bases, les outils, et des cas pratiques pour intégrer cette fonctionnalité dans vos projets.

Comprendre les bases : Qu’est-ce qu’une adresse IP ?

Une adresse IP (Internet Protocol) est une étiquette numérique utilisée pour identifier les appareils connectés à un réseau informatique. Elle permet de transmettre les données correctement sur Internet.

  • IPv4 : Format classique (ex. 192.168.1.1).
  • IPv6 : Version plus récente (ex. 2a00:1450:4001:81d::200e).
  • Statique : Adresse permanente.
  • Dynamique : Adresse temporaire attribuée lors de la connexion.

Mise en place : les outils nécessaires

Pour comprendre le processus de localisation IP avec Python, voici un schéma qui illustre les étapes principales :

1. Saisie IP

Entrez l’adresse IP

2. Requête API

Envoi au serveur

3. Réception JSON

Analyse des données

4. Affichage

Résultat sur la carte

Pour commencer, installez les bibliothèques Python nécessaires avec la commande suivante :

pip install requests geopy ip2geotools

Outils présentés :

  • Requests : Pour envoyer des requêtes HTTP et interagir avec des APIs.
  • Geopy : Pour convertir des coordonnées géographiques en adresses.
  • GeoIP2 : Pour utiliser des bases de données locales pour une localisation précise.

Comparaison des outils et bibliothèques

Voici une comparaison rapide des outils mentionnés pour vous aider à choisir celui qui convient à vos besoins :

Outil/API Avantages Inconvénients Idéal pour
ipapi Facile à utiliser, API gratuite pour un usage de base. Limitation de requêtes, précision variable. Débutants et petits projets.
GeoIP2 Localisation précise, base de données locale. Requiert une configuration initiale, moins accessible pour les débutants. Applications avancées et indépendance des APIs.
ipstack Fonctionnalités avancées (réputation IP, détails ISP). Abonnement nécessaire pour des fonctionnalités complètes. Projets professionnels nécessitant des données riches.

Configurer GeoIP2 et télécharger la base GeoLite2

  1. Inscrivez-vous sur le site de MaxMind : MaxMind.
  2. Téléchargez la base de données GeoLite2 (format `.mmdb`).
  3. Placez le fichier dans un dossier accessible depuis votre script Python.
  4. Installez GeoIP2 avec pip install geoip2.

Localiser une IP avec des APIs Simples

1. Saisie IP

L’utilisateur entre l’adresse IP

2. Requête API

L’IP est envoyée à l’API

3. Réception JSON

Les données JSON sont reçues

4. Affichage

Les résultats sont affichés

Utilisons l’API ipapi pour localiser une adresse IP :


import requests

def localiser_ip(ip):
    url = f"https://ipapi.co/{ip}/json/"
    response = requests.get(url)
    data = response.json()
    return data

adresse_ip = "8.8.8.8"
info_localisation = localiser_ip(adresse_ip)
print(info_localisation)
            

Sortie possible : Informations comme le pays, la ville, les coordonnées géographiques.


import requests

def localiser_ip(ip):
    try:
        url = f"https://ipapi.co/{ip}/json/"
        response = requests.get(url)
        response.raise_for_status()  # Vérifie si la requête a réussi
        data = response.json()
        return data
    except requests.RequestException as e:
        print(f"Erreur réseau : {e}")
        return None
    except Exception as e:
        print(f"Une erreur est survenue : {e}")
        return None

Interpréter les données JSON renvoyées

Les APIs comme ipapi ou ipstack renvoient des informations détaillées au format JSON. Voici ce que chaque champ représente :

  • Country : Pays associé à l’adresse IP.
  • City : Ville approximative (selon la précision de l’API).
  • ISP : Fournisseur d’accès Internet de l’IP.
  • Location : Latitude et longitude.

Précision : Ces données sont approximatives et peuvent être affectées par des VPN, proxys ou IPs dynamiques.

Approfondir avec GeoIP2 et les bases de données

La bibliothèque GeoIP2 permet d’utiliser des bases de données locales pour plus de contrôle :


import geoip2.database

def localiser_ip(ip):
    reader = geoip2.database.Reader('chemin/vers/GeoLite2-City.mmdb')
    response = reader.city(ip)
    return response

adresse_ip = "8.8.8.8"
info_localisation = localiser_ip(adresse_ip)
print(info_localisation.country.name)
print(info_localisation.city.name)
            

Avantages : Plus rapide et indépendant des APIs externes. Requiert cependant la configuration de la base de données.

Concepts réseau avec les sockets

Les sockets permettent de récupérer l’adresse IP d’un nom de domaine :


import socket

def obtenir_ip_par_nom_domaine(domain):
    return socket.gethostbyname(domain)

ip = obtenir_ip_par_nom_domaine("google.com")
print(f"L'adresse IP de google.com est : {ip}")
            

Cas d’utilisation avancé : Scanner des IPs sur un réseau local.

Aspects Éthiques et Légaux

Respectez la vie privée : Les adresses IP peuvent révéler des informations sensibles. Assurez-vous de respecter les lois comme le RGPD en Europe.

  • Anonymisez les données lorsque possible.
  • Ne collectez pas d’informations sans consentement.

def localiser_ip(ip):
    try:
        reader = geoip2.database.Reader('chemin/vers/GeoLite2-City.mmdb')
        response = reader.city(ip)
        return response
    except geoip2.errors.AddressNotFoundError:
        print("Adresse IP introuvable dans la base de données.")
        return None
    except Exception as e:
        print(f"Une erreur est survenue : {e}")
        return None

Scanner IP avec Python et Scapy


from scapy.all import *

def scanner_reseau(network):
    print(f"Scan en cours pour le réseau : {network}")
    ans, _ = ARP(pdst=network).make_table(send_rcv())
    for req in ans:
        print(f"Adresse IP trouvée : {req[ARP].psrc}")

# Exemple : Scanner un réseau local
scanner_reseau("192.168.1.0/24")

Note : Scapy requiert des permissions administratives pour fonctionner. Lancez votre script avec des droits appropriés.

Respect des lois et de la vie privée

Lorsque vous travaillez avec des adresses IP, respectez les lois en vigueur, notamment :

  • RGPD (Europe) : Protégez les données personnelles des utilisateurs.
  • Limitez les collectes au strict nécessaire.
  • Ajoutez des disclaimers ou des autorisations pour les utilisateurs.

Recommandation : Si vous analysez des IPs, anonymisez-les avant de les stocker ou de les partager.

Cas Pratiques

1. Script Interactif pour Débutants


ip = input("Entrez une adresse IP : ")
info = localiser_ip(ip)
print(f"Localisation : {info.get('city')}, {info.get('country')}")
            

Tableau de bord interactif

Utilisez des outils comme Dash ou Folium pour afficher les localisations sur une carte :


import folium

def creer_carte(latitude, longitude):
    carte = folium.Map(location=[latitude, longitude], zoom_start=10)
    folium.Marker([latitude, longitude], popup="Localisation IP").add_to(carte)
    carte.save("localisation_ip.html")

creer_carte(48.8566, 2.3522)  # Exemple pour Paris

Ouvrez le fichier localisation_ip.html pour voir la carte générée.

2. Application Web (Intermédiaire)

Intégrez ce script dans une application Flask ou Django pour afficher la localisation IP des utilisateurs.

3. Tableau de Bord (Confirmé)

Analysez les logs réseau et affichez les localisations sur une carte interactive avec des outils comme Dash ou Folium.

Revenir en haut de page