2009-03-29 11 views
10

Ich möchte einen Packet Sniffer und Editor für Windows schreiben. Ich möchte in der Lage sein, den Inhalt aller Pakete, die in mein System eintreten und es verlassen, zu sehen und sie möglicherweise zu modifizieren. Jede Sprache ist in Ordnung, aber ich möchte, dass sie schnell genug läuft, damit das System nicht belastet wird.Wie hake ich den TCP-Stack in Windows, um Pakete zu schnüffeln und zu modifizieren?

Ich habe ein wenig über WinPcap gelesen, aber die Dokumentation behauptet, dass Sie WinPcap nicht verwenden können, um eine Firewall zu erstellen, da es Pakete nicht löschen kann. Welche Werkzeuge werden mir helfen, diese Software zu schreiben?

Antwort

1

Ich bin mir ziemlich sicher, dass Sie einen Filtertreiber schreiben müssten. http://en.wikipedia.org/wiki/Filter_driver Ich weiß nicht viel mehr als das :). Es wäre definitiv eine C/C++ Win32-App und Sie würden wahrscheinlich einige Kernel-Seite arbeiten. Starten Sie, indem Sie das DDK herunterladen und einige der Beispielfiltertreiber finden.

Wenn Sie nur überwachen möchten, was in IIS hinein- und herausgeht, sollten Sie einen ISAPI-Filter in Erwägung ziehen. Immer noch C/C++ in Win32, aber relativ einfacher als das Schreiben eines Gerätetreibers.

1

C# -Code, dies zu tun ist here

+0

helfen Da es Raw Sockets es wird nicht möglich sein, eingehende TCP-Pakete unter Windows 7 zu schnüffeln. (Microsoft verkrüppelte rohe Sockets auf Nicht-Server-Versionen von Windows) – CodesInChaos

+0

Ich brauche leider eine WFP-Lösung/Beispiel. – ChopperCharles

0

ich dies tatsächlich getan hat, vor einigen Jahren. Ich bin zu diesem Zeitpunkt noch unklar in den Details, aber ich musste einen Filter/Pass-Thru/Intermediate-Treiber mit dem Windows DDK entwickeln. Ich habe viele gute Informationen von pcausa bekommen. Hier ist eine URL, die auf ihr Produkt zeigt: http://www.pcausa.com/pcasim/Default.htm

0

Wenn Sie dies aus praktischen Gründen tun, und nicht nur zum Spaß, dann sollten Sie einen Blick auf Microsoft Network Monitor werfen. Auf der Homepage wird über die Version 3.3 Beta gesprochen, aber Sie können Version 3.2 von der Download-Seite herunterladen. Es gibt auch ein SDK für NM und die Möglichkeit, Parser für Ihre eigenen Netzwerkprotokolle zu schreiben.

8

Schon mal da gewesen, fertig :-) Zurück im Jahr 2000 war mein erstes Windows-Programm überhaupt ein filter hook driver.

Was ich getan habe, war die Implementierung des Filter-Hook-Treibers und das Schreiben einer Userspace-Anwendung, die eine Filtertabelle darauf vorbereitet, was erlaubt und was nicht erlaubt ist. Wenn Sie die ersten blauen Bildschirme sehen (siehe unten für meinen Debug-Tipp im Kernel-Modus), ist der Filter-Modus-Treiber recht einfach zu benutzen ... er gibt jedes Paket an eine Funktion, die Sie geschrieben haben, und hängt vom Rückgabecode ab oder lässt es passieren.

Leider Pakete auf dieser Ebene sind QUITE roh, Fragmente werden nicht wieder zusammengesetzt und es sieht eher aus wie die "Netzwerkkarte" Ende der Dinge (aber keine Ethernet-Header mehr). Sie werden also eine ziemlich schlechte Zeit haben, die Pakete zu dekodieren, die mit dieser Lösung gefiltert werden sollen.

Es gibt auch den Firewall-Hook-Treiber, wie in dieser codeproject article diskutiert.

Wenn Sie auf Vista oder Server 2008 sind, sollten Sie sich stattdessen WFP (Windows Filtering Platform) ansehen, das scheint die vorgeschriebene API des Tages für das Schreiben von Firewalls zu sein. Ich weiß es nicht anders als google turing es vor ein paar Minuten, als ich für den Filter Haken Treiber gegoogelt.

Update: Passwort des Debug-Tipp:

Sysinternals DbgView zeigt Kernelmodus DbgPrint Ausgang und wichtiger - auch sie von der Dump-Datei Ihres letzten blauen Bildschirm erzeugte lesen kann. Also streue deinen Code mit dbgprint und wenn es Bluescreens sind, lade einfach den Dump in dbgview, um zu sehen, was passiert ist, bevor es gestorben ist ... SEHR nützlich. Damit habe ich es geschafft, ohne einen Kernel-Debugger zu haben.

+0

Filter-Hook-Treiber sind keine gute Wahl, da Sie immer nur einen von ihnen installieren können. Wenn du versuchst, auf einem System zu installieren, auf dem schon jemand einen Haken hat, bist du vollgestopft. –

+0

Einverstanden. Ich denke, dass der Firewall-Hook-Treiber der Weg zu gehen ist, obwohl er in WinXP und darüber hinaus veraltet ist, weil er im Netzwerk-Stack zu hoch läuft. NDIS wird für WinXP empfohlen. NDIS scheint jedoch mehr Arbeit zu sein. – Eyal

0

Es gibt eine Frage, die Sie stellen müssen, von der Sie nicht wissen, dass Sie fragen müssen; Möchten Sie wissen, zu welchen Anwendungen Sockets gehören? Oder sind Sie glücklich, auf den IP: Port Quad für eine Verbindung beschränkt zu sein?

Wenn Sie Anwendungen kennen wollen, müssen Sie einen TDI-Filtertreiber schreiben, aber das macht die Handhabung des Empfangs fast unmöglich, da Sie den Empfangspfad nicht blockieren können.

Wenn Sie mit IP: Port zufrieden sind, gehen Sie auf der NDIS-Ebene, und ich glaube, dass Sie nach Herzenslust Inhalt blockieren können.

Ein Wort der Warnung; Wenn Sie keine vorherige Kernel-Erfahrung haben, wird das Schreiben dieser beiden Treiber (obwohl TDI wesentlich schwieriger ist) etwa zwei Jahre in Vollzeit dauern.

0

dies:

TdiFw ist ein einfaches TDI-basierte Open Source Personal Firewall für Windows NT4/2000/XP/2003

http://tdifw.sourceforge.net/

Sie können

+0

Wenn das ist, was ich denke, es ist scheiße! Der Quellcode ist NICHT gut geschrieben oder verständlich. Ich habe es mir angesehen, als ich meinen eigenen TDI-Filter geschrieben habe, und es hat mir überhaupt nicht geholfen. –