C'est bien si seuls les paquets générés sur localhost sont utilisés, mais lorsque la redirection de port est terminée, Wireshark est foiré et c'est difficile à comprendre, alors j'ai essayé de le visualiser.
Cette fois, nous ne traitons que des paquets qui se produisent sur localhost, mais nous utilisons le PageRank (visualisez l'importance du nœud) pour ceux qui reçoivent plusieurs paquets.
Python 3.7.5
pip install dpkt
pip install networkx
pip install matplotlib
Enregistrez-le car vous utiliserez le fichier capturé par Wireshark. Sélectionnez «.pcap» de «Wireshark / tcpdump / ...» comme format de fichier à enregistrer.
L'adresse IP a été corrigée pour le moment.
Les deux sont supposés être dans la même hiérarchie.
python pcap_Visualization.py <nom de fichier.pcap>
pcap_Visualization.py
import binascii
import dpkt
import matplotlib.pyplot as plt
import networkx as nx
import os
import socket
import string
import sys
def main(file_name):
packet_count = 0
pcr = dpkt.pcap.Reader(open(file_name,'rb'))
#Traitement des paquets
for ts,buf in pcr:
packet_count += 1
try:
eth = dpkt.ethernet.Ethernet(buf)
except:
continue
#Pour les données IP
if type(eth.data) == dpkt.ip.IP:
ip = eth.data
src = socket.inet_ntoa(ip.src)
dst = socket.inet_ntoa(ip.dst)
with open('./edgelist.txt', 'a') as f:
print("{} {}".format(src, dst), file = f)
G = nx.read_edgelist('edgelist.txt', nodetype=str) #Lecture de fichiers
plt.figure(figsize=(7, 7))
pos = nx.spring_layout(G)
#Ajouter un PageRank
pr = nx.pagerank(G)
nx.draw_networkx_edges(G, pos, edge_color='y')
#node_Incorporer la valeur du PageRank à la taille
nx.draw_networkx_nodes(
G,
pos,
node_color='r',
alpha=0.5,
node_size=[5000*v for v in pr.values()]
)
nx.draw_networkx_labels(
G,
pos,
font_size=10
)
plt.axis('off')
plt.show()
os.remove("edgelist.txt")
print("Sortie de traitement:{}".format(packet_count))
#Fonction principale
if __name__ == '__main__':
if (len(sys.argv) != 2):
print("Veuillez spécifier le fichier")
exit()
#Définissez le deuxième argument sur le nom du fichier
file_name = sys.argv[1]
main(file_name)
Quand j'ai ajouté un paquet généré par un autre appareil, ça ressemblait à ça! Il est difficile de faire la différence entre le PageRank ... Je vais le réparer quand j'en ai envie!
NetworkX est intéressant !! C'est un package qui exprime la connexion entre les nœuds et les bords, mais il semble qu'il puisse être appliqué à d'autres que les réseaux !! Nous attendons vos suggestions avec impatience!
Recommended Posts