2012-05-29 13 views
5

Sto utilizzando la funzione rdpcap di Scapy per leggere un file PCAP. Io uso anche il modulo descritto in un link to HTTP support in Scapy che è necessario nel mio caso, poiché devo recuperare tutte le richieste e le risposte HTTP e i relativi pacchetti correlati.Scapy e funzione rdpcap

Ho notato che analizzando un file PCAP di grandi dimensioni la funzione rdpcap richiede troppo tempo per leggerla.

Esiste una soluzione per leggere un file pcap più veloce?

+0

Quanto è grande il file pcap? Quanto ci vuole per leggerlo? È davvero troppo lungo (anche per caricarlo solo una volta)? Quante volte vuoi leggerlo (domanda retorica)? –

+0

Il mio file è maggiore di 300 MB, devo lanciare lo script Python più di una volta. – auino

+0

@auino, qual è in particolare il problema con il tempo di lettura? È necessario troppo tempo per sviluppare lo script quando si analizza un file da 300 MB ogni volta che si apporta una modifica o sono presenti requisiti di elaborazione in tempo reale? Inoltre, per favore ci dia un senso per quello che è un tempo di analisi accettabile –

risposta

4

Mentre sono d'accordo il tempo di caricamento è più lungo di quanto ci si potrebbe aspettare, è probabile perché il file viene analizzato per generare una matrice di oggetti altamente composti. Quello che dovevo fare era usare editcap per ritagliare i pacchetti catturati per renderli un po 'più facili da leggere. Per esempio:

$ editcap -B 2013-05-2810:05:55 -i 5 -F libpcap inputcapture.pcap outputcapture.pcap 

Si prega di notare: una spiegazione completa degli interruttori di questo comando è disponibile here.

Inoltre, la parte -F libpcap sembrava essere necessaria (almeno per me) per ottenere la funzione pcap di scapy in grado di analizzare il file. (Questo dovrebbe essere il formato di output predefinito del file pcap, ma non è stato il mio caso, per qualsiasi motivo. Puoi verificare il tipo di file di input e output con capinfos (ad esempio, inserisci semplicemente capinfos your_capture.pcap)

Sia capinfos e editcap sono disponibili con la distribuzione WireShark

2

Scapy ha un altro metodo sniff che è possibile utilizzare per leggere il pcap file troppo:.

def method_filter_HTTP(pkt): 
    #Your processing 

sniff(offline="your_file.pcap",prn=method_filter_HTTP,store=0) 

rdpcap carichi l'intero file pcap alla memoria. H perché usa molta memoria e come hai detto è lento. Mentre sniff legge un pacchetto alla volta e lo passa alla funzione prn fornita. Il parametro store=0 assicura che il pacchetto venga cancellato dalla memoria non appena viene elaborato.

Problemi correlati