Erstellen Sie Ihren eigenen Netzwerkmonitor mit Pyshark

Erstellen Sie Ihren eigenen Netzwerkmonitor mit Pyshark

Bestehende Werkzeuge

Viele Tools für die Netzwerkanalyse existieren seit geringer Zeit. Unter Linux sind dies beispielsweise Wireshark, TCPDump, NLOAD, IFTOP, IPTRAF, Nethogs, Bmon, TCPtrack sowie Tachometer und EtterCap. Für eine detaillierte Beschreibung von ihnen schauen Sie sich möglicherweise den Vergleich von Silver Moon an [1].

Warum also nicht ein vorhandenes Tool verwenden und stattdessen Ihre eigene schreiben? Gründe, die ich sehe, sind ein besseres Verständnis der TCP/IP -Netzwerkprotokolle, lernen, wie man ordnungsgemäß codiert, oder implementieren nur die spezifische Funktion, die Sie für Ihren Anwendungsfall benötigen, da die vorhandenen Tools Ihnen nicht das geben, was Sie tatsächlich benötigen. Darüber hinaus können Geschwindigkeits- und Lastverbesserungen an Ihrer Anwendung/Ihrem System eine Rolle spielen, die Sie dazu motiviert, sich mehr in diese Richtung zu bewegen.

In freier Wildbahn gibt es einige Python -Bibliotheken für die Netzwerkverarbeitung und -analyse. Für die Programmierung auf niedriger Ebene ist die Socket-Bibliothek [2] der Schlüssel. Protokollbasierte Bibliotheken auf hoher Ebene sind HTTPLIB, FTPLIB, IMAPLIB und SMTPLIB. Um Netzwerkports und die Wettbewerbskandidaten für Paketstrom zu überwachen, werden Python-NMAP [3], DPKT [4] und Pyshark [5] verwendet. Für die Überwachung und das Ändern des Paketstroms ist die Scapy -Bibliothek [6] weit verbreitet.

In diesem Artikel werden wir uns die Pyshark -Bibliothek ansehen und überwachen, welche Pakete zu einer bestimmten Netzwerkschnittstelle gelangen. Wie Sie unten sehen werden, ist die Arbeit mit Pyshark unkompliziert. Die Dokumentation auf der Projektwebsite hilft Ihnen für die ersten Schritte - damit Sie sehr schnell ein nutzbares Ergebnis erzielen werden. Wenn es jedoch um das Nitty-Erreger geht, ist mehr Wissen notwendig.

Pyshark kann viel mehr tun, als es auf den ersten Blick scheint, und zum Zeitpunkt dieses Schreibens verdeckt die vorhandene Dokumentation leider nicht, dass dies vollständig abdeckt. Dies macht es unnötig schwierig und bietet einen guten Grund, tiefer unter die Motorhaube zu schauen.

Über Pyshark

Pyshark [8] ist ein Python -Wrapper für Tshark [10]. Es nutzt lediglich seine Fähigkeit, XML -Daten mithilfe seiner Parsen zu exportieren. Tshark selbst ist die Befehlszeilenversion von Wireshark. Sowohl Tshark als auch Pyshark sind von der PCAP -Bibliothek abhängig, die tatsächlich Netzwerkpakete erfasst und unter der Motorhaube von TCPDump gehalten wird [7]. Pyshark wird von Dan entwickelt und kontinuierlich gepflegt (er verwendet den Namen Kiminewt auf Twitter).

Um eine mögliche Verwirrung zu vermeiden. Der Name PySpark wird für die Python -Schnittstelle zu Apache Spark verwendet, die wir hier nicht diskutieren.

Pyshark installieren

Pyshark erfordert, dass sowohl die PCAP -Bibliothek als auch die Tshark installiert werden. Die entsprechenden Pakete für Debian GNU/Linux 10 und Ubuntu heißt libpcap0.8 und Tshark und können wie folgt mit APT-Get eingerichtet werden:

Listing 1: Installation der PCAP -Bibliothek und TSHARK

# PIP3 Installieren Sie Python-Pyshark

Wenn noch nicht installiert, müssen auch Python3 und PIP hinzugefügt werden. Die entsprechenden Pakete für Debian GNU/Linux 10 und Ubuntu werden als Python3 und Python3-PIP bezeichnet und können wie folgt mit APT-Get installiert werden:

Listing 2: Installieren Sie Python 3 und PIP für Python 3

# APT-Get Installieren Sie Python3 Python3-Pip

