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.
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
Necesito una solución/ejemplo de WFP, desafortunadamente. – ChopperCharles