Filtrar por proceso / PID en Wireshark

117

¿Hay alguna forma de filtrar / seguir una secuencia TCP / SSL basada en un ID de proceso en particular usando Wireshark ?

Ryan Fernandes
fuente
7
En el momento de escribir estas líneas, Wireshark todavía no admite esta función; sin embargo, puede seguir su progreso (si lo hay) en [error 1184] [1]. [1]: bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184
Christopher Maynard

Respuestas:

58

No veo como. El PID no llega al cable (en términos generales), además, Wireshark le permite ver lo que hay en el cable, potencialmente todas las máquinas que se comunican a través del cable. De todos modos, los ID de proceso no son únicos en diferentes máquinas.

Vinay Sajip
fuente
7
buen punto ... eso es lo que pensé también ... déjame esperar un día antes de cerrar esto, solo en caso de que haya un ninja de wirehark que se las arregle para hacer esto ..
Ryan Fernandes
30
Wireshark sabe qué puerto se está utilizando y el sistema operativo conoce el PID del proceso que está utilizando el puerto. Con los cambios de código, Wireshark debería poder asignar el puerto a PID. Hay algunos casos en los que esto fallaría, como cuando el sistema operativo reasigna un puerto a una aplicación diferente justo antes de que Wireshark solicite el PID al sistema operativo para un puerto. Así que esto no será infalible ni a prueba de fallos, pero si el usuario conoce estas limitaciones, seguirá siendo una característica útil.
Dojo
Digo simplemente agregue un módulo a wirehark que escucha si el puerto se abre / cierra y asigna el PID al puerto. Sincronice eso con el proceso principal y obtendrá un mapeador de puerto a proceso perfecto. Sin embargo, al leer el error del comentario de la pregunta, el módulo no es tan fácil de crear.
Vesper
Recuerdo que la primera vez que descargué Wireshark, mostraba el árbol de procesos y se podía seleccionar un proceso para monitorear. No sé cuándo desapareció esta opción, pero estaba ahí.
Tomáš Zato - Reincorpora a Monica
90

En caso de que esté buscando una forma alternativa y el entorno que usa sea Windows, Network Monitor 3.3 de Microsoft es una buena opción. Tiene la columna del nombre del proceso. Puede agregarlo fácilmente a un filtro usando el menú contextual y aplicar el filtro. Como de costumbre, la GUI es muy intuitiva ...

Sreejith Menon
fuente
10
Microsoft Network Monitor 3.4 está en microsoft.com/en-us/download/details.aspx?id=4865
GT
39
También está Microsoft Message Analyzer, que es básicamente la versión de Microsoft de Wireshark (y el sucesor de Network Monitor, según tengo entendido), pero un poco mejor integrado. En el selector de columnas, bajo 'Etw' -> 'EtwProviderMsg' hay una columna para 'PID'. ¡Funciona bien!
Cameron
3
La ruta exacta es EtwProviderMsg -> EventRecord -> Header -> ProcessId
r590
¡Acabo de probarlo y Microsoft Message Analyzer es un software tan aburrido! Casi arrastro mi sistema. Una interfaz de usuario muy contradictoria también. ¿Alguien encontró una manera de borrar la lista con los datos recopilados? Me di por vencido y desinstalé ese pedazo de basura. (PD. Lástima que los desarrolladores de Wireshark no hayan agregado una función para conectar el nombre del proceso / PID a un puerto en el filtro. Es muy fácil de hacer. Esto puede ser fundamental para ver lo que sucede en el proceso durante su inicio. Como una solución que podría tener una idea general usando ProcMon de SysInternals.)
c00000fd
1
¡Recientemente descubrí Microsoft Message Analyzer y es una herramienta muy útil! ¿Cómo es posible que nunca haya oído hablar de él? Tan subestimado. Tiene excelentes capacidades de filtrado debido a una integración mucho mejor con Windows que Wireshark. Lo cambié en todos los hosts de mi empresa dentro de ~ 3 meses después de trabajar a diario. ¡Un gran agradecimiento a @Cameron por su comentario debajo de esa respuesta! :-)
Skipper
16

Puede hacer coincidir los números de puerto desde Wireshark hasta los números de puerto de, digamos, netstat , que le indicará el PID de un proceso que escucha en ese puerto.

tw39124
fuente
12
bueno, esto podría no funcionar ... el programa abre y cierra muchos puertos locales y remotos
Ryan Fernandes
11

Utilice Microsoft Message Analyzer v1.4

Navegue a ProcessId desde el selector de campo.

Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId

Haga clic derecho y Agregar como columna

Enki
fuente
1
Gracias por indicarme la dirección de esto, es exactamente lo que necesitaba. FWIW, el grupo de nivel superior "ProcMon" parece contener el mismo ProcessId, así como otra información como el nombre del proceso, ParentId, etc.
Tobias J
3