Jetzt ist es Zeit, Pyshark hinzuzufügen. Basierend auf unserer Forschung ist Pyshark noch nicht für eine große Linux -Verteilung verpackt. Die Installation von IT erfolgt wie folgt mit dem Python Package Installer PIP3 (PIP für Python 3) wie folgt:

Listing 3: Installieren Sie Pyshark mit PIP

# PIP3 Installieren Sie Python-Pyshark

Jetzt kann Pyshark in Python -Skripten auf Ihrem Linux -System verwendet werden. Bitte beachten Sie, dass die folgenden Python -Skripte als administratives Benutzer beispielsweise mit sudo ausführen, da die PCAP -Bibliothek Sie nicht erlaubt, Pakete als regulärer Benutzer zu suchen.

In der folgenden Erklärung wird der Inhalt des Pyshark -Moduls zum Namespace Ihres Python -Skripts hinzugefügt:

Listing 4: Importieren Sie das Pyshark -Modul

Pyshark importieren

Methoden zur Erfassung von Paketen

Pyshark ist aus der Schachtel mit zwei verschiedenen Modi ausgestattet, mit denen es anbietet, Pakete von der beobachteten Netzwerkschnittstelle zu sammeln. Verwenden Sie für die kontinuierliche Sammlung die Methode LiveCapture () und zum Speichern in einer lokalen Datei die Methode fileCapture () aus dem Pyshark -Modul. Das Ergebnis ist eine Paketliste (Python Iterator -Objekt), mit der Sie das erfasste Datenpaket per Paket durchlaufen können. Die folgenden Auflistungen zeigen, wie die beiden Methoden verwendet werden.

Listing 5: Verwenden Sie Pyshark, um von der ersten WLAN -Schnittstelle WLAN0 zu erfassen

Pyshark importieren
Capture = Pyshark.LiveCapture (Schnittstelle = 'WLAN0')

Mit den vorherigen Aussagen werden die erfassten Netzwerkpakete im Speicher gehalten. Der verfügbare Speicher kann jedoch begrenzt sein. Das Speichern der erfassten Pakete in einer lokalen Datei ist jedoch eine Alternative,. In der Verwendung ist das PCAP -Dateiformat [9]. Auf diese Weise können Sie die erfassten Daten durch andere Tools verarbeiten und interpretieren, die auch mit der PCAP -Bibliothek verknüpft sind.

Listing 6: Verwenden Sie Pyshark, um die erfassten Pakete in einer lokalen Datei zu speichern

Pyshark importieren
Capture = Pyshark.Filecapture ('/tmp/networkPackages.Deckel')

Ausführungsauflistungen 5 und 6, Sie haben noch keine Ausgabe. Der nächste Schritt besteht darin, die Pakete einzugrenzen, die genauer auf der Grundlage Ihrer gewünschten Kriterien gesammelt werden sollen.

Pakete auswählen

Das zuvor eingeführte Capture -Objekt stellt eine Verbindung zur gewünschten Schnittstelle her. Als nächstes sammeln die beiden Methoden Sniff () und Sniff_Continuous () des Capture -Objekts die Netzwerkpakete. Sniff () kehrt zum Anrufer zurück, sobald alle angeforderten Pakete gesammelt wurden. Im Gegensatz dazu liefert Sniff_Continuous () dem Anrufer ein einzelnes Paket, sobald es gesammelt wurde. Dies ermöglicht einen Live -Strom des Netzwerkverkehrs.

Darüber hinaus können Sie mit den beiden Methoden verschiedene Einschränkungen und Filtermechanismus von Paketen angeben, beispielsweise die Anzahl der Pakete mit dem Parameterpaket_Count und der Zeitraum, in dem die Pakete mit dem Parameter -Zeitlimit erfasst werden sollen. Listing 7 zeigt, wie 50 Netzwerkpakete nur als Live -Stream mit der Methode sniff_continuous () sammeln () ().

Listing 7: Sammeln Sie 50 Netzwerkpakete von WLAN0

Pyshark importieren
Capture = Pyshark.LiveCapture (Schnittstelle = 'WLAN0')
Für das Paket in der Erfassung.Sniff_Continuous (packet_count = 5):
Druck (Paket)

Verschiedene Paketdetails sind mit dem Anweisung Print (Paket) sichtbar (siehe Abbildung 1).

Abbildung 1: Paketinhalt

In Listing 7 haben Sie alle Arten von Netzwerkpaketen gesammelt, unabhängig davon, welches Protokoll oder welches Service -Port. Mit Pyshark können Sie mit dem sogenannten BPF-Filter erweiterte Filterung durchführen [12]. Listing 8 zeigt, wie 5 TCP -Pakete über Port 80 gesammelt und der Pakettyp gedruckt werden. Die Informationen werden im Paketattribut am höchsten gespeichert.

