En esta guía te enseñaremos a capturar tráfico de red, filtrando exactamente por lo que estás buscando. En alguna ocasión nos interesa capturar y analizar todo el tráfico, pero en otras ocasiones solamente queremos capturar tráfico de una determinada IP, de un determinado puerto destino o de un protocolo concreto. Aquí te contamos todo eso mediante ejemplos para que puedas aprender a capturar tráfico con tcpdump en Linux.

TCPDUMP es la herramienta número uno de análisis de tráfico de red, una combinación de posibilidades y simplicidad en la línea de comandos.

Vamos a mostrarte mediante ejemplos, como hacer capturas de tráfico simples, o capturas complejas filtrando solamente aquello que necesites, útil para cualquier administrador de redes o seguridad.

Instalar y ejecutar tcpdump

Tcpdump es una herramienta muy antigua y está integrada en la paquetería oficial de cualquier distribución, por tanto la instalación es muy sencilla. En Debian o Ubuntu es tan sencillo como esto:

apt-get install tcpdump

Y en Fedora, CentOS, AlmaLinux o RedHat sería así:

yum install tcpump

Después, lo único que debes recordar es que por defecto capturar tráfico de un interfaz requiere permisos de root. Por tanto, o bien utiliza el usuario root o utiliza sudo como corresponda en tu sistema.

Todo en un interfaz

Para capturar todo el tráfico de red de un interfaz y mostrarlo en pantalla (resumido):

tcpdump -i eth0

El resultado sería algo así:

18:59:20.218672 IP 192.168.153.138.54750 > 192.168.153.108.https: Flags [.], ack 1, win 502, length 0
18:59:20.220167 IP 192.168.153.138.54750 > 192.168.153.108.https: Flags [P.], seq 1:213, ack 1, win 502, length 212
18:59:20.220728 IP 192.168.153.108.https > 192.168.153.138.54750: Flags [.], ack 213, win 917, length 0
18:59:20.222349 IP 192.168.153.80.49153 > 255.255.255.255.6667: UDP, length 172
18:59:20.354854 IP 192.168.153.108.https > 192.168.153.138.54750: Flags [.], seq 1:1361, ack 213, win 917, length 1360

Filtrar por IP

Para capturar el tráfico de una IP concreta, ya sea origen o destino de una conexión, puedes filtrarlo así:

tcpdump host 10.10.10.10

Filtrar por IP origen y/o destino

Si además quieres especificar que la IP sea solamente IP origen o destino de una conexión, puedes hacerlo de la siguiente forma:

tcpdump src 10.10.10.10
tcpdump dst 10.10.10.10

Filtrar por subred

También puedes agrupar por redes o subredes, y filtrar el tráfico para un determinado conjunto de IPs de esta forma, indicando el segmento de red:

tcpdump net 10.10.10.0/24

Mostrar contenido de paquete en hexadecimal

Tcpdump te puede mostrar el contenido de un paquete en hexadecimal y código ASCII, es decir, que te permitirá ver parte de la información que contiene ese paquete, y te puede servir para identificar información que estés buscando:

tcpdump -X 

Y te mostrará algo similar, donde puedes ver a la derecha el contenido en texto ASCII:

Captura TCPDump código Hexadecimal y ASCII

Filtrar por puerto

El filtro de puerto es imprescindible, porque la mayoría de las veces estarás analizando algún problema en alguna aplicación o servicio concreto, y filtrar por el puerto adecuado será muy útil.

tcpdump port 22
tcpdump dst port 25

Filtrar tráfico por un rango de puertos

Si lo que necesitas es filtrar tráfico de un rango de puertos, también puedes hacerlo así:

tcpdump portrange 80-88
tcpdump dst portrange 80-88

Mostrar tráfico de un protocolo

En otras ocasiones, será preferible seleccionar el tráfico de un protocolo concreto, y eso lo puedes hacer así:

tcpdump udp
tcpdump icmp

Mostrar solo tráfico IPv6

Si en algún momento IPv6 consigue desplegarse finalmente y reemplazar de verdad a IPv4, te vendrá muy bien filtrar solamente tráfico IPv6 y eliminar lo demás:

tcpdump ip6

Filtrar tráfico en base al tamaño del paquete

A veces, nos toca analizar tráfico buscando anomalías, y para eso nos puede venir bien seleccionar paquetes con un determinado tamaño, en algunas ocasiones querremos ver paquetes muy pequeños y en otras ocasiones paquetes grandes, el tamaño se indica en bytes:

