Der Weg einer Anfrage
- Eingang: Ein .pcapng-Mitschnitt
- Orchestrierung: Pyshark, über Wiresharks tshark - Pyshark, Wireshark
- Parallel
- Anwendungsprotokolle - HTTP, HTTPS, DNS, FTP, SMTP
- Transport und Steuerung - TCP, UDP, ICMP, ARP
- Adressierung - IP, Ethernet
- Ausgabe: Eine Zeile je Paket - Aufklappbar und in den Diagrammen gezählt - Tkinter, Matplotlib
Überblick
Die Arbeit behandelt, wie Netzwerkverkehr analysiert wird und warum PCAP dafür zum Standardformat wurde. Die Anwendung setzt das praktisch um: Nach dem Öffnen eines Mitschnitts zeigt sie, was jedes Paket enthält, Protokoll für Protokoll.
Darunter arbeitet Wireshark: Pyshark steuert dessen tshark, und daher kommt die Breite beim Parsen. Darauf aufbauend stellt die Anwendung jedem Paket der Datei dieselben festen Fragen und zeigt alle Antworten an einer Stelle. Genau das braucht man, wenn man etwas sucht und noch nicht weiß, in welchem Paket es steckt.
Technologien
- Oberfläche
- PythonTkinter
- Mitschnitt
- PysharkWireshark
- Diagramme
- Matplotlib
Architektur
Der Mitschnitt wird einmal gelesen
Ein Dateidialog nimmt eine .pcapng- oder .pcap-Datei entgegen, Pyshark öffnet sie, und alle Pakete landen in einer Liste im Speicher, bevor die Datei geschlossen wird. Danach wird die Datei nicht mehr gelesen, deshalb kosten die Filter kaum etwas: Sie laufen über die Liste, statt den Mitschnitt neu zu parsen.
Jedes Paket wird Schicht für Schicht durchgegangen
Die Protokollnamen kommen aus dem Schichtenstapel des Pakets selbst und nicht aus einer Nachschlagetabelle. So meldet jedes Paket, was es tatsächlich enthält, und die Zählung am Ende erfasst echte Schichten. Danach laufen zwölf Extraktoren nacheinander, und jeder prüft zuerst, ob sein Protokoll vorhanden ist, bevor er irgendetwas anfasst.
Jeder Extraktor fragt, bevor er liest
Dass einem Paket ein Feld fehlt, ist kein Fehler, sondern der Normalfall. Deshalb prüft jeder Extraktor vor dem Lesen, ob ein Attribut existiert, und lässt Fehlendes einfach weg. Darum ist der Baum ungleichmäßig: Ein HTTP-Paket zeigt ein Dutzend Felder, das nächste zwei, und beides stimmt.
Was im Klartext übertragen wird, erscheint im Klartext
HTTP-Basic-Zugangsdaten sind nur base64-kodiert, nicht verschlüsselt, also dekodiert der Extraktor sie. FTP schickt Benutzername und Passwort als Klartext, also erscheinen auch sie. Genau diesen ehrlichen Nachweis wollte die Arbeit führen: keine Behauptung, dass diese Protokolle unsicher sind, sondern die dekodierte Zeichenkette, die im Baum vor Ihnen steht.
Die Ergebnisse landen in einem Baum und in Diagrammen
Jedes Paket wird zu einer Zeile mit Zeitstempel, Quell- und Ziel-IP, Länge und Protokollliste, die sich in einen Knoten je Protokoll und ein Blatt je Feld aufklappen lässt. Derselbe Durchgang liefert die Anzahl je Protokoll, die Matplotlib als Kreis- und Balkendiagramm direkt ins Fenster zeichnet.
Was es kann
Zwölf Protokolle, je Paket
HTTP, HTTPS, DNS, FTP, SMTP, ARP, ICMP, IP, Ethernet, TCP, UDP und FPP, jedes mit eigenem Extraktor und eigenen Feldern.
Filter nach fünf Kriterien
Ein Datums- und Zeitbereich, eine Quell-IP, eine Ziel-IP und eine durch Kommas getrennte Protokollliste. Bleibt die Uhrzeit leer, gilt der ganze Tag, von 00:00:00 bis 23:59:59.
Ein Baum, keine Textwand
Paket, dann Protokoll, dann Feld, und jede Ebene erscheint erst, wenn Sie sie aufklappen. So bleibt auch ein Mitschnitt mit Tausenden Paketen übersichtlich.
Protokollverteilung auf einen Blick
Ein Kreisdiagramm für die Anteile und ein Balkendiagramm für die Anzahl, bei jedem Filtern neu gezeichnet, sodass sichtbar wird, was ein Filter tatsächlich entfernt hat.
Zugangsdaten im Klartext, als solche gezeigt
Dekodierte HTTP-Basic-Zugangsdaten sowie FTP-Benutzernamen und -Passwörter: das kürzeste Argument dagegen, diese Protokolle unverschlüsselt zu verwenden.
Beide PCAP-Generationen
Der Dialog akzeptiert .pcapng und .pcap. Das neuere Format enthält mehr Metadaten und kann mehrere Schnittstellen abbilden, gelesen wird es vom selben Code.
Was ich daraus mitnehme
Dass die Anwendung mit jedem Mitschnitt funktioniert, liegt an der Disziplin, die das Format erzwingt. Ein Paket garantiert nicht, welche Felder es enthält, also ist jeder Zugriff abgesichert, und ein fehlendes Feld ist ein normales Ergebnis und kein Fehler. Weil die zwölf Extraktoren einzeln ausgeschrieben sind, bleibt das überall sichtbar, und deshalb laufen ein Mitschnitt mit zwei Paketen und einer mit zweitausend ohne einen einzigen Sonderfall durch denselben Code.
Weil der Mitschnitt nur einmal gelesen wird, reagiert alles Weitere sofort. Jeder Filter, jede Neuzählung und jedes neu gezeichnete Diagramm arbeitet mit der Liste, die schon im Speicher liegt. Ändert man ein Datum oder eine IP-Adresse, erscheint gleich eine neue Ansicht desselben Mitschnitts, ohne dass die Datei erneut gelesen wird.