En Windows hay una compilación experimental que hace esto, como se describe en la lista de correo, Filtrar por nombre de proceso local

patraulea
fuente
Eso hace, dentro de Wireshark, el "Puede hacer coincidir los números de puerto desde Wireshark hasta los números de puerto de, digamos, netstat que le dirá el PID de un proceso que escucha en ese puerto". cosas del comentario de Tom Woolfrey, por lo que está (como señala el mensaje) sujeto a las limitaciones de ese mecanismo.
3

Esto es algo importante que se puede hacer para monitorear dónde ciertos procesos intentan conectarse, y parece que no hay ninguna forma conveniente de hacerlo en Linux. Sin embargo, son posibles varias soluciones, por lo que creo que vale la pena mencionarlas.

Hay un programa llamado nonet que permite ejecutar un programa sin acceso a Internet (tengo la mayoría de los lanzadores de programas en mi sistema configurados con él). Utiliza setguid para ejecutar un proceso en el grupo nonet y establece una regla de iptables para rechazar todas las conexiones de este grupo.

Actualización: ahora uso un sistema aún más simple, puedes tener fácilmente una configuración de iptables legible con ferm, y simplemente usar el programa sgpara ejecutar un programa con un grupo específico. Iptables también le permite redirigir el tráfico para que incluso pueda enrutarlo a una interfaz separada o un proxy local en un puerto que le permite filtrar en Wireshark o REGISTRAR los paquetes directamente desde iptables si no desea deshabilitar todo Internet mientras están comprobando el tráfico.

No es muy complicado adaptarlo para ejecutar un programa en un grupo y cortar el resto del tráfico con iptables durante la vida útil de la ejecución y luego podría capturar el tráfico de este proceso únicamente.

Si alguna vez llego a escribirlo, publicaré un enlace aquí.

En otra nota, siempre puede ejecutar un proceso en una máquina virtual y olfatear la interfaz correcta para aislar las conexiones que hace, pero esa sería una solución bastante inferior ...


fuente
3

Si desea seguir una aplicación que aún debe iniciarse, sin duda es posible:

  1. Instale Docker (consulte https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. Abra una terminal y ejecute un contenedor pequeño: docker run -t -i ubuntu /bin/bash(cambie "ubuntu" a su distribución favorita, esto no tiene que ser el mismo que en su sistema real)
  3. Instale su aplicación en el contenedor de la misma manera que lo instalaría en un sistema real.
  4. Inicie wirehark en su sistema real, vaya a capturar> opciones. En la ventana que se abrirá, verá todas sus interfaces. En lugar de elegir any, wlan0, eth0, ... elegir la nueva interfaz virtual docker0en su lugar.
  5. Empieza a capturar
  6. Inicie su aplicación en el contenedor

Es posible que tenga algunas dudas sobre la ejecución de su software en un contenedor, por lo que aquí están las respuestas a las preguntas que probablemente quiera hacer:

  • ¿Funcionará mi aplicación dentro de un contenedor?Es casi seguro que sí, pero es posible que deba aprender un poco sobre Docker para que funcione.
  • ¿Mi aplicación no se ejecutará lentamente?Despreciable. Si su programa es algo que ejecuta cálculos pesados ​​durante una semana, ahora podría tomar una semana y 3 segundos
  • ¿Qué pasa si mi software o algo más se rompe en el contenedor? Eso es lo bueno de los contenedores. Lo que sea que esté funcionando dentro solo puede romper el contenedor actual y no puede dañar el resto del sistema.
Garo
fuente
0

En algunos casos, no puede filtrar por ID de proceso. Por ejemplo, en mi caso necesitaba rastrear el tráfico de un proceso. Pero encontré en su configuración la dirección IP de la máquina de destino, agregué un filtro ip.dst==someipy listo. No funcionará en ningún caso, pero para algunos es útil.

Alex Zhukovskiy
fuente
0

Obtenga el número de puerto usando netstat:

netstat -b

Y luego use el filtro Wireshark:

tcp.port == portnumber
Sahil Lakhwani
fuente
No estoy seguro de que sea una forma infalible. Si tiene un servidor TCP escuchando en un puerto pero no ha bloqueado el manejo de TCP del kernel, el kernel o su aplicación, o ambos, podrían responder en el puerto.
aeb0
0

El uso stracees más adecuado para esta situación.

strace -f -e trace=network -s 10000 -p <PID>;

opciones -fpara rastrear también todos los procesos bifurcados, -e trace=netwrokpara filtrar solo llamadas al sistema de red y-s al para mostrar una longitud de cadena de hasta 10000 caracteres.

También puede rastrear solo ciertas llamadas como enviar, recibir, leer operaciones.

strace -f -e trace=send,recv,read -s 10000 -p <PID>;
Shaboti
fuente
-16

Puede verificar los números de puerto con estos ejemplos de comandos en Wireshark:

tcp.port == 80

tcp.port == 14220

Rajeev Das
fuente