Cómo ejecutar una captura remota de paquetes con Wireshark y tcpdump
Wireshark es una herramienta poderosa, pero tiene sus limitaciones. A menos que tenga un equipo de red profesional, es difícil analizar el tráfico que no involucra su computadora.
A veces, la solución más sencilla es utilizar tcpdump para capturar el tráfico en el servidor remoto y luego ejecutar Wireshark para verlo.
¿Qué son Wireshark y tcpdump?
Si bien Wireshark hace un gran trabajo al capturar cada paquete de red que pasa por él, en algunos casos necesitará analizar una sesión desde un servidor remoto. A menos que tenga un equipo de red especial, esto puede resultar difícil. A veces es más fácil capturar el tráfico en el servidor remoto y luego analizarlo en su escritorio.
Si bien Wireshark hace un gran trabajo al capturar cada paquete que pasa, en algunos casos necesitarás analizar una sesión desde un servidor remoto. A menos que tenga un equipo de red especial, esto puede resultar difícil. A veces es más fácil capturar el tráfico en el servidor remoto y luego analizarlo en su escritorio.
tcpdump es un analizador de paquetes de línea de comandos. No es tan fácil de usar como Wireshark, pero es igual de capaz de capturar tráfico. Dado que el comando tcpdump se ejecuta en modo terminal, es posible iniciarlo a través de una sesión SSH. Con las opciones de línea de comandos adecuadas, puede exportar una sesión tcpdump que sea compatible con Wireshark. Puedes consultar nuestro hoja de trucos de tcpdump para obtener más información sobre la instalación, captura de paquetes , operaciones lógicas, protocolos y más.
Ver también: Alternativas a Wireshark
Antes de que empieces
Para seguir las instrucciones de esta guía, necesitará lo siguiente:
- Una computadora remota con un servidor SSH y tcpdump instalado
- Acceso raíz
- Servicios que generan tráfico de red, como Apache o node.js, ejecutándose en la computadora remota
- Una computadora local con un cliente SSH y Wireshark instalado
El objetivo es utilizar comandos tcpdump en la computadora remota, a través de SSH, para capturar el tráfico de la red. Luego, el tráfico capturado se puede copiar a la computadora local para analizarlo con Wireshark.
Esto es útil cuando no tiene acceso físico a la máquina remota o la ejecuta 'sin cabeza', es decir, sin teclado ni monitor.
Capturando paquetes con tcpdump de forma remota a través de SSH
Para capturar el tráfico con el comando tcpdump, deberá conectarse a la computadora remota a través de SSH. También necesitará acceso de root; de lo contrario, tcpdump no podrá capturar el tráfico y verá un error que indica No tienes permiso para capturar en ese dispositivo .
Una vez que se haya conectado, ejecute el siguiente comando para comenzar a capturar tráfico con tcpdump:
|_+_|Las opciones de línea de comandos que utilicé para capturar esta sesión se explicarán a continuación. En resumen, el comando anterior capturará todo el tráfico en el dispositivo Ethernet y lo escribirá en un archivo llamado tcpdump.pcap en un formato compatible con Wireshark.
Una vez que haya terminado de capturar el tráfico, finalice la sesión de tcpdump con Ctrl+C . Verá una breve lectura que muestra información sobre la sesión de captura.
Antes de poder copiar el tráfico de su computadora remota a la local para analizarlo con Wireshark, deberá cambiar los permisos. De forma predeterminada, las sesiones de tcpdump capturadas por el usuario root no se pueden copiar. Utilice este comando:
|_+_|Eso le permitirá copiar el archivo a su máquina local usando scp, como se describe en el siguiente paso.
Copiar una sesión de tcpdump para su análisis
Una vez que haya terminado una sesión de captura con el comando tcpdump, quedará un problema. ¿Cómo se copia en la máquina que ejecuta Wireshark para su análisis? Hay muchas formas, pero creo que la más sencilla es con scp. Como ya capturó paquetes de red en una máquina sin cabeza usando SSH, todo lo que necesita para usar scp ya está instalado y ejecutándose.
Los usuarios de Windows tendrán que descargar pscp , luego copie el archivo a C:WindowsSystem32. La mayoría de los usuarios de Mac y Linux ya tienen todo lo que necesitan.
En Mac o Linux, abra una ventana de terminal y ejecute el siguiente comando para copiar el archivo de captura de sesión:
|_+_|O en Windows, abra PowerShell y ejecute este comando:
|_+_|Sustituya con su información cuando corresponda. Se le pedirá que ingrese su contraseña. Los comandos que utilicé se encuentran en la captura de pantalla anterior como referencia.
Verifique que el archivo se haya copiado como se esperaba y estará listo para analizar la sesión de tcpdump con Wireshark.
Analizando una sesión tcpdump capturada con Wireshark
El análisis funciona igual que con cualquier captura tradicional de Wireshark; Lo único que necesitas saber es cómo importar el archivo.
Inicie Wireshark, luego importe la sesión capturada de tcpdump usando Archivo -> Abrir y busque su archivo. Tú también puedes haga doble clic el archivo de captura tcpdump para abrirlo en Wireshark, siempre y cuando tenga la extensión de archivo *.pcap . Si usaste el -en opción cuando ejecutó el comando tcpdump, el archivo se cargará normalmente y mostrará el tráfico.
En mi caso, estoy ejecutando un servidor Apache en el host remoto y estoy interesado en ver los datos HTTP. Configuré el filtro de vista de Wireshark apropiado y puedo explorar los fotogramas capturados como de costumbre.
Como prueba, incrusté un elemento en el código HTML que no se muestra en la página. Debería poder ubicarlo en el flujo de datos y verlo con Wireshark.
Como puede ver, Wireshark puede analizar cada cuadro y mostrar los datos perfectamente. El elemento que he ocultado aparece en el ejemplo anterior. El proceso de captura es un poco más complicado cuando usas el comando tcpdump, pero todo en Wireshark funciona como de costumbre.
Usando opciones de línea de comando para tcpdump
La mayoría de las veces, cuando inicia tcpdump, querrá tener cierto control sobre cómo captura los paquetes y dónde almacena la sesión. Puedes controlar cosas así usando opciones de línea de comandos. Estas son algunas de las opciones de línea de comandos más útiles para tcpdump.
tcpdump-w
El -en La opción de línea de comandos habilita una salida de captura compatible con Wireshark. Se necesita una única variable, que es el nombre del archivo de salida tcpdump. Los registros de captura guardados con esta opción no serán legibles por humanos fuera de Wireshark, ya que se almacenan en binario en lugar de ASCII.
tcpdump-C
El -C La opción de línea de comandos le permite establecer un tamaño máximo de archivo en bytes. Esta opción sólo funciona junto -en . Por ejemplo, el comando tcpdump -C 1048576 -w captura.pcap especifica un tamaño de captura máximo de 1 MB (1.048.576 bytes) de salida al archivo captura.pcap .
Si la sesión genera una mayor cantidad de resultados, creará nuevos archivos para almacenarlos. Por lo tanto, una captura de 3 MB generaría captura.pcap , captura1.pcap , y captura2.pcap cada uno con un tamaño de archivo de 1 MB.
tcpdump-s
El -s La opción de línea de comando establece una longitud máxima de paquete para cada uno en bytes y trunca el paquete cuando se alcanza el máximo. El comando tcpdump-s 0 establece una longitud ilimitada para garantizar que se capture todo el contenido del paquete.
tcpdump-yo
El -i La opción de línea de comandos especifica qué dispositivo de red desea que tcpdump supervise. Si no se especifica ninguna interfaz, se utiliza de forma predeterminada la interfaz con el número más bajo que se esté ejecutando actualmente.
tcpdump -lista-interfaces
La opción de línea de comando tcpdump -lista-interfaces imprimirá una lista de todas las interfaces que están disponibles para que tcpdump se conecte. Tenga en cuenta que esto no inicia una sesión de captura, pero le dará una lista de interfaces para usar con el -i opción anterior.
tcpdump-c
El -C La opción de línea de comando le dice a tcpdump que salga de la sesión después de capturar una cantidad específica de paquetes.
tcpdump -n
El -norte La opción de línea de comando indica el comando tcpdump. no para resolver direcciones IP en nombres de host. Esto es útil cuando se solucionan problemas de sitios web detrás de un servidor de equilibrio de carga y en algunos otros casos cuando el uso de un nombre de host daría resultados ambiguos.
tcpdump-v | -vv | -vvv
Las tres opciones de la línea de comandos, -en , -vv , y -oficina de Turismo le permitirá aumentar la verbosidad de su sesión de captura. -en guardará los valores TTL para cada paquete, junto con la información ToS. -vv generará TTL y ToS junto con información adicional en paquetes NFS. Y -oficina de Turismo registrará todo lo que hacen las dos primeras opciones, junto con información adicional de las sesiones de telnet.
tcpdump-F
El -F La opción de línea de comandos indica al comando tcpdump que utilice filtros de captura del archivo especificado. Puede encontrar más información sobre cómo escribir un archivo de captura en la siguiente sección.
Usando filtros de captura para tcpdump
Los filtros de captura le permiten limitar los datos que tcpdump almacena en una sesión. Son una forma útil de facilitar un poco el análisis de datos y mantener pequeños los archivos de captura. Estos son algunos de los filtros de captura más útiles para tcpdump.
anfitrión
Este filtro especifica que solo se debe capturar el tráfico hacia y desde el host de destino. Toma una dirección IP o un nombre de host como argumento.
neto
El filtro de red le indicará a su computadora que solo capture el tráfico en una subred determinada y toma una dirección IP como argumento. Por ejemplo, 192.168.1.0/24 especifica que se capturará el tráfico hacia o desde todos los hosts de la subred. Tenga en cuenta que se requiere una máscara de subred en notación de barra.
anfitrión del horario de verano
Similar a anfitrión , este filtro de captura especifica que solo se capturará el tráfico con un destino del host determinado. También se puede utilizar con neto .
anfitrión src
Como arriba, pero este filtro solo captura el tráfico que se origina desde el host o la dirección IP especificados. También se puede utilizar con neto .
puerto
Este filtro le dice a tcpdump que capture el tráfico hacia y desde un número de puerto determinado. Por ejemplo, puerto 443 capturará el tráfico TLS.
rango de puertos
De manera similar al filtro de puertos, portrange establece un rango de puertos en los que se captura el tráfico. Para utilizar el filtro portrange, especifique el puerto inicial y el puerto final separados por un guión. Por ejemplo, portrange 21-23 .
puerta
El filtro de puerta de enlace especifica que su computadora solo debe capturar el tráfico que utilizó un nombre de host determinado como puerta de enlace. El nombre de host debe encontrarse en /etc/hosts .
transmisión
El filtro de transmisión especifica que tcpdump solo debe capturar el tráfico que se transmite a todos los hosts de una subred.
multidifusión IP
Este filtro le indica a tcpdump que capture solo el tráfico de multidifusión en la subred de la máquina host.
y/o/no operadores
Los filtros se pueden encadenar entre sí usando el y , o , O no operadores. Por ejemplo, para capturar todo el tráfico web en un host determinado, puede utilizar el filtro puerto 80 o puerto 443 . O puede capturar todo el tráfico en una subred determinada, excepto los paquetes de transmisión, utilizando el filtro net 192.168.1.0/24 y no transmitido.
En la práctica, es muy común utilizar operadores de filtro, ya que proporcionan una capa adicional de granularidad a sus capturas. Puede capturar exactamente el tráfico que necesita, sin mucha charla adicional en la red.
Expresiones complejas con múltiples operadores.
Se pueden construir expresiones aún más complejas rodeando múltiples operaciones entre apóstrofes y paréntesis simples. Por ejemplo, puede monitorear todo el tráfico de correo, incluidos SMTP, IMAP, IMAP sobre TLS, POP3 y POP3 sobre TLS, en múltiples hosts y subredes, usando un comando como este:
|_+_|Las expresiones complejas con múltiples operadores pueden ser muy útiles, pero normalmente se guardan en un archivo de filtro para su reutilización, ya que un solo error tipográfico provocará que falle la captura. Con frecuencia, será necesario prepararlos con antelación y depurarlos.
Ver también: Tutorial de máscara de subred de longitud variable
Usando archivos de filtro para tcpdump
Los filtros anteriores se pueden ejecutar en la línea de comando cuando se inicia tcpdump, pero a menudo es útil crear un archivo de filtro. Un archivo de filtro facilita la reproducción de la configuración del filtro entre capturas, ya que es reutilizable. Estos son los pasos para escribir y usar un archivo de filtro.
Escribe el archivo de filtro.
Los archivos de filtro utilizan exactamente la misma notación que la línea de comando. No requieren caracteres especiales ni números mágicos en la parte superior del archivo.
Por ejemplo, aquí hay un archivo de filtro que escribí y que capturará todo el tráfico web saliente desde mi servidor Apache a un host determinado. En este caso, el Chromebook en el que estoy escribiendo.
Siempre que el usuario que ejecuta el comando tcpdump pueda leer el archivo, el programa intentará analizar todo el contenido del archivo de filtro y utilizarlo como un filtro válido. Cuando un El archivo de filtro se utiliza junto con el filtrado de línea de comandos, todos los filtrados de línea de comandos se ignorarán. .
Indique a tcpdump que use cualquier archivo de filtro determinado usando el -F opción de línea de comando, seguida de la ruta al archivo. En el ejemplo anterior, el archivo de filtro se encuentra en el mismo directorio en el que estoy ejecutando tcpdump.
Aquí está el resultado de la captura de paquetes sin procesar de la sesión filtrada. Puede ver que los únicos paquetes que se registran se originan en puerto 80 o 443 y salen al host en 192.168.1.181.
Una vez que vea que su filtro funciona según lo previsto, capture una sesión para analizarla con Wireshark usando un comando similar a este:
|_+_|Wireshark y tcpdump
A menos que esté ejecutando un conmutador administrado con un puerto de administración, tarde o temprano necesitará capturar el tráfico en un servidor remoto. Cuando Wireshark por sí solo no funciona, Wireshark con tcpdump es una opción popular. Los dos funcionan muy bien juntos y, con algunas opciones simples de línea de comandos, tcpdump exportará sesiones de captura que se pueden analizar fácilmente en Wireshark.
Preguntas frecuentes sobre tcpdump de Wireshark
¿Cómo hago un volcado tcp de una dirección IP?
El filtro de host reducirá el tcpdump al tráfico para una sola dirección IP, use el anfitrión filtrar. Esto debe ir seguido de la dirección IP. Por ejemplo, servidor tcpdump 192.168.0.10 . Para reducir aún más la salida, puede especificar solo el tráfico que se origina en esa dirección IP con el src opción o solo el tráfico que va a esa dirección IP con la horario de verano opción, por ejemplo: host src tcpdump 192.168.0.10 .
¿Cómo uso tcpdump en un puerto específico?
Puede seleccionar todo el tráfico para un puerto específico con un filtro en el comando tcpdump. Este método también le brindará tráfico de protocolo específico siempre que conozca el puerto utilizado para ese protocolo. El filtro es puerto y es posible especificar solo tráfico TCP o UDP con las opciones TCP y udp . Ejemplos: puerto tcpdump 53 o tcpdump puerto udp 53 .
¿Qué es el protocolo de captura remota de paquetes?
Protocolo de captura remota de paqueteses un programa, llamado RPCAPD.EXE. Esto se implementa como un demonio y es parte de WinPCap. El demonio del Protocolo de captura remota de paquetes actúa como un agente en una computadora, permitiendo que los paquetes se capturen desde ella de acuerdo con los comandos emitidos en otra computadora.
¿Por qué tcpdump no captura contraseñas como ftp y ssh a diferencia de Wireshark?
Es posible capturar contraseñas ftp con tcpdump. Correr tcpdump -nn -v puerto ftp o ftp-data y buscar la salida para USUARIO para obtener el nombre de usuario y APROBAR para obtener la contraseña. Incluso Wireshark no descifrará una sesión SSH, incluidas las credenciales de inicio de sesión, sin conocer ya la clave utilizada para cifrar la conexión. Ni tcpdump ni Wireshark pueden obtener el nombre de usuario o la contraseña para una sesión SFTP o FTPS.