Cómo utilizar tcpdump y 6 ejemplos

¿Está intentando capturar paquetes de datos para analizar el tráfico en su red? Tal vez sea un administrador de servidor que se ha encontrado con un problema y desea monitorear los datos transmitidos en la red. Cualquiera que sea la situación, la utilidad tcpdump Linux es lo que necesita.

En este artículo, discutiremos el comando tcpdump en detalle, junto con algunas guías sobre cómo instalar y usar tcpdump en su sistema Linux.

¿Qué es el comando tcpdump?

Tcpdump es una poderosa herramienta de monitoreo de red que permite al usuario filtrar paquetes y tráfico en una red de manera eficiente. Puede obtener información detallada relacionada con TCP / IP y los paquetes transmitidos en su red. Tcpdump es una utilidad de línea de comandos, lo que significa que puede ejecutarla en servidores Linux sin pantalla.

Los administradores del sistema también pueden integrar la utilidad tcpdump con cron para automatizar varias tareas como el registro. Dado que sus numerosas características lo hacen bastante versátil, tcpdump funciona como una herramienta de resolución de problemas y de seguridad.

Cómo instalar tcpdump en Linux

Si bien la mayoría de las veces encontrará tcpdump preinstalado en su sistema, algunas distribuciones de Linux no se envían con el paquete. Por lo tanto, es posible que deba instalar manualmente la utilidad en su sistema.

Puede verificar si tcpdump está instalado en su sistema usando el comando which .

 which tcpdump

Si la salida muestra una ruta de directorio ( / usr / bin / tcpdump ), entonces su sistema tiene el paquete instalado. Sin embargo, si no es así, puede hacerlo fácilmente utilizando el administrador de paquetes predeterminado en su sistema.

Para instalar tcpdump en distribuciones basadas en Debian como Ubuntu:

 sudo apt-get install tcpdump

La instalación de tcpdump en CentOS también es fácil.

 sudo yum install tcpdump

En distribuciones basadas en Arch:

 sudo pacman -S tcpdump

Para instalar en Fedora:

 sudo dnf install tcpdump

Tenga en cuenta que el paquete tcpdump requiere libcap como dependencia, así que asegúrese de instalarlo también en su sistema.

Ejemplos de Tcpdump para capturar paquetes de red en Linux

Ahora que ha instalado correctamente tcpdump en su máquina Linux, es hora de monitorear algunos paquetes. Dado que tcpdump requiere permisos de superusuario para ejecutar la mayoría de las operaciones, deberá agregar sudo a sus comandos.

1. Enumere todas las interfaces de red

Para verificar qué interfaces de red están disponibles para capturar, use la marca -D con el comando tcpdump.

 tcpdump -D

Pasar la marca –list-interfaces como argumento devolverá el mismo resultado.

 tcpdump --list-interfaces

El resultado será una lista de todas las interfaces de red que están presentes en su sistema.

Después de obtener la lista de interfaces de red, es hora de monitorear su red capturando paquetes en su sistema. Aunque puede especificar qué interfaz desea usar, el argumento any le ordena a tcpdump capturar paquetes de red usando cualquier interfaz activa.

 tcpdump --interface any

El sistema mostrará la siguiente salida.

Relacionado: ¿Qué es el modelo de interconexión de sistemas abiertos?

2. El formato de salida tcpdump

A partir de la tercera línea, cada línea de la salida denota un paquete específico capturado por tcpdump. Así es como se ve la salida de un solo paquete.

 17:00:25.369138 wlp0s20f3 Out IP localsystem.40310 > kul01s10-in-f46.1e100.net.https: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 33

Tenga en cuenta que no todos los paquetes se capturan de esta manera, pero este es el formato general seguido por la mayoría de ellos.

La salida contiene la siguiente información.

  1. Marca de tiempo del paquete recibido
  2. Nombre de la interfaz
  3. Flujo de paquetes
  4. Nombre del protocolo de red
  5. Dirección IP y detalles del puerto
  6. Banderas de TCP
  7. El número de secuencia de datos en el paquete.
  8. Ack datos
  9. Tamaño de ventana
  10. Longitud del paquete

El primer campo ( 17: 00: 25.369138 ) muestra la marca de tiempo cuando su sistema envió o recibió el paquete. La hora registrada se extrae de la hora local de su sistema.

Los campos segundo y tercero indican la interfaz utilizada y el flujo del paquete. En el fragmento anterior, wlp0s20f3 es el nombre de la interfaz inalámbrica y Out es el flujo de paquetes.

El cuarto campo incluye información relacionada con el nombre del protocolo de red. Generalmente, encontrará dos protocolos: IP e IP6 , donde IP denota IPV4 e IP6 es para IPV6.

El siguiente campo contiene las direcciones IP o el nombre del sistema de origen y destino. Las direcciones IP van seguidas del número de puerto.

