[PYTHON] Erstellt ein Tool zum Ausgeben eines Sequenzdiagramms aus einer Paketerfassungsdatei mit mehreren Knoten

Erstellt ein Tool zum Ausgeben eines Sequenzdiagramms aus einer Paketerfassungsdatei mit mehreren Knoten

1. Übersicht

Ich habe ein Tool namens packetseq erstellt, das ein Paketsequenzdiagramm im PNG-Format aus einer Datei ausgibt, die gleichzeitig von Wireshark oder tcpdump auf mehreren Knoten im Netzwerk erfasst wurde. Ich habe Python und Seqdiag verwendet, Bibliotheken zum Erstellen von Sequenzdiagrammen.

1-1 Hintergrund der Werkzeugerstellung

Um die Netzwerkverzögerung der Kundenumgebung im Unternehmen zu untersuchen, wurden die an jedem Kommunikationsknoten gesammelten Pakete abgeglichen. Da das Paket im PCAP-Format vorliegt, habe ich es mit Wireshark durchsucht und zuerst mehrere Wiresharks geöffnet und sie mit meinen Augen abgeglichen, aber es war unmöglich. Wireshark hat ein Tool namens Flussdiagramm, das eine bestimmte Verbindung anzeigt, aber ich habe aufgegeben, weil es nicht zum Abgleichen von Paketen verwendet werden kann, die an mehreren Standorten gesammelt wurden. Da es keine Hilfe dafür gibt, habe ich beschlossen, eine Folge von Paketen in Excel zu erstellen. Ich habe die Erfassungsdatei auf eine bestimmte Portkommunikation vom Client eingegrenzt, das Paket exportiert, in das CSV-Format konvertiert und ein Sequenzdiagramm von Hand in Excel erstellt. Es war nützlich, mit dem Team zu diskutieren, aber es dauerte zu lange und ich wollte das Gleiche nicht noch einmal wiederholen, also habe ich ein Tool erstellt.

Umwelt zu dieser Zeit (Referenz)

Http Client --- Internet --- LLB --- FW --- SLB --- Http Server

1-2. Was Sie benötigen, um das Tool auszuführen

"No.","Time","Source","Destination","Protocol","Length","Info"
 Datums- und Uhrzeitformat (1973-06-14 01: 02: 03.123456)

1-3 Referenzierte Sites

2. Flow

2-1. Umweltbau

  1. Installieren Sie Python 2.7
$ curl -L -O https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
$ tar zxvf Python-2.7.12.tgz
$ cd Python-2.7.12
$ ./configure
$ make && make altinstall
  1. Installieren Sie pip
$ curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
  1. Geändert, um yum zu verwenden Yum-Befehlsinterpreter zum Ausführen von vorhandenem Python behoben (Version 2.6)
$ vi /usr/bin/yum
 Beispiel) Wie folgt korrigiert
!/usr/bin/python2.6
  1. Vorbereitung des erstellten Werkzeugs
$ pip install packetseq

2-2. Verwendungsverfahren (Übersicht)

  1. Paketerfassung am Ort des Kommunikationspfads
  2. Exportieren Sie nur die Kommunikation eines bestimmten Ports aus der Erfassungsdatei
  3. Als CSV-Datei speichern
  4. Senden Sie die CSV-Datei in der diesmal erstellten Tool-Ausführungsumgebung
  5. Führen Sie das Tool aus
  6. Geben Sie den Namen des gegenüberliegenden Geräts zwischen der Kommunikation über die Standardeingabe ein
  7. Sequenzdiagramm erstellt

2-3. Verwendungsverfahren (Erklärung)

Dieses Mal werde ich erklären, wie man es basierend auf der folgenden Umgebung verwendet

 Client (Windows 7) --- Proxy (Squid) --- Server (nifty.com usw.)
  1. Paketerfassung am Ort des Kommunikationspfads Wireshark wurde auf dem Client (Windows 7) und tcpdump auf dem Proxy (Squid) verwendet. Beispiel) Paketerfassung auf dem Client
 Führen Sie wireshark aus und speichern Sie, wenn die Kommunikation abgeschlossen ist
 Der Dateiname ist beliebig, speichern Sie ihn als client.pcap

Beispiel) Paketerfassung auf einem Proxyserver

$ tcpdump -i eth1 -w proxy.pcap
 Der Dateiname ist beliebig, speichern Sie ihn als proxy.pcap
  1. Exportieren Sie nur die Kommunikation eines bestimmten Ports aus der Erfassungsdatei Öffnen Sie die gerade mit wireshark aufgenommene Datei und beschränken Sie sie auf einen bestimmten Port Überprüfen Sie insbesondere die Portnummer, wenn Sie das SYN-Flag für 3-Wege-Handshake senden. Filter auf Wireshark
 tcp.port == Portnummer
  1. Als CSV-Datei speichern Speichern Sie im CSV-Format mit Wireshark Beispiel) Paketerfassung auf dem Client
 Der Dateiname ist beliebig, speichern Sie ihn als client.csv

Beispiel) Paketerfassung auf einem Proxyserver

 Der Dateiname ist beliebig, speichern Sie ihn als proxy.csv
  1. Senden Sie die CSV-Datei in der diesmal erstellten Tool-Ausführungsumgebung
  2. Führen Sie das Tool aus Da es diesmal zwei Sammelpunkte gibt, übergeben Sie die zuvor erfassten Dateien als Argumente in der Reihenfolge der Nähe von der Clientseite und führen Sie sie aus --Wenn Sie von Pip usw. installieren und von Befehlen verwenden
