Volcar el tráfico de red de una sola aplicación (tipo strace)

11

Estoy buscando una forma de volcar pcap de datos de red generados por una aplicación, de manera stracesimilar, volca las llamadas al sistema, etc., por ejemplo:

net-strace somecommand -args

somecommandharía algo a través de la red y net-straceahorraría un volcado de pcap de todo el tráfico generado por esa aplicación (+ respuestas y tráfico relacionado).

¿Se puede lograr esto?

gesti
fuente
El problema es que las aplicaciones no envían paquetes (excepto aquellos que usan sockets sin procesar como ping) sino que usan una API de red que hace que el núcleo envíe paquetes (y reciba uno relacionado) en su nombre.
Stéphane Chazelas
Sí, pero hay aplicaciones (por ejemplo, proxychains - proxychains.sourceforge.net ) que ejecutan todos los datos de la aplicación a través de un proxy. No sé cómo lo hacen, pero pueden capturarlo y enviarlo a través de un proxy. Quizás si hay un proxy simple (ejecutado localmente), que puede volcar pcap, se puede usar proxychains + proxy combo para obtener el volcado.
gesti
Es más probable que secuestren la API (con LD_PRELOAD) que los paquetes. Dicho esto, uno podría inyectar algunos setsockopt (SO_MARK) en las aplicaciones y usar netfilter para registrar los paquetes en ulog.
Stéphane Chazelas
3
Crear un nuevo espacio de nombres de red para la aplicación y capturar todo el tráfico allí también puede ser un enfoque aceptable para algunos casos de uso.
Stéphane Chazelas

Respuestas:

3

¿Qué tal usar strace en sí?

strace -f -e trace=network -o output_file -s 10000 somecommand -args
Cristiano largo
fuente
La línea de comando que proporcionó parece mostrar solo las solicitudes de DNS. La -eopción de strace con frecuencia no selecciona lo que realmente quieres.
Robin Green
2

Puede volcar el tráfico generado por la aplicación por diferentes métodos:

Si conoce los puertos que usa la aplicación, puede ejecutar tcpdump o wireshark con reglas de filtrado específicas para estos puertos.

Si esa no es una opción, puede marcar los paquetes de aplicación utilizando una regla de iptables , que coincida con el propietario del proceso. Es posible que deba crear una nueva cuenta de usuario para aislar completamente el proceso. Luego puede capturar el tráfico que solo coincide con la regla.

Puede encontrar información más completa sobre este tema relacionado: /ubuntu/11709/how-can-i-capture-network-traffic-of-a-single-process

También puede encontrar interesante este programa tracedump como se indicó en el tema anterior. http://mutrics.iitis.pl/tracedump

almlys
fuente