Scapy le couteau suisse pour le réseau
Bon Anniversaire Victoria.
Les adresses MAC
C'est quoi une adresse MAC ? Wikipédia
Quelques actions via scapy pour trouver des adresses MAC
- Votre adresse MAC
my_macs = [get_if_hwaddr(i) for i in get_if_list()]
- Renifler les adresses MAC sans fil
Vous pouvez détecter les trames de balise 802.11 pour collecter les adresses MAC (addr2) des points d'accès à proximité.
from scapy.all import * ap_list = [] def PacketHandler(pkt): if pkt.haslayer(Dot11): # Check for Beacon frames (type 0, subtype 8) if pkt.type == 0 and pkt.subtype == 8: mac = pkt.addr2 if mac not in ap_list: ap_list.append(mac) print(f"SSID: {pkt.info}, MAC: {mac}") # Sniff on a monitor interface (e.g., 'mon0') sniff(iface="mon0", prn=PacketHandler) - Résolution de l'IP sur MAC via ARP
Pour tracer l'adresse MAC associée à une adresse IP spécifique sur le réseau local, envoyez une requête ARP.
import scapy.all as scapy def get_mac(ip): arp_request = scapy.ARP(pdst=ip) broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff") arp_request_broadcast = broadcast / arp_request answered_list = scapy.srp(arp_request_broadcast, timeout=1, verbose=False)[0] if answered_list: return answered_list[0][1].hwsrc return None print(f"MAC for {ip}: {get_mac('192.168.1.1')}") - Extraction de MAC à partir de fichiers PCAP
Si vous avez une trace enregistrée, utilisez rdpcap pour parcourir les paquets et extraire les adresses MAC source et de destination de la couche Ethernet.
from scapy.all import * packets = rdpcap("capture.pcap") macs = set() for pkt in packets: if pkt.haslayer(Ether): macs.add(pkt[Ether].src) macs.add(pkt[Ether].dst) for mac in macs: print(mac)