2013-08-15 15 views
10

Sto cercando di analizzare tramite un file pcap in python. Il mio obiettivo è essere in grado di estrarre il tipo di file TCP o UDP che è e il momento in cui iniziano/finiscono. Qualcuno ha qualche consiglio in alcuni pacchetti potrebbe essere utile da usare e la documentazione per loro o un consiglio in generale per scriverlo?Analisi di un file pcap in python

risposta

6

Si consiglia di iniziare con scapy.

+1

C'è, anche, versione più recente di Scapy compatibile con python3 con le caratteristiche aggiunte (http://github.com/phaethon/ Scapy). È possibile utilizzare anche pycapfile –

+0

. Link: https://pypi.python.org/pypi/pypcapfile – Pawel

+0

pypcapfile o pycapfile - non ha funzionato sul mio file tcpdump: ethernet da 55: 32: fd: 21: 4d: 7c a 00: 00: 02: 00 : 00: 00 tipo sconosciuto ethernet da 9d: a9: 41: cd: bb: ca a 00: 04: 02: 00: 00: 00 tipo sconosciuto –

15

Vorrei usare python-dpkt. Ecco la documentazione: http://www.commercialventvac.com/dpkt.html

Questo è tutto ciò che so come fare anche se dispiaciuto.

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

Aggiornamento:

Progetto GitHub, documentazione here

+0

Nota che dpkt non sembra in grado di decodificare i flussi, ad es. da una named fifo pipe a cui tcpdump sta scrivendo. Errori sull'essere incapace di cercare (non c'è comunque bisogno di cercare in un papà ...). – Luc

+0

Nessuna versione python 3 è disponibile di dpkt (almeno nei repository Debian), ma il porting sembra facile: http://stackoverflow.com/a/27480361/1201863 – Luc

+0

Per evitare un'eccezione: 'UnicodeDecodeError: 'utf-8 'il codec non può decodificare il byte 0xd4 in posizione 0: byte di continuazione non valido' abbiamo bisogno di usare la modalità binaria per il file aperto: 'dpkt.pcap.Reader (aperto (nomefile, 'rb'))' – korst1k