2009-03-29 10 views
10

Me gustaría escribir un sniffer de paquetes y editor para Windows. Quiero poder ver el contenido de todos los paquetes que entran y salen de mi sistema y posiblemente modificarlos. Cualquier idioma está bien, pero me gustaría que funcione lo suficientemente rápido para que no afecte al sistema.¿Cómo conecto la pila TCP en Windows para olfatear y modificar paquetes?

He leído un poco sobre WinPcap pero la documentación afirma que no se puede usar WinPcap para crear un firewall porque no puede eliminar paquetes. ¿Qué herramientas me ayudarán a escribir este software?

Respuesta

1

Estoy bastante seguro de que necesitaría escribir un controlador de filtro. http://en.wikipedia.org/wiki/Filter_driver No sé mucho más que eso :). Definitivamente sería una aplicación Win32 de C/C++ y probablemente estarías haciendo algún trabajo secundario. Comience por descargar el DDK y encuentre algunos de los controladores de filtro de muestra.

Si solo desea controlar lo que entra y sale de IIS, considere un filtro ISAPI. Aún C/C++ en Win32, pero relativamente más fácil que escribir un controlador de dispositivo.

1

C# código para hacer esto es here

+0

ya que está basado conector directo , no podrá olfatear los paquetes TCP entrantes en Windows 7. (Microsoft paró los sockets sin procesar en las versiones de Windows que no son de servidor) – CodesInChaos

+0

Necesito una solución/ejemplo de WFP, desafortunadamente. – ChopperCharles

0

realidad lo hice, hace varios años. En este punto estoy un poco confuso con los detalles, pero tuve que desarrollar un controlador de filtrado/paso intermedio/intermedio usando el DDK de Windows. Recibí mucha información buena de pcausa. Aquí hay una url que apunta a su producto que hace esto: http://www.pcausa.com/pcasim/Default.htm

0

Si haces esto por razones prácticas, y no solo por diversión, entonces deberías echar un vistazo al Microsoft Network Monitor. La página de inicio habla sobre la versión 3.3 beta, pero puede descargar la versión 3.2 desde la página de Descargas. También hay un SDK para NM y la capacidad de escribir analizadores para sus propios protocolos de red.

8

He estado allí, hecho eso :-) En el 2000 mi primer programa de Windows fue filter hook driver.

Lo que hice fue implementar el controlador de enlace de filtro y escribir una aplicación de espacio de usuario que preparó una tabla de filtro sobre qué permitir y qué no permitir. Cuando maneja su conjunto inicial de pantallas azules (vea a continuación mi sugerencia de depuración en modo kernel), el controlador de modo de filtro es bastante fácil de usar ... le da a cada paquete una función que usted escribió y dependiendo del código de retorno lo descarta o lo deja pasar

Por desgracia, los paquetes en ese nivel son MUY raw, los fragmentos no se vuelven a ensamblar y se parece más al final de la "tarjeta de red" (pero ya no hay más encabezados de ethernet). Por lo tanto, pasará un mal momento decodificando los paquetes para filtrar con esa solución.

También está el controlador de enlace de firewall, como se explica en este codeproject article.

Si está en Vista o Server 2008, será mejor que eche un vistazo a WFP (Windows Filtering Platform), que parece ser la API obligatoria del día para escribir firewalls. No sé nada más que googlerlo hace unos minutos cuando busqué en Google el controlador de enlace de filtro.

Actualización: He olvidado la punta de depuración:

Sysinternals DBGVIEW muestra en modo kernel de salida DbgPrint, y más importante - que también puede leerlos desde el vertedero de presentar su última pantalla azul producida. Así que espolvorea tu código con dbgprint y si tiene pantallas azules solo carga el volcado en dbgview para ver qué sucedió antes de que muriera ... MUY útil. Usando esto lo logré sin tener un depurador de kernel.

+0

Los controladores de ganchos de filtro no son una buena opción, ya que solo puede tener uno de ellos instalado en cualquier momento. Si intentas instalarlo en un sistema que ya tiene otro gancho, estarás lleno. –

+0

de acuerdo. Creo que el controlador de enlace de firewall es el camino a seguir, aunque está en desuso en WinXP y más allá por correr demasiado alto en la pila de red. NDIS se recomienda para WinXP. NDIS parece más trabajo, sin embargo. – Eyal

0

Hay una pregunta que debe hacer y que no sabe que debe preguntar; ¿quieres saber a qué aplicaciones pertenecen los sockets? o ¿está contento de estar restringido al IP: puerto cuádruple para una conexión?

Si desea conocer las aplicaciones, debe escribir un controlador de filtro TDI, pero eso hace que el manejo de la recepción sea casi imposible, ya que no puede bloquear la ruta de recepción.

Si está contento con IP: puerto, entre en el nivel NDIS, y creo que puede bloquear en recibir a su gusto.

Una palabra de advertencia; Si no tiene experiencia previa en kernel, escribir cualquiera de estos controladores (aunque TDI es significativamente más difícil) llevará aproximadamente dos años, a tiempo completo.

0

esto:

TdiFw es un simple TDI basado en Open Source Personal Firewall para Windows NT4/2000/XP/2003

http://tdifw.sourceforge.net/

puede ayudarle a

+0

Si eso es lo que creo que es, ¡es una mierda! el código fuente NO está bien escrito o es comprensible. Lo miré cuando estaba escribiendo mi propio filtro TDI y no me ayudó en absoluto. –

Cuestiones relacionadas