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.
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
"No.","Time","Source","Destination","Protocol","Length","Info"
Datums- und Uhrzeitformat (1973-06-14 01: 02: 03.123456)
$ 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
$ curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
$ vi /usr/bin/yum Beispiel) Wie folgt korrigiert !/usr/bin/python2.6
$ pip install packetseq
Dieses Mal werde ich erklären, wie man es basierend auf der folgenden Umgebung verwendet
Client (Windows 7) --- Proxy (Squid) --- Server (nifty.com usw.)
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
tcp.port == Portnummer
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
$ packetseq client.csv proxy.csv
$ python packetseq.py client.csv proxy.csv
\######################################## 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)
$ 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"
Dadurch erhalten Sie eine Folge von Paketen an mehreren Orten
Siehe packetseq.py
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 | - |
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", }
Recommended Posts