2012-05-29 14 views
5

Ich verwende rdpcap Funktion von Scapy, um eine PCAP-Datei zu lesen. Ich benutze auch das Modul in einer link to HTTP support in Scapy beschrieben, die in meinem Fall benötigt wird, da ich alle HTTP-Anfragen und Antworten und ihre zugehörigen Pakete abrufen müssen.Scapy und rdpcap Funktion

Ich habe festgestellt, dass das Parsen einer großen PCAP-Datei die rdpcap Funktion zu viel Zeit braucht, um es zu lesen.

Gibt es eine Lösung, um eine pcap Datei schneller zu lesen?

+0

Wie groß ist Ihre pcap-Datei? Wie lange dauert es, um es zu lesen? Ist es wirklich zu lang (selbst wenn es nur einmal geladen wird)? Wie oft möchten Sie es lesen (rhetorische Frage)? –

+0

Meine Datei ist größer als 300 MB, ich muss das Python-Skript mehr als einmal starten. – auino

+0

@auino, was speziell ist das Problem mit der Lesezeit? Ist es zu lange, um das Skript zu entwickeln, wenn Sie bei jeder Änderung eine 300-MB-Datei analysieren oder eine Echtzeitverarbeitung erforderlich ist? Bitte geben Sie uns auch einen Sinn für eine akzeptable Analysezeit –

Antwort

4

Während ich stimme die Ladezeit ist länger als man erwarten könnte, ist es wahrscheinlich, weil die Datei analysiert wird, um ein Array von hoch zusammengesetzten Objekten zu generieren. Was ich tun musste, war editcap zu verwenden, um die Paketerfassungen zu zerhacken, um das Lesen etwas leichter zu machen. Zum Beispiel:

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

Bitte beachten Sie: eine vollständige Erklärung der Schalter dieses Befehls here zur Verfügung steht.

Auch der -F libpcap Teil schien notwendig zu sein (zumindest für mich) zu scapy Funktion in der Lage, die Datei zu parsen. (Dies sollte das Standard-PPC-Dateiausgabeformat sein, aber das war für mich aus irgendeinem Grund nicht der Fall. Sie können den Dateityp Ihrer Eingabe- und Ausgabedateien mit capinfos überprüfen (z. B. einfach capinfos your_capture.pcap eingeben.)

Sowohl

capinfos und editcap sind mit der Wireshark Verteilung

2

scapy hat eine andere Methode sniff, die Sie verwenden können, die pcap zu lesen Dateien zu.

def method_filter_HTTP(pkt): 
    #Your processing 

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

rdpcap lädt die gesamte pcap-Datei in den Speicher. H Es braucht eine Menge Speicher und wie du gesagt hast ist es langsam. Während sniff liest ein Paket zu einem Zeitpunkt und übergibt es an die bereitgestellten prn Funktion. Dieser Parameter store=0 stellt sicher, dass das Paket aus dem Speicher gelöscht wird, sobald es verarbeitet wird.