2009-08-27 26 views
74

¿Hay alguna forma de filtrar/seguir una secuencia TCP/SSL según un ID de proceso en particular usando Wireshark?Filtrar por proceso/PID en Wireshark

+2

Al escribir esto, Wireshark aún no es compatible con esta característica; sin embargo, puede rastrear su progreso (si corresponde) en [error 1184] [1]. [1]: https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184 –

Respuesta

39

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

+6

buen punto ... eso es lo que yo también pensé ... déjame esperar un día antes de cerrar esto, solo en caso de que haya es un ninja de wireshark que se las arregla para hacer esto ... –

+8

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, debería ser posible que Wireshark asigne el puerto a PID. Hay algunos casos en que esto podría fallar, como cuando el sistema operativo reasigna un puerto a una aplicación diferente justo antes de que Wireshark consulte el sistema operativo para el PID de un puerto. Por lo tanto, esto no será infalible y a prueba de fallas, pero si el usuario conoce estas limitaciones, aún así sería una característica útil. – Dojo

+0

Digo solo agregar el módulo a wireshark que escucha el puerto abre/cierra y asigna el PID al puerto. Sincronízalo con el proceso principal y obtendrás un mapeador de puerto a proceso perfecto. Sin embargo, al leer el error del comentario de la pregunta, el módulo no es tan simple de crear. – Vesper

12

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

+8

bueno, esto podría no funcionar ... el programa abre y cierra muchos puertos locales y remotos –

75

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

+10

Microsoft Network Monitor 3.4 está en http://www.microsoft.com/en-us/download/details.aspx?id = 4865 –

+23

También hay [Microsoft Message Analyzer] (http://www.microsoft.com/en-ca/download/details.aspx?id=44226) que es básicamente la versión de Microsoft de Wireshark (y el sucesor de Network Monitor como Entiendo), pero un poco mejor integrado. En el selector de columna, debajo de 'Etw' -> 'EtwProviderMsg' hay una columna para 'PID'. ¡Funciona bien! – Cameron

+0

La ruta exacta es EtwProviderMsg -> EventRecord -> Encabezado -> ProcessId – r590

3

En Windows existe una versión experimental que hace esto, como se describe en la lista de correo, Filter by local process name

+0

Eso hace, dentro de Wireshark, el "Podría 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 se 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. –

-12

puede comprobar si hay números de puerto con estos ejemplos de comando en Wireshark: -

tcp.port == 80

tcp.port == 14220

3

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

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

Actualización: ahora uso un sistema aún más simple, puede tener fácilmente una configuración de iptables legible con ferm, y simplemente usar el programa sg para ejecutar un programa con un grupo específico. Iptables también te permite redirigir el tráfico para que incluso puedas enrutarlo a una interfaz separada o un proxy local en un puerto que te permita filtrar en wireshark o LOG los paquetes directamente desde iptables si no quieres deshabilitar todo Internet mientras tú están revisando el tráfico.

No es muy complicado adaptarlo para ejecutar un programa en un grupo y cortar todo el resto del tráfico con iptables para la vida útil de la ejecución y luego solo se puede capturar el tráfico de este proceso.

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

Por otro lado, siempre se puede ejecutar un proceso en una máquina virtual y oler la interfaz correcta para aislar las conexiones que hace, pero eso sería una solución bastante inferior ...

0

En algunos casos se puede no filtrar por id. de proceso Por ejemplo, en mi caso, necesitaba olfatear el tráfico de un proceso. Pero encontré en su máquina de destino de configuración la dirección IP, filtro agregado ip.dst==someip y voila. No funcionará en ningún caso, pero para algunos es útil.

6

Utilice Microsoft Message Analyzer v1.4

Navegue a ProcessId desde el selector de campo.

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

clic derecho y Agregar Columna

+1

Gracias por señalarme en 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. –

1

obtener el número de puerto utilizando netstat:

netstat -b 

Y a continuación, utilizar el filtro de Wireshark:

tcp.port == portnumber 
+0

No estoy seguro de que sea una forma infalible. Si tiene un servidor TCP escuchando en un puerto pero no ha bloqueado el manejo TCP del kernel, cualquiera o ambos kernel o su aplicación podrían responder en el puerto. – aeb0

0

Si desea seguir una aplicación que todavía tiene que b e inició entonces es ciertamente posible:

  1. Instalar ventana acoplable (ver https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/)
  2. Abrir un terminal y ejecutar un recipiente pequeño: docker run -t -i ubuntu /bin/bash (cambiar "ubuntu" a tu distribución favorita, esto no tiene por qué ser el igual que en su sistema real)
  3. Instale su aplicación en el contenedor de la misma forma que la instalaría en un sistema real.
  4. Inicie wireshark 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, ... elija la nueva interfaz virtual docker0 en su lugar.
  5. iniciar la captura
  6. Comience su aplicación en el contenedor

Es posible que tenga algunas dudas sobre el funcionamiento de su software en un contenedor, así 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 necesite aprender un poco sobre la docker para que funcione
  • ¿No se ejecutará lentamente mi aplicación? insignificante. Si su programa es algo que ejecuta cálculos pesados ​​durante una semana, ahora podría llevar una semana y 3 segundos
  • ¿Qué sucede si mi software o algo más se rompe en el contenedor? Eso es lo bueno de los contenedores. Todo lo que se ejecuta dentro solo puede romper el contenedor actual y no puede dañar el resto del sistema.
Cuestiones relacionadas