2013-08-15 16 views
10

Próbuję przeanalizować plik pcap w python. Moim celem jest, aby móc wyciągnąć typ pliku TCP lub UDP i czas ich rozpoczęcia/zakończenia. Czy ktokolwiek ma jakieś porady w niektórych pakietach może być przydatny do użycia i dokumentacji dla nich lub porady w ogóle na piśmie?Parsowanie pliku pcap w pytonie

Odpowiedz

6

Może chcesz zacząć od scapy.

+1

Istnieje także nowsza wersja scapy kompatybilnym z python3 z dodatkowych funkcji (http://github.com/phaethon/ scapy). –

+0

Plik pycapfile może być również używany. Link: https://pypi.python.org/pypi/pypcapfile – Pawel

+0

Plik pypcapfile lub pycapfile - nie działał na moim pliku tcpdump: ethernet od 55: 32: fd: 21: 4d: 7c do 00: 00: 02: 00 : 00: 00 typ nieznany ethernet od 9d: a9: 41: cd: bb: ca to 00: 04: 02: 00: 00: 00 nieznany typ –

15

Używałbym python-dpkt. Oto dokumentacja: http://www.commercialventvac.com/dpkt.html

To wszystko, co wiem, jak zrobić, choć przepraszam.

#!/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 

Aktualizacja:

projektu na GitHub, dokumentacja here

+0

Należy zauważyć, że dpkt nie wydaje się w stanie dekodować strumieni, np. od nazwanej rury fifo, do której pisze tcpdump. Występuje błąd w czasie, gdy nie można go wyszukać (nie ma potrzeby szukania w PCAP ...). – Luc

+0

Brak wersji python 3 z dpkt (przynajmniej w repozytoriach Debiana), ale portowanie wydaje się proste: http://stackoverflow.com/a/27480361/1201863 – Luc

+0

Aby zapobiec wyjątkowi: 'UnicodeDecodeError: 'utf-8 "kodek nie może dekodować bajtu 0xd4 w pozycji 0: nieprawidłowy bajt kontynuacji" musimy użyć trybu binarnego dla otwartego pliku: 'dpkt.pcap.Reader (open (filename, 'rb'))' – korst1k