Me gustaría examinar el tráfico de red manejado por un solo proceso, pero las capturas de red simples no funcionarán ya que estoy lidiando con un sistema tan ocupado (hay mucho tráfico al mismo tiempo). ¿Hay alguna manera de aislar tcpdump
o wireshark
capturar el tráfico de red de un solo proceso específico? (El uso netstat
es insuficiente).
fuente
netstat
y simples filtros de captura de red en una máquina ocupada.netstat
; Solo podré atrapar conexiones duraderas. :(Para iniciar y monitorear un nuevo proceso:
Para monitorear un proceso existente con un PID conocido:
-f
es para "seguir nuevos procesos"-e
define un filtro-s
establece el límite de cadenas a más de 32-p
toma la identificación del proceso para adjuntar afuente
Sé que este hilo es un poco viejo, pero creo que esto podría ayudar a algunos de ustedes:
Si su kernel lo permite, la captura del tráfico de red de un solo proceso se realiza muy fácilmente ejecutando dicho proceso en un espacio de nombre de red aislado y utilizando Wirehark (u otras herramientas de red estándar) en dicho espacio de nombre también.
La configuración puede parecer un poco compleja, pero una vez que la comprenda y se familiarice con ella, facilitará mucho su trabajo.
Para hacerlo:
crear un espacio de nombres de red de prueba:
cree un par de interfaces de red virtuales (veth-a y veth-b):
cambiar el espacio de nombres activo de la interfaz veth-a:
configurar las direcciones IP de las interfaces virtuales:
configurar el enrutamiento en el espacio de nombres de prueba:
active ip_forward y establezca una regla NAT para reenviar el tráfico que ingresa desde el espacio de nombres que creó (debe ajustar la interfaz de red y la dirección IP de SNAT):
(También puede usar la regla MASQUERADE si lo prefiere)
Finalmente, puede ejecutar el proceso que desea analizar en el nuevo espacio de nombres, y Wirehark también:
Tendrás que controlar la interfaz veth-a.
fuente
socat
.--to-source
argumentoiptables
? ¿Es esta la dirección IP de la interfaz que pasa a la-o
opción, una dirección IP que crea, o ??? Probé la versión enmascarada que no necesita--to-source
, como se describe aquí , ¡y funcionó!Eso mostrará las conexiones que está haciendo una aplicación, incluido el puerto que se está utilizando.
fuente
Solo una idea: ¿es posible vincular su aplicación a una dirección IP diferente? Si es así, puede usar los sospechosos habituales ( tcpdump , etc.)
Herramientas para aplicaciones que no pueden vincularse a otra dirección IP:
http://freshmeat.net/projects/fixsrcip
http://freshmeat.net/projects/force_bind
fuente
He encontrado un problema similar y pude resolverlo en base a esta respuesta por ioerror , usando NFLOG como se describe aquí :
Luego puede crear, ejecutar el proceso en cuestión desde una cuenta de usuario que no hace nada más, y listo, acaba de aislar y capturar el tráfico de un solo proceso.
Solo quería publicar de nuevo en caso de que ayude a alguien.
fuente
¡Escribí una aplicación C que hace lo que se describe en la gran respuesta anterior de felahdab!
Ver aquí: nsntrace github repo
fuente
Este es un truco sucio, pero sugeriría un objetivo de desvío o de registro con iptables para un UID dado. p.ej:
También podría valer la pena investigar algo como '--log-tcp-secuencia', '--log-tcp-options', '--log-ip-options', '--log-uid' para ese objetivo de registro . Aunque sospecho que eso solo lo ayudará a publicar un proceso de pcap que incluye una tonelada de otros datos.
El objetivo NFLOG puede ser útil si desea marcar paquetes y luego ciertos paquetes etiquetados se enviarán a través de un socket de enlace de red a un proceso de su elección. Me pregunto si eso sería útil para hackear algo con wireshark y su aplicación específica ejecutándose como un usuario específico.
fuente
Puedes probar tracedump - http://mutrics.iitis.pl/tracedump
Hace exactamente lo que desea, puede darle una ID de proceso o un programa para que se ejecute.
fuente
Intente ejecutar el proceso que le interesa debajo de strace :
Le dará información muy detallada sobre lo que está haciendo su proceso. Como un proceso puede abrir cualquier puerto que desee en cualquier lugar, usando un filtro predefinido puede perder algo.
Otro enfoque sería utilizar una máquina virtual simplificada o una máquina de prueba en su red, y colocar su proceso de forma aislada en esto. Entonces puedes usar Wireshark para atrapar todo desde esa máquina. Estarás bastante seguro de que el tráfico que captures será relevante.
fuente
Sobre la base de la respuesta de ioerror , sospecho que puede usar
iptables --uid-owner
para establecer un marcador en el tráfico, y luego puede pedirle a Wirehark que capture solo el tráfico con ese marcador. Es posible que pueda usar un DSCP (marcador de servicios diferenciales), id de flujo o un marcador de calidad de servicio.O, de hecho, podría usar esto para enviar esos paquetes a una interfaz diferente y luego capturar solo en esa interfaz.
fuente
El error de Wirehark # 1184 es esta característica. Aún no está implementado.
Copiado del usuario cmanynard en ask.wireshark.org
fuente
tal vez iptables y ulog pueden funcionar? No es que tenga una receta exacta, pero creo que iptables puede coincidir con los procesos, una vez que coincida podría usar ulog.
fuente
iptables -m owner --pid-owner $PID
se eliminó en Linux 2.6.14: ftp.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.14Creo que puede crear un script de shell para recorrer la ejecución de netstat y registrarlo en un archivo de texto. Algo así (pasos muy difíciles):
No soy programador, así que no puedo refinar esto. Pero alguien aquí puede comenzar desde donde lo dejé y crear un script de trabajo para usted.
fuente