tcpdump less 64
tcpdump <= 64
tcpdump greater 1450

Guardar la captura de tráfico en fichero

Cuando queremos hacer un análisis rápido, será suficiente con ver el resultado de la captura en consola, y con eso analizar lo que estemos buscando. Pero, en muchas ocasiones será necesario hacer un análisis exhaustivo del tráfico para buscar anomalías o problemas más complejos, y para eso es imprescindible guardar la captura en un fichero, y después poder analizarlo con WireShark.

WireShark es el complemento ideal para tcpdump, porque es compatible con Windows, Linux y MacOS, y te permite hacer un análisis mucho más detallado de todo el tráfico permitiendo ver estadísticas, identificar situaciones de congestión, pérdidas de paquetes, y casi todo lo que se te ocurra. La extensión habitual de estos ficheros es .pcap.

Para guardar la captura en disco:

tcpdump -w FICHERO_CAPTURA.pcap

Leer la captura de tráfico de un fichero

Cuando tenemos un fichero con una captura, además de leerlo con Wireshark también podemos hacerlo con Tcpdump. Es muy fácil:

tcpdump -r FICHERO_CAPTURA.pcap

Opciones avanzadas

Una vez vista las opciones básicas de Tcpdump, vamos a ver algunas opciones o combinaciones que nos permiten establecer filtros, y seleccionar exactamente el tráfico que nos interesa, quitando todo lo demás.

Ahora veremos cómo podemos combinar las opciones anteriores, pero además también podemos establecer varias condiciones de un mismo filtro con los siguientes operadores:

AND o &&: establece varias condiciones y se aplica cuando ambas se cumplen

OR o ||: establece varias condiciones y se aplica cuando al menos una se cumple

not o !: establece que se aplique el filtro cuando NO se cumpla la condición

Filtrar tráfico de una IP origen y un puerto destino

Por ejemplo, si necesitamos filtrar todo el tráfico que vaya a la IP destino 1.2.3.4 y al servicio Remote Desktop Services (puerto 3389), sin resolver nombres DNS ni puertos:

tcpdump -nn dst 1.2.3.4 and dst port 3389

Filtrar tráfico de una red a otra

Filtrar todo el tráfico desde la red origen 10.10.10.0/24 que tenga como destino la red 192.168.1.0/24 o la 192.168.2.0/24, utilizando algún puerto entre el 1024 y el 2048:

tcpdump src net 10.10.10.0/24 and dst net 192.168.1.0/24 or 192.168.2.0/24 and portrange 1024-2048

Tráfico a una determinada IP excepto ICMP

Mostrar todo el tráfico con destino la IP 1.2.3.4 que no sea tipo ICMP:

tcpdump dest 1.2.3.4 and not icmp

Filtrar por Flags TCP

En algunas ocasiones necesitaremos hilar más fino, y hacer filtros todavía más específicos. Por ejemplo, podemos identificar algunos flags de TCP para capturar tráfico, vamos a ver algunos ejemplos.

Capturar tráfico TCP SYN:

tcpdump "tcp[tcpflags] == tcp-syn"

O filtrar paquetes con el flag TCP FIN:

tcpdump "tcp[tcpflags] == tcp-fin"

Filtrar tráfico FTP

Capturar tráfico FTP, tanto de control como de datos:

tcpdump port ftp or ftp-data

Capturar contraseñas en tráfico no cifrado

Todavía hay protocolos que utilizan canales no cifrados, y las contraseñas se transmite en claro, como HTTP, FTP, POP3, TELNET, … Esto evidentemente es un problema de seguridad, y podemos comprobarlo simplemente capturando tráfico y aplicando unos filtros para capturar algunas de las cadenas de texto que se utilizan al intercambiar esta información:

tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '

Otras opciones imprescindibles de Tcpdump

  • -nn: No traduce IPs ni puertos en nombres, en la mayoría de los casos no es necesario, y es más claro observar las IPs y los puertos con sus números correspondientes.
  • -XX: Además del contenido de -X, muestra las cabeceras ethernet
  • -D: Muestra la lista de interfaces disponibles
  • -vv: Mostrar más información (verbose)
  • -c X: Mostrar solamente X número de paquetes y se para la captura
  • -E: descifrar tráfico IPSEC proporcionando la clave de cifrado

Por Byte

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.