Frage Wie lautet der Empfang und die Verarbeitung von Wireshark-Paketen auf einem Windows-Computer?


Ich werde es benutzen Wireshark für einige Verkehrsüberwachung auf meinem Windows Computer. Während ich daran arbeitete, fragte ich mich, wie Wireshark schafft es, Low-Level-Netzwerk-Pakete zuvor zu fangen Windows tut.

Zuallererst empfängt eine Netzwerkschnittstelle auf meiner NIC ein Paket. Die NIC führt dann einige anfängliche Überprüfungen durch (CRC, rechte MAC-Adresse, ... usw.). Unter der Annahme, dass die Verifizierung erfolgreich war, leitet die NIC das Paket weiter. Aber wie und wo?

Ich verstehe, dass Treiber der Klebstoff zwischen der NIC und dem Betriebssystem oder einer anderen Anwendung sind. Ich vermute außerdem, dass es einen separaten Treiber gibt Windows und Wireshark (WinPcap?). Andernfalls, Wireshark wäre nicht in der Lage zu erhalten Ethernet Rahmen. Gibt es zwei oder mehr NIC-Treiber, die gleichzeitig koexistieren? Wie weiß die NIC, welche zu verwenden?


20
2018-06-12 17:13


Ursprung


Deine Prämisse ist falsch. Die NIC übergibt das Paket immer an Windows (speziell an den Gerätetreiber und dann den Netzwerkstack), und es liegt an Windows zu entscheiden, was damit zu tun ist. Windows verfügt über eine Funktion, mit der ein Programm Kopien von Paketen empfangen kann, "die sich auf der Leitung befinden", wobei möglicherweise ein Filter angewendet wird, und Wireshark verwendet diese Funktion. Wireshark tut es nicht Windows umgehen - zwol
(Es gibt experimentelle Betriebssysteme, die versuchen, extrem schnelle Netzwerke besser zu betreiben, indem Pakete direkt von der Netzwerkkarte zur Anwendung übertragen werden können, aber AFAIK Windows kann dies nicht tun: Sie durchlaufen immer mindestens die NDIS-Schicht.) - zwol


Antworten:


Das E / A-Modell in Windows basiert auf einem Stapel von Komponenten. Daten müssen durch die verschiedenen Komponenten dieses Stapels fließen, der zwischen der physischen Netzwerkkarte und der Anwendung vorhanden ist, die die Daten verwendet. Manchmal inspizieren diese verschiedenen Komponenten die Daten (beispielsweise ein TCP-Paket), wenn sie durch den Stapel fließen, und basierend auf den Inhalten dieses Pakets können die Daten geändert werden, oder das Paket kann vollständig verworfen werden.

Network Stack 

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 (Windows Filtering Platform) Callout API. Wenn wir darauf zoomen, sieht das vielleicht so aus:

Windows Filtering Platform

Entwickler können ihre eigenen Module an den entsprechenden Stellen in diesem Stapel einstecken. Zum Beispiel verwenden Antivirus-Produkte normalerweise einen "Filter-Treiber", der an dieses Modell angeschlossen wird und den Netzwerkverkehr überprüft oder Firewall-Funktionen bereitstellt. Der Windows-Firewall-Dienst passt natürlich auch in dieses Modell.

Wenn Sie eine Anwendung schreiben möchten, die Netzwerkverkehr aufzeichnet, wie z. B. Wireshark, dann besteht die geeignete Vorgehensweise darin, einen eigenen Treiber zu verwenden und ihn so niedrig wie möglich in den Stapel einzufügen, damit er Netzwerkpakete erkennen kann bevor Ihr Firewall-Modul eine Chance hat, sie fallen zu lassen.

Daher sind viele "Treiber" in diesen Prozess involviert. Viele verschiedene Arten von Treibern. Außerdem folgen andere Formen der Eingabe / Ausgabe auf dem System, wie das Lesen und Schreiben von Festplattenlaufwerken, sehr ähnlichen Modellen.

Eine weitere Anmerkung - WFP Callouts sind nicht die einzige Möglichkeit, sich in den Netzwerkstapel einzuprägen. WinPCap ist zum Beispiel mit NDIS direkt mit einem Treiber verbunden, was bedeutet, dass es Verkehr abfangen kann, bevor eine Filterung überhaupt stattgefunden hat.

NDIS-Treiber

WinPCap

Verweise:

TCP / IP-Stack der nächsten Generation in Vista +

Architektur der Windows-Filterplattform


37
2018-06-12 17:30



Hervorragende Diagramme. Werden diese irgendwo auf microsoft.com gepostet? Wenn ja, würde ich gerne herumstöbern und sehen, welche anderen Informationen neben diesen verfügbar sind. - EEAA
Perfekte Antwort. Gut und einfach erklärt, tolle Visualisierung und Quellen zur Verfügung gestellt! Ich danke dir sehr! - Hansi
+1, erwähnenswert ist, dass es einen Open-Source-Treiber auf WFP-Basis gibt, der es einfach macht, solche Anwendungen zu schreiben WinDivert. Ich habe auch ein geschrieben .NET-Wrapper dafür.
Früher gab es so etwas wie den "Layered Service Provider" - wo man abfangen konnte und neu schreiben Pakete - gibt es einen Ersatz für diese Fähigkeit? Ist es Teil der "Filter" API? (Oh, Moment mal, egal: Ich habe mir den WinDivert-Link von @TechnikEmpire angeschaut und gesehen, dass das möglich ist.) - davidbak
@davidbak ja, WinDivert ist eine Art Hybrid. Die Callout-Treiber-APIs sind für Entwickler gedacht, um spezifische Treiber zu erstellen, die alles andere als das einfache Löschen eines Pakets tun können (benötigt keinen Treiber). WinDivert ist ein solcher Treiber, aber er ist generisch und bietet vollen Zugriff auf Pakete, indem er Pakete in und aus dem Kernel- und Benutzermodus-Raum schiebt und löscht.


Wie Ryan Ries 'Antwort sagt:

WinPCap ist zum Beispiel mit NDIS direkt mit einem Treiber verbunden, was bedeutet, dass es Verkehr abfangen kann, bevor eine Filterung überhaupt stattgefunden hat.

und Dies ist eine Beschreibung in der WinPcap-Dokumentation, wie das funktioniert.


3
2018-06-12 19:53



Das wäre besser als eine Bearbeitung von Ryans Antwort gewesen. Es ist keine eigene Antwort. - Lightness Races in Orbit
Eigentlich ja ist eine Antwort auf seine Frage - mehr als Ryans Antwort. Die Frage war: "Wie macht es Wireshark?" Ryans Antwort gibt eine Menge Informationen über einen Mechanismus, den WinPcap (was Wireshark verwendet) nicht verwenden, so ist es sicherlich interessant, aber nicht relevant für die ursprüngliche Frage. Der Link, den ich gepostet habe, beschreibt, wie WinPcap tut es, was ist relevant für die ursprüngliche Frage.
Vielleicht, wenn Sie die relevanten Passagen aus der Drittanbieter-Ressource zitiert und erläutert hätten. Wenn nichts anderes, ist eine Nur-Link-Antwort keine Antwort. Das ist SE-Politik. Alle deine Antworten auf diese Seite sind, wörtlich, "es gibt eine Beschreibung, wie Ries 'Antwort irgendwo anders im Internet funktioniert" - Lightness Races in Orbit