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

20

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?

Hansi
quelle
Ihre Prämisse ist falsch. Die Netzwerkkarte übergibt das Paket immer an Windows (insbesondere an den Gerätetreiber und dann an den Netzwerkstapel), und es liegt an Windows, zu entscheiden, was damit geschehen soll. Windows hat eine Funktion, bei der ein Programm nach Kopien von Paketen fragen kann, "wie sie sich auf dem Kabel befanden", wobei möglicherweise ein Filter angewendet wird, und Wireshark verwendet diese Funktion. Wireshark funktioniert nicht Bypass Sie Windows.
zwol
(Es gibt experimentelle Betriebssysteme, die versuchen, extrem schnelle Netzwerke zu schaffen, indem Pakete direkt von der Netzwerkkarte an die Anwendung übermittelt werden. AFAIK Windows kann dies jedoch nicht: Sie müssen immer mindestens die NDIS-Schicht durchlaufen.)
zwol

Antworten:

38

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.

Netzwerkstapel

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:

Windows-Filterplattform

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

Ryan Ries
quelle
3
Hervorragende Diagramme. Sind diese irgendwo auf microsoft.com veröffentlicht? In diesem Fall würde ich gerne nachsehen, welche anderen Informationen neben diesen zur Verfügung stehen.
EEAA
1
Perfekte Antwort. Gut und einfach erklärt, tolle Visualisierung und Quellen zur Verfügung gestellt! Ich danke dir sehr!
Hansi
1
+1, erwähnenswert, dass es einen Open-Source-Treiber gibt, der auf WFP aufgebaut ist und es trivial macht, solche Anwendungen mit dem Namen WinDivert zu schreiben . Ich habe auch einen .NET-Wrapper dafür geschrieben.
1
Früher gab es einen so genannten "Layered Service Provider", bei dem Sie Pakete abfangen und neu schreiben konnten. Gibt es einen Ersatz für diese Fähigkeit? Ist es Teil der "Filter" -API? (Oh, warte, egal: Ich habe mir gerade den WinDivert-Link von @TechnikEmpire angesehen und festgestellt, dass dies möglich ist.)
davidbak
1
@davidbak ja, WinDivert ist eine Art Hybrid. Die Callout-Treiber-APIs sind für Entwickler gedacht, die bestimmte Treiber erstellen, die nicht nur ein Paket löschen können (kein Treiber erforderlich). WinDivert ist ein solcher Treiber, aber er ist generisch und bietet vollständigen Zugriff auf Pakete, indem Pakete in den Kernel und in den Benutzermodus verschoben und aus diesem entfernt werden.
3

Wie die Antwort von Ryan Ries sagt:

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.

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


quelle
Dies wäre besser gewesen, um Ryans Antwort zu bearbeiten. Es ist keine eigenständige Antwort.
Leichtigkeit Rennen mit Monica
2
Eigentlich ja, es ist eine Antwort auf seine Frage - mehr als Ryans Antwort. Die Frage war: "Wie macht Wireshark das?" Ryans Antwort enthält viele Informationen über einen Mechanismus, den WinPcap (das ist, was Wireshark verwendet) nicht verwendet. Es ist also sicherlich interessant, aber für die ursprüngliche Frage nicht relevant. Der Link, den ich gepostet habe, beschreibt, wie WinPcap es macht, was für die ursprüngliche Frage relevant ist .
7
Vielleicht, wenn Sie die relevanten Passagen aus der Ressource eines Drittanbieters zitiert und erklärt hätten. Wenn nichts anderes, ist eine Nur-Link-Antwort keine Antwort. Das ist SE-Politik. Alle Ihre Antwort fügt diese Seite ist, wörtlich, „gibt es eine Beschreibung, wie Ries Antwort irgendwo anders im Internet funktioniert“
Leichtigkeit Rennen mit Monica