Ich versuche, eine pcap-Datei in Python zu analysieren. Mein Ziel ist es, in der Lage zu sein, den Typ der TCP- oder UDP-Datei, die es ist, und die Zeit, die sie beginnen/enden, herauszuziehen. Hat jemand Ratschläge in irgendwelchen bestimmten Paketen, die nützlich sein könnten, und die Dokumentation für sie oder allgemeine Ratschläge zum Schreiben?Eine pcap-Datei in Python analysieren
Antwort
Sie können mit scapy beginnen.
Ich würde Python-Dpkt verwenden. Hier ist die Dokumentation: http://www.commercialventvac.com/dpkt.html
Das ist alles, was ich tun kann, tut mir leid.
#!/usr/local/bin/python2.7
import dpkt
counter=0
ipcounter=0
tcpcounter=0
udpcounter=0
filename='sampledata.pcap'
for ts, pkt in dpkt.pcap.Reader(open(filename,'r')):
counter+=1
eth=dpkt.ethernet.Ethernet(pkt)
if eth.type!=dpkt.ethernet.ETH_TYPE_IP:
continue
ip=eth.data
ipcounter+=1
if ip.p==dpkt.ip.IP_PROTO_TCP:
tcpcounter+=1
if ip.p==dpkt.ip.IP_PROTO_UDP:
udpcounter+=1
print "Total number of packets in the pcap file: ", counter
print "Total number of ip packets: ", ipcounter
print "Total number of tcp packets: ", tcpcounter
print "Total number of udp packets: ", udpcounter
Update:
Beachten sie, dass dpkt nicht in der lage scheint, ströme zu dekodieren, zb aus einer benannten Fifo-Pipe, in die tcpdump schreibt. Es ist fehlerhaft, wenn man nicht in der Lage ist, zu suchen (es gibt keine Notwendigkeit, in einem pcap trotzdem zu suchen ...). – Luc
Keine python 3-Version von dpkt verfügbar (zumindest in den Debian-Repositories), aber die Portierung scheint einfach zu sein: http://stackoverflow.com/a/27480361/1201863 – Luc
Um eine Ausnahme zu verhindern: 'UnicodeDecodeError: 'utf-8 'Codec kann Byte 0xd4 in Position 0 nicht dekodieren: ungültiges Fortsetzungsbyte' Wir müssen den Binärmodus für offene Datei verwenden: 'dpkt.pcap.Reader (offen (Dateiname, 'rb'))' – korst1k
Es gibt auch neuere Version von scapy kompatibel mit python3 mit zusätzlichen Funktionen (http://github.com/phaethon/ scapy). –
pycapfile kann auch verwendet werden. Link: https://pypi.python.org/pypi/pypcapfile – Pawel
pypcapfile oder pycapfile - funktionierte nicht auf meiner tcpdump file: ethernet von 55: 32: fd: 21: 4d: 7c bis 00: 00: 02: 00 : 00: 00 typ unbekannt ethernet von 9d: a9: 41: cd: bb: ca bis 00: 04: 02: 00: 00: 00 typ unbekannt –