Ceci est une ancienne révision du document !
Scapy
Installation
Cloner le dépôt GitHub pour avoir la dernière version.
Installer les paquets ipython et tcpdump.
Lancer en root:
sudo ./run_scapy
Table de routage
Voir la table de routage
conf.route.route('<adresse>')
Cette table de routage est construite en copiant celle du système au démarrage de Scapy.
Construire un paquet
pkt = Ether(dst="<adresse mac>") / IP(dst="<adresse ip>") / UDP(dport=53) / DNS()
Décrire un paquet:
ls(IP())
Envoi de paquet
Envoi d'un paquet de niveau 3:
send(IP())
Envoi d'un paquet de niveau 2:
sendp(Ether() / IP(), iface='eth0')
Si attente d'une réponse: sr1() ou srp1()
Paquets ARP
srp1(Ether(dst=ETHER_BROADCAST, ARP(op="who-has", pdst="172.21.123.45")))
Envoi de paquets à une plage IP:
ans, unans = srp(Ether(dst=ETHER_BROADCAST, ARP(pdst="192.168.0.0/24")), timeout=2, retry=-2) ans.show() #: formate tous les paquets reçus de façon sympa
ans contient des couples (paquet_envoyé, paquet_reçu), unans contient les paquets envoyés sans réponses.
Connaître l'adresse MAC qui répond à une IP:
ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(op="who-has", pdst="172.21.254.1"),timeout=2) results = [] for i in range(1,5): ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(op="who-has", pdst="172.21.254." + str(i)),timeout=2) results.append(ans[0][1].psrc + " " + ans[0][1].hwsrc) for x in results: print(x)
Paquets 802.1Q
Dot1Q()
Sniffer le réseau
pkts = sniff(filter="host A and tcp", prn=lambda p: p.summary)
ou pour mettre en forme l'affichage:
pkts = sniff(filter="host A and tcp", prn=lambda p: p.summary + p.sprintf("seq: %TCP.seq% ack: %TCP.ack%"))
Outils
Aléatoire (pour changer le port à chaque requête par exemple):
RandShort()
S'assurer que le paquet a les flags SYN et ACK activés:
[TCP].flags & 18