El sexto campo de la salida consta de indicadores TCP. Hay varios indicadores que se utilizan en la salida de tcpdump.

Nombre de la bandera Valor Descripción
SYN S Conexión iniciada
ALETA F Conexión finalizada
EMPUJAR PAG Se empujan los datos
RST R La conexión se restablece
ACK . Reconocimiento

La salida también puede contener una combinación de varios indicadores TCP. Por ejemplo, FLAG [f.] Significa un paquete FIN-ACK.

Avanzando en el fragmento de salida, el siguiente campo contiene el número de secuencia ( seq 196: 568 ) de los datos en el paquete. El primer paquete siempre tiene un valor entero positivo y los paquetes siguientes utilizan el número de secuencia relativo para mejorar el flujo de datos.

El siguiente campo contiene el número de acuse de recibo (acuse 1 ) o el número de acuse de recibo simple. El paquete capturado en la máquina del remitente tiene 1 como número de reconocimiento. En el extremo del receptor, el número de Ack es el valor del siguiente paquete.

El noveno campo de la salida acomoda el tamaño de la ventana ( win 309 ), que es el número de bytes disponibles en el búfer de recepción. Hay varios otros campos que siguen el tamaño de la ventana, incluido el Tamaño máximo de segmento (MSS).

El último campo ( longitud 33 ) contiene la longitud del paquete total capturado por tcpdump.

3. Limite el recuento de paquetes capturados

Mientras ejecuta el comando tcpdump por primera vez, es posible que observe que el sistema continúa capturando paquetes de red hasta que pasa una señal de interrupción. Puede anular este comportamiento predeterminado especificando el recuento de paquetes que desea capturar de antemano usando el indicador -c .

 tcpdump --interface any -c 10

El comando antes mencionado capturará diez paquetes de cualquier interfaz de red activa.

4. Filtrar paquetes según los campos

Cuando está solucionando un problema, obtener un gran bloque de salida de texto en su terminal no lo hace más fácil. Ahí es donde entra en juego la función de filtrado en tcpdump. Puede filtrar los paquetes de acuerdo con varios campos, incluido el host, el protocolo, el número de puerto y más.

Para capturar solo paquetes TCP, escriba:

 tcpdump --interface any -c 5 tcp

Del mismo modo, si desea filtrar la salida utilizando el número de puerto:

 tcpdump --interface any -c 5 port 50

El comando mencionado anteriormente solo recuperará los paquetes transmitidos a través del puerto especificado.

Para obtener los detalles del paquete para un host en particular:

 tcpdump --interface any -c 5 host 112.123.13.145

Si desea filtrar paquetes enviados o recibidos por un host específico, use el argumento src o dst con el comando.

 tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145

También puede utilizar los operadores lógicos AND y OR para combinar dos o más expresiones juntos. Por ejemplo, para obtener paquetes que pertenecen a la IP de origen 112.123.13.145 y usar el puerto 80 :

 tcpdump --interface any -c 10 src 112.123.13.145 and port 80

Las expresiones complejas se pueden agrupar usando paréntesis de la siguiente manera:

 tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.234) and (port 45 or port 80)"

5. Ver el contenido del paquete

Puede utilizar los indicadores -A y -x con el comando tcpdump para analizar el contenido del paquete de red. La bandera -A significa formato ASCII y -x indica formato hexadecimal .

Para ver el contenido del siguiente paquete de red capturado por el sistema:

 tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x

Relacionado: ¿Qué es la pérdida de paquetes y cómo solucionar su causa?

6. Guarde los datos de captura en un archivo

Si desea guardar los datos de captura con fines de referencia, tcpdump está ahí para ayudarlo. Simplemente pase el indicador -w con el comando predeterminado para escribir la salida en un archivo en lugar de mostrarlo en la pantalla.

 tcpdump --interface any -c 10 -w data.pcap

La extensión de archivo .pcap significa datos de captura de paquetes . También puede emitir el comando mencionado anteriormente en modo detallado usando el indicador -v .

 tcpdump --interface any -c 10 -w data.pcap -v

Para leer un archivo .pcap usando tcpdump, use el indicador -r seguido de la ruta del archivo. La -r significa Leer .

 tcpdump -r data.pcap

También puede filtrar paquetes de red a partir de los datos del paquete guardados en el archivo.

 tcpdump -r data.pcap port 80

Supervisión del tráfico de red en Linux

Si se le ha asignado la tarea de administrar un servidor Linux, entonces el comando tcpdump es una gran herramienta para incluir en su arsenal. Puede solucionar fácilmente los problemas relacionados con la red capturando los paquetes transmitidos en su red en tiempo real.

Pero antes de todo eso, su dispositivo debe estar conectado a Internet. Para los principiantes de Linux, incluso conectarse con Wi-Fi a través de la línea de comandos puede ser un poco desafiante. Pero si está utilizando las herramientas adecuadas, es muy sencillo.