Ich verwende Wireshark für die Überwachung des Datenverkehrs auf meinem Windows- Computer. Während ich daran arbeitete, fragte ich mich, wie Wireshark es schafft, Netzwerkpakete auf niedriger Ebene abzufangen, bevor Windows dies tut.
Zunächst empfängt eine Netzwerkschnittstelle auf meiner Netzwerkkarte ein Paket. Die Netzwerkkarte führt dann einige erste Überprüfungen durch (CRC, richtige MAC-Adresse usw.). Unter der Annahme, dass die Überprüfung erfolgreich war, leitet die Netzwerkkarte das Paket weiter. Aber wie und wo?
Ich verstehe, dass Treiber das Bindeglied zwischen der Netzwerkkarte und dem Betriebssystem oder jeder anderen Anwendung sind. Ich vermute weiterhin, dass es einen separaten Treiber für Windows und Wireshark gibt ( WinPcap ?). Andernfalls kann Wireshark keine Ethernet- Frames empfangen . Gibt es zwei oder mehr NIC-Treiber gleichzeitig? Woher weiß die Netzwerkkarte, welche sie verwenden soll?
quelle
Antworten:
Das E / A-Modell in Windows basiert auf einem Stapel von Komponenten. Die Daten müssen durch die verschiedenen Komponenten des Stapels zwischen der physischen Netzwerkkarte und der Anwendung, die die Daten verbraucht, fließen. Manchmal überprüfen diese verschiedenen Komponenten die Daten (beispielsweise ein TCP-Paket), während sie durch den Stapel fließen, und basierend auf dem Inhalt dieses Pakets können die Daten geändert oder das Paket vollständig verworfen werden.
Dies ist ein vereinfachtes Modell des "Netzwerkstapels", durch den Pakete fließen, um von der Anwendung zur Leitung und umgekehrt zu gelangen.
Eine der interessantesten Komponenten im obigen Screenshot ist die WFP-Callout-API (Windows Filtering Platform). Wenn wir das vergrößern, könnte es ungefähr so aussehen:
Entwickler können ihre eigenen Module an die entsprechenden Stellen in diesem Stapel stecken. Beispielsweise verwenden Antivirenprodukte in der Regel einen "Filtertreiber", der an dieses Modell angeschlossen wird und den Netzwerkverkehr überprüft oder Firewall-Funktionen bereitstellt. Auch der Windows-Firewall-Dienst passt offensichtlich zu diesem Modell.
Wenn Sie eine Anwendung schreiben möchten, die den Netzwerkverkehr aufzeichnet, wie z. B. Wireshark, sollten Sie einen eigenen Treiber verwenden und ihn so niedrig wie möglich in den Stapel einfügen, damit er Netzwerkpakete erkennen kann bevor Ihr Firewall-Modul eine Chance hat, sie fallen zu lassen.
Es gibt also viele "Treiber", die an diesem Prozess beteiligt sind. Viele verschiedene Arten von Fahrern. Andere Arten der Eingabe / Ausgabe auf dem System, wie z. B. das Lesen und Schreiben von Festplatten, folgen sehr ähnlichen Modellen.
Ein weiterer Hinweis: WFP-Callouts sind nicht die einzige Möglichkeit, sich in den Netzwerkstapel einzufügen. WinPCap als Beispiel kommuniziert mit NDIS direkt mit einem Treiber, was bedeutet, dass es die Möglichkeit hat, den Datenverkehr abzufangen, bevor überhaupt gefiltert wurde.
NDIS-Treiber
WinPCap
Verweise:
TCP / IP-Stack der nächsten Generation in Vista +
Windows-Filterplattformarchitektur
quelle
Wie die Antwort von Ryan Ries sagt:
und dies ist eine Beschreibung in der WinPcap-Dokumentation, wie das funktioniert .
quelle