Port lwip, compila una pila de protocolos TCPIP en el kernel de Windows

Port lwip, compila una pila de protocolos TCPIP en el kernel de Windows

Estimado, cuando hace clic para leer este artículo, significa que sabe lo que quiero hacer, o en otras palabras, conoce el significado de omitir su protocolo de red en el kernel de Windows y construir una pila de protocolos de red de forma independiente. Si quiere preguntarme si no se utiliza la pila de protocolos de red del sistema Windows, cuál es el significado de portar lwip, puede cerrar el enlace y salir, porque este artículo no es adecuado para usted, no se trata de los principios de portar lwip.

Los amigos que siguen a menudo mi blog pueden recordar que escribí un artículo sobre firewalls hace unos diez años, que mencionó brevemente la viabilidad de construir una pila de protocolos TCP / IP en el kernel de Windows para evitar el firewall. Después de la investigación en ese momento, fue realmente factible. Porté lwip al kernel de Windows y construí una pila de protocolos de red independiente de Windows en la capa NDIS en forma de controlador del kernel. lwip (pila TCP / IP ligera) es un conjunto de pila de protocolos TCP / IP ligera, pero ha evolucionado hasta la actualidad, ya no es "ligera" y se ha construido un conjunto completo de protocolos de red Ethernet alrededor de lwip. En ese momento, era un concepto de demostración basado en la plataforma Windows XP, usando NDIS Hook, y la versión lwip trasplantada era 1.2. Debido a que lwip proporciona una API de socket que es casi un 90% compatible con la interfaz de socket de Barkley, fue casi sin esfuerzo construir un cliente de protocolo http en el kernel en ese momento, para que el controlador pueda usar la dirección URL especificada en el kernel ( Escriba en el registro) descargue un archivo, si es un archivo ejecutable, incluso puede iniciar el archivo ejecutable en el kernel usando el método introducido en stackoverflow. El software de firewall convencional probado en ese momento no percibió estos accesos a la red, y se puede decir que eludieron con éxito el firewall.

Inserte la descripción de la imagen aquí

Después de terminar esto, este prototipo de demostración ha estado podrido en mi disco duro durante más de diez años. Recientemente, descubrí de repente que lwip se ha actualizado a la versión 2.1.2, que admite más protocolos, incluido IPV6. Leí la documentación. Incluso hay una implementación completa del servidor http en la parte contrib. Dios mío, si construyes un servidor http en el kernel que puede eludir todos los firewalls, es difícil de imaginar. Si usa la API de socket proporcionada por lwip para portar 3Proxy al kernel, Dios mío, ni siquiera puedo pensar en eso.

Entonces, ¿puede funcionar? ¿Cómo puedo saber si no lo intento? Aprovechando un tiempo reciente, decidí hacerlo. Sin embargo, todavía hay muchas dificultades para hacerlo. En primer lugar, a partir de Windows Vista, NDIS se ha actualizado a la versión 6.x. El sistema basado en 5.x está desactualizado. Al mismo tiempo, PG de 64 bits no permite la capa Hook NDIS. Todos necesitan ser modificados. Afortunadamente, MS todavía deja un vacío para los desarrolladores de software de firewall, y ese es el filtro NDIS. ¿Se puede realizar esta función utilizando solo el filtro NDIS legal sin gancho? Todavía no tengo fondo en mi corazón. Además, la arquitectura de la versión 2.x de lwip es bastante diferente a la de 1.2, y no tengo idea de cuánto trabajo es este trasplante.

Después de solucionarlo, probablemente se deberían hacer las siguientes cosas:

  • Basado en el código de ejemplo del filtro NDIS en el DDK, elimine el contenido innecesario y construya un marco de filtro NDIS vacío.
  • Port lwip 1.3.2 al kernel. ¿Por qué no elegir la última versión 2.1.2? Porque parece que la carga de trabajo del trasplante es relativamente grande, la diferencia entre la estructura del código de 1.3.2 y 1.2 es relativamente pequeña y ha comenzado a admitir IPV6. Básicamente, tenemos todas las funciones que necesitamos. Para reducir la carga de trabajo y la dificultad del trasplante, elijo 1.3.2 versión. Según la experiencia de 1.2 trasplantes, este trasplante no debería ser difícil. El trabajo principal de esta parte del trasplante es adaptar la interfaz del marco del transceptor lwip al sistema NDIS, y al mismo tiempo manejar el procesamiento del hilo del temporizador. Después de todo, el hilo del kernel tiene más restricciones que el hilo del modo de usuario. Además, cuando hay varias tarjetas de red en el sistema, y ​​cuando una tarjeta de red tiene varias interfaces IP, lwip también necesita hacer algunas adaptaciones.
  • Porte el servidor http en el programa de demostración lwip al kernel e intente abrir un servidor http en el kernel reutilizando el puerto 137. Si esto tiene éxito, debería poder acceder a él a través de un navegador: http://127.0.0.1:137 y ver la página de demostración.
  • Finalmente, el objetivo final es intentar portar 3Proxy al kernel y cooperar con lwip para realizar la función de un servidor proxy. Si esto tiene éxito, puede iniciar un servicio de proxy en el kernel sin saberlo. 3Proxy admite múltiples protocolos de proxy. El trabajo de este paso sigue siendo relativamente difícil. Después de todo, la interfaz de la API de socket de lwip sigue siendo diferente de la interfaz de socket de Barkley real. Considero construir una capa de adaptación, pero si 3Proxy usa demasiadas funciones que lwip no admite, entonces Esta capa de adaptación es más difícil de hacer, lo que puede conducir al fracaso de la migración.

Según los conocimientos que tengo, los tres primeros pasos son relativamente fáciles de hacer. La clave es ver si tengo tiempo. Debes saber que mi pereza sigue siendo muy grave. La última vez fue porque quería probar el firewall, así que me motivé un poco ¿Debería probar también el firewall esta vez? De todos modos, comencemos con el filtro NDIS.

Tengo un lwip

Enfréntate al kernel, admite Proxy

A partir de hoy, me preocupo por NDIS Filter y 3Proxy

Supongo que te gusta

Origin blog.csdn.net/orbit/article/details/89072274
Recomendado
Clasificación