[PYTHON] SLICECAP: Geteilte Parallelverarbeitung von PCAP-Dateien

Analysieren Sie Pakete?

Diejenigen, die den Netzwerkverkehr analysieren, haben die Bibliothek libpcap verwendet, oder sogar ohne die libpcap direkt zu verwenden [tcpdump] Möglicherweise haben Sie sich mit Dateien im PCAP-Format befasst, die von (http://www.tcpdump.org/) usw. erfasst wurden.

Viele Tools zur Verkehrsanalyse unterstützen das PCAP-Format. Wenn Sie also Ihre Daten in diesem Format belassen, können Sie sicher sein, dass Sie sie später mit verschiedenen Tools verwenden können. Vorhandene Tools reichen für die allgemeine Analyse aus.

Wenn Sie jedoch versuchen, eine erweiterte Analyse durchzuführen, ist es verlockend, die PCAP-Daten und die interne Struktur der darin enthaltenen Pakete genauer zu betrachten. Da Daten im PCAP-Format fast mit Binärdaten identisch sind, in denen Pakete aufgelistet sind, müssen die erforderlichen Teile mithilfe eines Vorverarbeitungsprogramms extrahiert und verarbeitet werden.

In letzter Zeit sind Netzwerke schneller geworden, und selbst einige Minuten Erfassung können manchmal zu mehreren zehn GB Daten führen. Abhängig vom Inhalt der Analyse werden die Daten wiederholt unter verschiedenen Gesichtspunkten unter Verwendung verschiedener Methoden analysiert, sofern die Methode nicht bereits festgelegt wurde. Bei kleinen Daten gibt es kein Problem, aber mit zunehmender Datenmenge kann die für die Vorverarbeitung erforderliche Zeit nicht ignoriert werden.

In diesem Artikel wird die Software "** SLICECAP **" für die Verarbeitung großer Dateien im PCAP-Format mit hoher Geschwindigkeit vorgestellt.

Teilen und verarbeiten

Die parallele Verarbeitung ist die übliche Methode, um mit großen Datenmengen zu arbeiten. Zunächst werden die Originaldaten in kleinere Daten unterteilt, und alle kleinen Daten werden zur parallelen Verarbeitung auf mehrere Threads, Prozesse und in einigen Fällen mehrere Server verteilt.

Ich würde gerne auf die gleiche Weise an Dateien im PCAP-Format arbeiten, aber hier habe ich ein Problem.

Da Daten im PCAP-Format zum Aufzeichnen eines Paketstroms dienen, gibt es keine Indexinformationen für jedes Paket. Informationen wie wie viele Pakete in einer PCAP-Datei enthalten sind und wie viele Bytes das 1000. Paket von Anfang an in der Datei beginnt, müssen in der Reihenfolge ab dem Beginn der PCAP-Datei überprüft werden. nicht. Dieser Prozess wird beim Teilen einer PCAP-Datei, die eine große Anzahl von Paketen enthält, stark geladen.

Das PCAP-Format wird unten kurz gezeigt. Der rote Header-Teil wird als globaler Header bezeichnet und enthält die Informationen der gesamten PCAP-Daten. Der blaue Header-Teil, der als Paket-Header bezeichnet wird, und der darauf folgende weiße Block stellen ein Paket dar, und der Paket-Header-Teil enthält Informationen, die für jedes Paket spezifisch sind. PCAP_FORMAT_FIGURE

Erinnere dich an den Zweck

Der Zweck bestand nun darin, die Datei im PCAP-Format in kleinere Größen aufzuteilen. Da die Daten nur in mehrere Teile geteilt und parallel verarbeitet werden müssen, ist es nicht immer erforderlich, dass die Anzahl der in den geteilten Daten enthaltenen Pakete gleich ist. SLICECAP berechnet die Datengröße nach der Division aus der Anzahl der vom Benutzer angegebenen Divisionen und der Größe der gesamten PCAP-Datei, sucht nach dem Pakettrennzeichen "** nice **" und teilt es.

Die in jedem Paketkopf aufgezeichneten Zeitstempelinformationen werden verwendet, um die Paketgrenze zu finden. Da die Pakete kontinuierlich aufgezeichnet werden, können wir davon ausgehen, dass die Zeitstempelwerte für jedes Paket ähnlich sind. Bewegen Sie zuerst den Dateizeiger an eine geeignete Position zum Teilen, und bewegen Sie den Zeiger dann Byte für Byte und dann den Zeiger an die Position, an der der Zeitstempel eines ähnlichen Werts aufgezeichnet wird. Danach wird überprüft, ob andere Felder des Paket-Headers abnormale Werte aufweisen, und wenn es als "** wie **" beurteilt wird, wird die Teilung dort bestätigt.

Die geteilten Daten werden im PCAP-Format durch Hinzufügen eines globalen Headers rekonstruiert und durch den Mechanismus der Kommunikation zwischen Prozessen an den untergeordneten Prozess übergeben. Da die geteilten PCAP-Daten durch einen separaten Prozess verarbeitet werden, verbessert sich die Verarbeitungsleistung entsprechend der Anzahl der Kerne.

Lassen Sie uns verwenden

Als Beispiel sehen Sie hier ein Beispiel für die Aufteilung einer PCAP-Datei in 10 kleine PCAP-Dateien.

slicecap -r source.pcap -n 10 -- "cat - > dest-{SLICE_ID}.pcap"

In der eigentlichen Analyse würden Sie ein Filterprogramm angeben, das etwas nützlicher ist als "cat".

Die folgende Abbildung zeigt die Verarbeitungszeit, wenn die Header-Informationen mit dem Befehl p2c in CSV konvertiert werden, während die Anzahl der parallelen Prozesse erhöht wird. ist. SLICECAP_PARA_FIGURE Der für die Messung verwendete PC ist mit zwei Intel Xeon E2697 v3 (14 Core) und 256 GB Speicher ausgestattet. Die 58 GB PCAP-Datei wurde analysiert, der IP / TCP / UDP-Header wurde extrahiert und der Prozess wurde ausgeführt, um sie im CSV-Format auszugeben. Sie sehen, dass die Verarbeitungszeit verkürzt wird, wenn die Anzahl der parallelen Prozesse erhöht wird. Der Effekt von Hyperthreading wurde nicht so sehr gesehen, wahrscheinlich weil es nur durch eine einfache ganzzahlige Operation vervollständigt wurde. Es kann je nach Verarbeitungsinhalt etwas verbessert werden.

wo bekommt man

SLICECAP ist im PyPi-Repository registriert. Bitte installieren Sie mit dem Befehl pip. Der Quellcode ist unter https://github.com/keiichishima/slicecap/ verfügbar. Bagrepo und Pururiku sind willkommen.

Recommended Posts

SLICECAP: Geteilte Parallelverarbeitung von PCAP-Dateien
Parallele Verarbeitung mit Parallel von Scikit-Learn
Informationen zum Verhalten der Warteschlange während der Parallelverarbeitung
Parallelverarbeitung mit Mehrfachverarbeitung
Verschiedene Verarbeitung von Python