Es ist in Ordnung, wenn es nur die Pakete sind, die auf localhost auftreten, aber wenn die Portweiterleitung abgeschlossen ist, wird Wireshark durcheinander gebracht und es ist schwer zu verstehen, also habe ich versucht, es zu visualisieren.
Dieses Mal haben wir es nur mit Paketen zu tun, die auf localhost auftreten, aber wir verwenden PageRank (visualisieren Sie die Bedeutung des Knotens) für diejenigen, die mehrere Pakete erhalten.
Python 3.7.5
pip install dpkt
pip install networkx
pip install matplotlib
Speichern Sie es so, wie Sie die von Wireshark erfasste Datei verwenden. Wählen Sie ".pcap" von "Wireshark / tcpdump / ..." als zu speicherndes Dateiformat.
Die IP-Adresse wurde vorerst korrigiert.
Es wird angenommen, dass sich beide in derselben Hierarchie befinden.
python pcap_Visualization.py <Dateiname.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'))
#Paketverarbeitung
for ts,buf in pcr:
packet_count += 1
try:
eth = dpkt.ethernet.Ethernet(buf)
except:
continue
#Für IP-Daten
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) #Datei lesen
plt.figure(figsize=(7, 7))
pos = nx.spring_layout(G)
#PageRank hinzufügen
pr = nx.pagerank(G)
nx.draw_networkx_edges(G, pos, edge_color='y')
#node_Integrieren Sie den PageRank-Wert in die Größe
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("Verarbeitung beenden:{}".format(packet_count))
#Hauptfunktion
if __name__ == '__main__':
if (len(sys.argv) != 2):
print("Bitte geben Sie die Datei an")
exit()
#Setzen Sie das zweite Argument auf den Dateinamen
file_name = sys.argv[1]
main(file_name)
Als ich ein von einem anderen Gerät generiertes Paket hinzufügte, sah es so aus! Es ist schwer, den Unterschied zwischen PageRank zu erkennen ... Ich werde es reparieren, wenn ich Lust dazu habe!
NetworkX ist interessant !! Es ist ein Paket, das die Verbindung zwischen Knoten und Kanten ausdrückt, aber es scheint, dass es auf andere als Netzwerke angewendet werden kann !! Wir freuen uns auf Ihre Vorschläge!
Recommended Posts