Necesito hacer una pequeña modificación al tráfico entrante desde un host tcp conocido: puerto antes de que el proceso que maneja la conexión obtenga la transmisión.
Por ejemplo, deje que 192.168.1.88 sea un host remoto que ejecuta un servidor web.
Necesito que, cuando un proceso en mi host local reciba datos de 192.168.1.88:80 (por ejemplo, el navegador), los datos se cambien primero y se reemplacen text-A
por text-B
, de esta manera:
- 127.0.0.1: ... se conecta a 192.168.1.88:80
127.0.0.1: ... envía a 192.168.1.88:80:
GET /
192.168.1.88:80 envía a 127.0.0.1: ...:
HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text
El sistema intercepta esos datos y los pasa a un programa cuya salida es:
HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text
el sistema proporciona los datos cambiados al proceso que maneja 127.0.0.1: ..., como si viniera de 192.168.1.88:80.
Suponiendo que tengo una forma basada en transmisión para hacer estos cambios (usando, sed
por ejemplo), ¿cuál es la forma más fácil de preprocesar la transmisión de TCP entrante?
Supongo que esto implicaría iptables
, pero no soy muy bueno en eso.
Tenga en cuenta que la aplicación debería tratar con el host original, por lo que configurar un proxy probablemente no sea una solución.
fuente
Respuestas:
Use proxy de redes e iptables.
Entonces corre:
NetSED es una utilidad pequeña y práctica diseñada para alterar, en tiempo real, el contenido de los paquetes enviados a través de su red. Es realmente útil para la alteración, falsificación o manipulación de paquetes de red. NetSED admite:
Auditoría de protocolo de recuadro negro: siempre que haya dos o más recuadros propietarios que se comuniquen utilizando algún protocolo no documentado. Al hacer cumplir los cambios en las transmisiones en curso, podrá probar si la solicitud examinada se puede reclamar como segura.
experimentos de generación de fuzz, pruebas de integridad: siempre que realice pruebas de estabilidad de una aplicación para ver cómo se preocupa por la integridad de los datos;
otros casos de uso comunes: transferencias engañosas, filtrado de contenido, conversión de protocolos, lo que mejor se adapte a su tarea actual.
fuente
netsed
, encaja casi perfectamente para mi propósito. Lo único que no entiendo es cómo configurar el "proxy transparente local" (vea la pregunta). Tal vez debería configurar otra interfaz de red (virtual) para obtener eso. Por cierto, por ahora esta es la respuesta más satisfactoria.OUTPUT
, noPREROUTING
. Además, la-D
opción tenía que ser-A
para mí. Además, para la-j
opción, tuve que usarDNAT --to-destination (ip)
oREDIRECT --to-port
. Finalmente, NO pude corregir el error de segmentación de netsed. ver también: ubuntuforums.org/showthread.php?t=2337389Puede hacer exactamente esto usando iptables para proxy de forma transparente las conexiones a través de un proxy de calamar , y luego haciendo que calamar vuelva a escribir el contenido http para usted.
fuente
iptables
+ el uso de libnetfilter_qu es otra opción que hará lo que desee:"... [reinyectar] paquetes alterados en el subsistema kernel nfnetlink_queue".
Es probable que le brinde la mayor extensibilidad, ya que depende de usted codificar el software.
También hay un contenedor de python disponible.
fuente