J'ai créé un outil appelé packetseq qui génère un diagramme de séquence de paquets au format PNG à partir d'un fichier capturé simultanément par Wireshark ou tcpdump sur plusieurs nœuds du réseau. Le langage utilisé était Python, une bibliothèque qui crée des diagrammes de séquence appelés Seqdiag.
Afin d'étudier le retard réseau de l'environnement client au sein de l'entreprise, les paquets collectés au niveau de chaque nœud de communication ont été mis en correspondance. Comme le paquet est au format pcap, il a été visualisé avec WireShark. Wireshark a un outil appelé diagramme de flux qui affiche une connexion spécifique, mais j'ai abandonné car il ne peut pas être utilisé pour faire correspondre les paquets collectés à plusieurs endroits. Puisqu'il n'y a aucune aide pour cela, j'ai décidé de créer une séquence de paquets sur Excel. J'ai réduit le fichier de capture à une communication de port spécifique du client, exporté le paquet, l'ai converti au format CSV et créé un diagramme de séquence à la main sur Excel. Cela a été utile de discuter avec l'équipe, mais cela a pris trop de temps et je ne voulais pas répéter la même chose, j'ai donc créé un outil.
Environnement à ce moment-là (référence)
Http Client --- Internet --- LLB --- FW --- SLB --- Http Server
"No.","Time","Source","Destination","Protocol","Length","Info"
Format de la date et de l'heure (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 Exemple) Corrigé comme suit !/usr/bin/python2.6
$ pip install packetseq
--Lorsque vous utilisez uniquement le programme Enregistrer dans l'environnement où packetseq.py est exécuté
Cette fois, je vais vous expliquer comment l'utiliser en fonction de l'environnement suivant
Client (Windows 7) --- Proxy (Squid) --- Serveur (nifty.com, etc.)
Exécutez WireShark et enregistrez lorsque la communication est terminée Le nom de fichier est arbitraire, enregistrez-le sous client.pcap
Exemple) Capture de paquets sur un serveur proxy
$ tcpdump -i eth1 -w proxy.pcap Le nom du fichier est arbitraire, enregistrez-le sous proxy.pcap
tcp.port == numéro de port
Le nom du fichier est arbitraire, enregistrez-le sous client.csv
Exemple) Capture de paquets sur un serveur proxy
Le nom du fichier est arbitraire, enregistrez-le sous 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: ??? entrée src nom> Client (★ entrée standard) dst ip:192.168.1.62 -> dst name: ??? entrée nom dst> Proxy (★ entrée standard)
Ensuite, une entrée est également requise entre les serveurs proxy, j'ai donc choisi "Proxy" et "Sever".
\######################################## file_name:proxy.csv \######################################## src ip:192.168.1.3 -> src name: ??? entrée src nom> Proxy (★ entrée standard) dst ip:192.168.1.62 -> dst name: ??? entrée nom dst> Serveur (★ entrée standard)
$ file out.* out.diag: ASCII text, with very long lines out.png: PNG image data, 1856 x 31706, 8-bit/color RGBA, non-interlaced
De gauche, c'est un diagramme de séquence de "Client", "Proxy", "Web"
Cela vous donnera une séquence de paquets à plusieurs endroits
Voir packetseq.py
option | La description | Remarques |
---|---|---|
-h, --help | Afficher le message d'aide | - |
-o, --nom du fichier de sortie | Spécifiez le nom du fichier de destination de sortie | - |
-i, --info Type de sortie | Sélectionnez la sortie des informations de paquet sur la séquence | Le type de sortie est résumé, info,Choisissez parmi 3 valeurs par défaut |
-t, --type | Sélectionnez png ou svg comme format de sortie | - |
mot-clé de couleur css peut être spécifié Exemple) Spécification sur le code source
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 |
Les paramètres de couleur sont spécifiés dans self.color_dict de la fonction \ __ init__
#Dictionary des informations de couleur 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