python_sniffer_image

Programmierung

Python Sniffer

Packet Sniffer dienen als Monitoring-Tool des eigenen Netzwerkes oder eines festgelegten Clients. Dies kann sinnvoll sein, wenn man herausfinden möchte, ob überhaupt und wenn ja, mit wem kommuniziert wird.

Für diese Zwecke dient folgende simple Python Datei:

python_sniffer.py ~ 3KB

Der Code kann beliebig verändert werden um weitere Informationen aus dem IP-Header zu entpacken.


Das Nutzen dieser Datei in einem Netzwerk, das nicht Ihnen gehört, kann strafrechtlich relevant sein. Die Inhalte dienen lediglich zum Erlernen der Programmiersprache "Python" und zum Absichern des eigenen Netzwerkes.


Kurze Erklärung


python_sniffer_code0

Es werden verschiedene Python-Module importiert: "ipaddress", "os", "socket" und "struct".


python_sniffer_code1

Die Variablen "hostname" und "host" werden verwendet, um die IP des Hostrechners zu erhalten, auf dem der Code ausgeführt wird.


python_sniffer_code2

Die Klasse "IP" wird definiert. Diese Klasse dient dazu, ein IP-Paket zu analysieren und seine Eigenschaften zu extrahieren. Die Methode "__init__" wird beim Erstellen einer neuen Instanz der Klasse aufgerufen und nimmt als Parameter den binären Inhalt des IP-Headers (buff) entgegen. In der "__init__"-Methode werden die verschiedenen Felder des IP-Headers dekodiert und in Instanzvariablen gespeichert. Dabei werden unter anderem die Version, die Länge des IP-Headers, die Quell- und Ziel-IP-Adressen, das Protokoll und einige andere Informationen extrahiert.


python_sniffer_code3

Falls ein nicht festgelegtes Protokoll decoded werden sollte, wird der Fehler abgefangen.


python_sniffer_code4

Die Methode "sniff" wird definiert, um den eigentlichen Sniffer zu implementieren. Der Sniffer verwendet das "socket"-Modul, um den Datenverkehr zu empfangen und die IP-Header der empfangenen Pakete zu analysieren. Abhängig vom Betriebssystem wird der Socket-Protokollwert festgelegt (z.B. "IPPROTO_IP" für Windows und "IPPROTO_ICMP" für andere Systeme). Ein Socket (sniffer) wird erstellt und an die IP-Adresse des Hostrechners gebunden. Dann wird "IP_HDRINCL" gesetzt, um den IP-Header in den Daten zu behalten. Wenn das Betriebssystem Windows ist, wird der Socket in den promiskuitiven Modus versetzt, um alle Pakete zu empfangen. Hierfür sind Administratorrechte notwendig. Eine Endlosschleife wird gestartet, in der der Sniffer auf den Netzwerkverkehr lauscht und empfangene Pakete analysiert. Jedes empfangene Paket wird in einem Puffer (raw_buffer) gespeichert und der IP-Header wird aus den ersten 20 Bytes extrahiert. Die extrahierten Informationen aus dem IP-Header werden verwendet, um das Protokoll, die Quell-IP-Adresse und die Ziel-IP-Adresse des Pakets auszugeben. Wenn eine Tastatureingabe (KeyboardInterrupt) erkannt wird, wird der Sniffer beendet und der promiskuitive Modus (nur für Windows) deaktiviert.


Die Methode "sniff" wird mit der IP-Adresse des Hostrechners aufgerufen, um den Sniffer zu starten.