Créer un scanner ARP en Python

C’est quoi le protocole ARP ?

Le protocole ARP (Address Resolution Protocol) est un protocole de communication de la couche liaison de données utilisé pour résoudre les adresses MAC (Media Access Control) en adresses IP sur un réseau local.

Lorsqu’un périphérique souhaite communiquer avec un autre périphérique sur le réseau, il doit connaître l’adresse MAC de celui-ci pour pouvoir envoyer les paquets de données à la bonne destination. Pour ce faire, le périphérique émet une requête ARP pour demander l’adresse MAC correspondant à l’adresse IP de destination. Si le périphérique cible est présent sur le même réseau local, il répond avec son adresse MAC, permettant ainsi au périphérique émetteur de transmettre les paquets de données à la bonne adresse.

Le protocole ARP est essentiel au fonctionnement des réseaux locaux et est largement utilisé dans les environnements informatiques pour permettre aux périphériques de communiquer entre eux.

A quoi sert un scanner ARP ?

Un scanner ARP est un outil de sécurité informatique qui utilise le protocole ARP pour détecter les périphériques connectés à un réseau local. Le scanner ARP envoie des requêtes ARP à chaque adresse IP possible sur le réseau local pour déterminer les adresses MAC associées à ces adresses IP.

En comparant les adresses MAC découvertes avec une base de données d’adresses MAC connues, le scanner ARP peut identifier les périphériques connectés au réseau local. Cela permet aux administrateurs réseau de surveiller le réseau et de détecter les périphériques non autorisés ou les activités suspectes.

Les scanners ARP sont souvent utilisés en conjonction avec d’autres outils de sécurité informatique pour surveiller et protéger les réseaux locaux contre les attaques et les violations de sécurité.

Un exemple en Python :

Oui, voici un exemple de code Python pour un scanner ARP qui utilise la bibliothèque Scapy :

from scapy.all import ARP, Ether, srp

# Adresse IP cible
target_ip = "192.168.1.1/24"

# Créer une requête ARP
arp = ARP(pdst=target_ip)

# Créer une trame Ethernet pour encapsuler la requête ARP
ether = Ether(dst="ff:ff:ff:ff:ff:ff")

# Concaténer la trame Ethernet et la requête ARP
packet = ether/arp

# Envoyer le paquet et recevoir la réponse
result = srp(packet, timeout=3, verbose=0)[0]

# Analyser les réponses
clients = []
for sent, received in result:
    clients.append({'ip': received.psrc, 'mac': received.hwsrc})

# Afficher les clients détectés
print("Liste des clients détectés : ")
print("IP" + " "*18 + "MAC")
for client in clients:
    print("{:16}    {}".format(client['ip'], client['mac']))

Ce code envoie une requête ARP pour toutes les adresses IP de la plage spécifiée (target_ip). Il encapsule la requête ARP dans une trame Ethernet et envoie le paquet sur le réseau. Ensuite, il analyse les réponses reçues et affiche les adresses IP et MAC des clients détectés.

Notez que pour exécuter ce code, vous devez installer la bibliothèque Scapy en exécutant pip install scapy. De plus, l’exécution de ce code peut nécessiter des privilèges d’administrateur sur certaines plateformes.

Ce script est bien sûr à améliorer mais il donne les bases d’un scanner ARP. Un outil équivalent qu’on utilise lors de nos CTF est netdiscover.

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.