Il arrivera probablement un jour où vous allez vouloir analyser une capture de flux réseau tout en lui appliquant un traitement automatisé. Python permet de faire cela assez facilement. Vous trouverez ci-dessous quelques exemple pour vous aider à prendre en main l’outil scapy
. Ces méthodes sont notamment très utiles pour l’analyse forensique.
Intallation de scapy
pip install scapy
Lecture du fichier
from scapy.all import *
pcap = rdpcap('capture.pcapng')
for trame in pcap:
........................
....... analyse ......
........................
Extraction d’une couche protocolaire (X-PDU)
La transmission de données entre 2 machines s’effectue généralement en encapsulant différentes couches de protocoles comme des poupées russes (cf. modèle OSI). Chacune des couches est un X-PDU (avec X représentant son niveau dans le modèle OSI ou TCP/IP).
Couches OSI
Couche | X-PDU | Protocoles |
---|---|---|
Application | A-PDU | HTTP , DNS , DHCP , FTP |
Presentation | P-PDU | |
Session | S-PDU | |
Transport | T-PDU (Message) | TCP , UDP |
Réseau | N-PDU (Paquet) | IP |
Liaison | L-PDU (Trame) | Ethernet |
Il est possible d’extraire les X-PDU des différents protocoles encapsulés :
from scapy.all import *
pcap = rdpcap('capture.pcapng')
for trame in pcap:
# Trame Ethernet
_ethernet = trame[Ethernet]
# Paquet IP
_ip = trame[IP]
# Segment TCP
_tcp = trame[TCP]
Manipulation des données
Prenons exemple de l’analyse des segments TCP pdu = trame[TCP]
(mais les commandes sont les mêmes pour d’autres couches) :
Vérifier la présence d’une couche :
if pdu.haslayer(DNS) :
Afficher les données d’une couche :
pdu.show()
Informations sur la couche (couches encapsulées, attributs) :
ls(pdu)
Couche en hexadécimale :
hexa = raw(pdu).hex()
Exemple
Extraction d’une payload cachée dans des paquets IP :
from scapy.all import *
pcap = rdpcap('capture.pcapng')
data = ""
for trame in pcap:
payload = raw( trame[IP] ).hex()
data += payload[26:28]
print(data)