2013-08-15 12 views
10

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

6

Sie können mit scapy beginnen.

+1

Es gibt auch neuere Version von scapy kompatibel mit python3 mit zusätzlichen Funktionen (http://github.com/phaethon/ scapy). –

+0

pycapfile kann auch verwendet werden. Link: https://pypi.python.org/pypi/pypcapfile – Pawel

+0

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 –

15

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:

Projekt auf GitHub, Dokumentation here

+0

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

+0

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

+0

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