$ packetseq client.csv proxy.csv
$ python packetseq.py client.csv proxy.csv 
  1. Geben Sie den Namen des gegenüberliegenden Geräts zwischen der Kommunikation über die Standardeingabe ein Sie werden durch Standardeingabe aufgefordert, den Namen zweimal einzugeben, Quell-IP und Ziel-IP für jede Datei Das folgende Beispiel befindet sich zwischen dem Client und dem Proxy, daher habe ich "Client" und "Proxy" ausgewählt.
\########################################
file_name:client.csv
\########################################
src ip:192.168.1.3 -> src name: ???
 Eingabe src Name> Client (★ Standardeingabe)
dst ip:192.168.1.62 -> dst name: ???
 Eingabe dst name> Proxy (★ Standardeingabe)

Als nächstes ist auch eine Eingabe zwischen Proxyservern erforderlich, daher habe ich "Proxy" und "Sever" gewählt.

\########################################
file_name:proxy.csv
\########################################
src ip:192.168.1.3 -> src name: ???
 Eingabe src Name> Proxy (★ Standardeingabe)
dst ip:192.168.1.62 -> dst name: ???
 Eingabe dst Name> Server (★ Standardeingabe)
  1. Sequenzdiagramm erstellt Die Dateien out.png und out.diag werden erstellt out.png ist ein Sequenzdiagramm im PNG-Format Seqdiag-Formatdatei, aus der out.diag die Quelle der Bilderzeugung war
$ file out.*
out.diag: ASCII text, with very long lines
out.png:  PNG image data, 1856 x 31706, 8-bit/color RGBA, non-interlaced

Von links ist es ein Sequenzdiagramm von "Client", "Proxy", "Web" packetseq_img.png
Dadurch erhalten Sie eine Folge von Paketen an mehreren Orten

3. Über Werkzeuge

3-1. Quellcode

Siehe packetseq.py

3-2. Prozessablauf

  1. Übergeben Sie die CSV-Datei als Argument
  2. Erkennen Sie die Kommunikation zwischen der Kommunikation vom SYN-Flag für jede Datei 3.2 Übergeben Sie den Namen des gegenüberliegenden Knotens in 2 als Standardeingabe
  3. Ersetzen Sie die IP-Adresse durch den in 3 angegebenen Namen.
  4. Ausgabe im Seqdiag-Format
  5. Übergeben Sie es an Seqdiag und geben Sie das Bild aus

3-3. Optional

Möglichkeit Erläuterung Bemerkungen
-h, --help Hilfemeldung anzeigen -
-o, --Name der Ausgabedatei Geben Sie den Namen der Ausgabezieldatei an -
-i, --info Ausgabetyp Wählen Sie die Ausgabe der Paketinformationen in der Sequenz Der Ausgabetyp ist eine Zusammenfassung, info,Wählen Sie aus 3 Standardeinstellungen
-t, --type Wählen Sie als Ausgabeformat png oder svg -

3-4 Farbspezifikation

css color keyword kann angegeben werden Beispiel) Angabe zum Quellcode

tcp flag color
SYN blue
SYN ACK red
ACK green
FIN navy
FIN ACK maroon
RST purple
RST ACK fuchsia
URG olive
PSH orange
Other gray

Die Farbeinstellungen werden in self.color_dict der Funktion \ __ init__ angegeben

 # Wörterbuch der Farbinformationen
        self.color_dict = {
            'SYN': "blue", 'SYN ACK': "red",
            'ACK': "green",
            'FIN': "navy", 'FIN ACK': "maroon",
            'RST': "purple", 'RST ACK': "fuchsia",
            'URG': "olive", 'PSH': "orange",
            'Other': "gray",
        }

3-5 Ausgabe von Paketinformationen

  1. "summary" TCP-Flag und nur übertragene Daten summary.png
  2. "info" info Vollständige Datenanzeige info.png
  3. "default" Sport und Sport entfernen default.png

4. Herausforderungen

5. Achtung

Recommended Posts

Erstellt ein Tool zum Ausgeben eines Sequenzdiagramms aus einer Paketerfassungsdatei mit mehreren Knoten
Schreiben Sie die Standardausgabe in eine Datei
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
Geben Sie die Ergebnisse der Nachsuche mithilfe der Mattermost-API in eine Datei aus
Ich habe ein Tool zum Generieren von Markdown aus der exportierten Scrapbox-JSON-Datei erstellt
Von der Excel-Datei zur Exe und Freigabe des Tools, das CSV ausspuckt
Erstellt ein Tool zur mechanischen Visualisierung aus dem Repository-Verlauf, um die Produktivität und Solidität des Entwicklungsteams objektiv zu kennen
Erstellt ein Modul zur Überwachung von Datei- und URL-Aktualisierungen
Erstellen Sie eine Kopie einer Google Drive-Datei aus Python
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
Geben Sie einen Binärspeicherauszug in Binärdatei und zurück in eine Binärdatei aus
Verfahren von der Umgebungskonstruktion bis zum Betriebstest von testinfra, einem von Python erstellten Testwerkzeug für die Serverumgebung
Ich habe ein Tool erstellt, um automatisch ein einfaches ER-Diagramm aus der Anweisung CREATE TABLE zu generieren