2009-03-29 6 views
10

Je voudrais écrire un sniffer de paquets et un éditeur pour Windows. Je veux pouvoir voir le contenu de tous les paquets entrant et sortant de mon système et éventuellement les modifier. Toutes les langues sont correctes, mais j'aimerais qu'elles soient assez rapides pour ne pas surcharger le système. J'ai lu un peu à propos de WinPcap mais la documentation prétend que vous ne pouvez pas utiliser WinPcap pour créer un pare-feu car il ne peut pas supprimer les paquets. Quels outils m'aideront à écrire ce logiciel?Comment connecter la pile TCP dans Windows pour renifler et modifier des paquets?

Répondre

1

Je suis sûr que vous auriez besoin d'écrire un pilote de filtre. http://en.wikipedia.org/wiki/Filter_driver Je ne sais pas beaucoup plus que ça :). Ce serait certainement une application C/C++ Win32 et vous feriez probablement du travail côté noyau. Commencez par télécharger le DDK et trouver quelques exemples de pilotes de filtre.

Si vous souhaitez simplement surveiller ce qui entre et sort d'IIS, envisagez un filtre ISAPI. Toujours C/C++ dans Win32, mais relativement plus facile que d'écrire un pilote de périphérique.

1

code C# pour le faire est il y a here

+0

Depuis sa prise première à base de , il ne sera pas en mesure de renifler les paquets TCP entrants sur Windows 7. (Microsoft a paralysé les sockets bruts sur les versions non-serveur de Windows) – CodesInChaos

+0

J'ai besoin d'une solution/exemple de WFP, malheureusement. – ChopperCharles

0

En fait, je l'ai fait, plusieurs années. Je suis brouillé sur les détails à ce stade, mais j'ai dû développer un pilote filtre/pass-thru/intermédiaire en utilisant le Windows DDK. J'ai eu beaucoup de bonnes informations de pcausa. Voici une URL qui pointe vers leur produit qui fait ceci: http://www.pcausa.com/pcasim/Default.htm

0

Si vous faites cela pour des raisons pratiques, et pas seulement pour le plaisir, alors vous devriez jeter un oeil à Microsoft Network Monitor. La page d'accueil parle de la version bêta de la version 3.3, mais vous pouvez télécharger la version 3.2 depuis la page des téléchargements. Il existe également un SDK pour NM, et la possibilité d'écrire des analyseurs pour vos propres protocoles réseau.

8

Été là, fait cela :-) En 2000, mon premier programme Windows a été un filter hook driver. Ce que j'ai fait était implémenter le pilote de crochet de filtre et écrire une application d'espace utilisateur qui a préparé une table de filtre sur quoi autoriser et quoi interdire. Lorsque vous contournez votre jeu initial d'écrans bleus (voir ci-dessous pour mon astuce de débogage en mode noyau) le pilote en mode filtre est assez facile à utiliser ... il donne à chaque paquet une fonction que vous avez écrite et en fonction du code retour ou laisse passer. Les paquets Unfortunatley à ce niveau sont QUITE brut, les fragments ne sont pas réassemblés et ressemble plus à la fin de la "carte réseau" (mais plus d'en-têtes Ethernet). Vous aurez donc du mal à décoder les paquets à filtrer avec cette solution.

Il y a également le pilote de crochet de pare-feu, comme indiqué dans ce codeproject article. Si vous êtes sur Vista ou Server 2008, préférez le WFP (Windows Filtering Platform), qui semble être l'API mandatée pour écrire des pare-feux. Je ne sais rien d'autre que google turing il ya quelques minutes quand je googlé pour le pilote de crochet de filtre.

Mise à jour: Vous avez oublié la pointe de débogage:

Sysinternals DbgView affiche une sortie DbgPrint en mode noyau, et le plus important - il peut aussi les lire à partir du fichier de vidage de votre dernier écran bleu produit. Alors saupoudrez votre code avec dbgprint et s'il bluescreens chargez simplement le vidage dans dbgview pour voir ce qui s'est passé avant sa mort ... TRÈS utile. En utilisant ceci j'ai réussi sans avoir de débogueur de noyau.

+0

Les pilotes de crochet de filtre ne sont pas un bon choix, car vous ne pouvez en installer qu'un seul à la fois. Si vous essayez d'installer sur un système qui a déjà quelqu'un d'autre, vous êtes bourré. –

+0

D'accord. Je pense que le pilote de hook de pare-feu est la voie à suivre, même si elle est obsolète dans WinXP et au-delà pour courir trop haut dans la pile réseau. NDIS est recommandé pour WinXP. NDIS semble être plus de travail, cependant. – Eyal

0

Vous devez poser une question que vous ne savez pas vous poser; Voulez-vous savoir à quelles applications appartiennent les sockets? ou êtes-vous heureux d'être limité à l'adresse IP: port quad pour une connexion? Si vous voulez connaître les applications, vous devez écrire un pilote de filtre TDI, mais cela rend pratiquement impossible la gestion de la réception, car vous ne pouvez pas bloquer sur le chemin de réception.

Si vous êtes satisfait de IP: port, allez au niveau NDIS, et je crois que vous pouvez bloquer sur le contenu de recevoir votre cœur.

Un mot d'avertissement; Si vous n'avez aucune expérience préalable du noyau, écrire l'un ou l'autre de ces pilotes (bien que le TDI soit beaucoup plus difficile) prendra environ deux ans, à temps plein.

0

ceci:

TdiFw est un simple TDI-Based Open Source Personal Firewall pour Windows NT4/2000/XP/2003

http://tdifw.sourceforge.net/

peut vous aider à

+0

Si c'est ce que je pense, c'est nul! le code source n'est PAS bien écrit ou compréhensible. Je l'ai regardé quand j'écrivais mon propre filtre TDI et ça ne m'a pas aidé du tout. –

Questions connexes