Auflistung 8: nur TCP -Pakete sammeln, nur

Pyshark importieren
Capture = Pyshark.LiveCapture (Interface = 'WLAN0', BPF_FILTER = 'TCP Port 80')
ergreifen.schnüffeln (packet_count = 5)
drucken (erfassen)
Für Paket in Capture:
Druck (Paket.HEIGHT_LAYER)

Speichern Sie die Auflistung 8 als Datei TCP-Sniff.Py und führen Sie das Python -Skript aus. Die Ausgabe ist wie folgt:

Listing 9: Die Ausgabe von Listing 8

# Python3 TCP-Sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Entbindung der erfassten Pakete

Das erfasste Objekt funktioniert als russische Matroska -Puppe - Schicht für Schicht, es enthält den Inhalt des entsprechenden Netzwerkpakets. Unboxing fühlt sich ein bisschen wie Weihnachten an - Sie wissen erst, welche Informationen Sie im Inneren finden, bis Sie es geöffnet haben. Auflistung 10 zeigt, dass 10 Netzwerkpakete erfasst und der Protokolltyp sowohl der Quell- als auch der Zielport und die Adresse angezeigt werden.

Listing 10: Quelle und Ziel des erfassten Pakets angezeigt

Pyshark importieren
Importzeit
# Schnittstelle definieren
networkinterface = "enp0s3"
# Definieren Sie das Capture -Objekt
Capture = Pyshark.LiveCapture (interface = networkInterface)
print ("Hören von % s" % NetworkInterface)
Für das Paket in der Erfassung.Sniff_Continuous (packet_count = 10):
# Eingeordneter Ausgang
versuchen:
# Holen Sie sich den Zeitstempel
Lokalzeit = Zeit.asctime (Zeit.Lokalzeit (Zeit.Zeit()))
# Paketinhalte Holen Sie sich
Protokoll = Paket.Transport_Layer # Protokolltyp
src_addr = paket.IP.SRC # Quelladresse
src_port = paket [Protokoll].Srcport # Source -Port
dst_addr = paket.IP.DST # Zieladresse
dst_port = paket [Protokoll].DStport # Zielport
# Ausgabepaketinformationen
print ("%s ip%s:%s%s:%s (%s)"%(LocalTime, SRC_ADDR, SRC_PORT, DST_ADDR, DST_PORT, Protokoll))
außer AttributeError als e:
# Ignorieren Sie andere Pakete als TCP, UDP und IPv4
passieren
drucken (" ")

Das Skript erzeugt eine Ausgabe, wie in Abbildung 2 gezeigt, eine einzelne Zeile pro empfangenes Paket. Jede Zeile beginnt mit einem Zeitstempel, gefolgt von der Quell -IP -Adresse und dem Port, dann der IP -Adresse und des Ziels der Ziel -IP und der Art des Netzwerkprotokolls.


Abbildung 2: Quelle und Ziel für erfasste Pakete

Abschluss

Der Aufbau eines eigenen Netzwerkscanners war noch nie einfacher als das. Basierend auf den Grundlagen von Wireshark bietet Ihnen Pyshark einen umfassenden und stabilen Rahmen, um die Netzwerkschnittstellen Ihres Systems so zu überwachen, wie Sie es benötigen.

Links und Referenzen

  • [1] Silver Moon: 18 Befehle zur Überwachung der Netzwerkbandbreite auf Linux Server, https: // www.Binarytiden.com/linux-commands-monitor-network/
  • [2] Python Socket Library, https: // docs.Python.org/3/Bibliothek/Socket.html
  • [3] Python-nmap, https: // pypi.org/project/python3-nmap/
  • [4] DPKT, https: // pypi.org/project/dpkt/
  • [5] Pyshark, https: // pypi.org/project/pyshark/
  • [6] scapy, https: // pypi.org/project/scapy/
  • [7] TCPDump und libpcap, http: // www.tcpdump.org/
  • [8] Pyshark, Projektwebsite, http: // kiminewt.Github.io/pyshark/
  • [9] LIBPCap -Dateiformat, Wireshark Wiki, https: // gitlab.com/Wireshark/Wireshark/-/wikis/Entwicklung/libpcapFileformat
  • [10] Tshark, https: // www.Wireshark.org/docs/mannseiten/tshark.html
  • [11] Apache Spark, https: // Spark.Apache.org/
  • [12] BPF -Filter, https: // wiki.Wireshark.org/captureFilters