java - paquetes - qué paquete se importa de manera implícita
Enrutando todos los paquetes a través de mi programa? (4)
Quiero crear una aplicación que enrute todo el tráfico de red (no solo HTTP) a través de mi aplicación. Básicamente, lo que quiero es que se proporcione todo el tráfico a mi aplicación (nunca deberían alcanzar el objetivo real, mi aplicación debería manejar esto), que a su vez se reenviará a un servidor; Lo mismo ocurre con la entrada, solo revertida (servidor -> aplicación -> programa que quiere una respuesta). ¿Hay bibliotecas (o cosas similares) que faciliten la creación de la aplicación? Estoy buscando algo que pueda usar de Python o Java, pero si realmente lo necesito, puedo aprender otro idioma.
Echa un vistazo a Jpcap .
Lo que quiere usar es una biblioteca de captura de paquetes, puede usar e pcap o su implementación o enlaces en python o java.
Sin embargo, este tipo de cosas se implementan usualmente en el nivel bajo idealmente con C, aquí hay un tutorial.
EDITAR: a la luz de sus comentarios definitivamente quiere echar un vistazo a los ganchos netfilter
Mientras lo hace, también puede echarle un vistazo a los ganchos netfilter.
Si está haciendo esto en Linux, debería considerar usar un dispositivo TUN / TAP, que es una herramienta muy útil para interceptar el tráfico de la red para el procesamiento personalizado. Aquí hay un tutorial básico si no está familiarizado http://backreference.org/2010/03/26/tuntap-interface-tutorial/
Si solo quieres enrutar, el tráfico de tcp es realmente simple usando hilos y conectores . Deberías escuchar en un puerto diferente para cada servidor al que quieras llegar. Ya sea en Java o en Python, debe crear un "socket" para cada puerto que desee escuchar.
Por cada nueva conexión, usted crea una nueva conexión con el servidor y crea dos nuevos hilos para manejar esa conexión, un hilo leerá todo del cliente y lo enviará al servidor. El otro leerá todo desde el servidor y lo enviará al cliente. Cuando un extremo de la conexión lo cierra, cierra el otro y termina ambos hilos.