Ejemplos de tcpdump en Linux

Cuando la red no funciona como debería, o simplemente necesitas entender qué es lo que se transmite por los cables, tcpdump viene al rescate. Es como un estetoscopio para tu servidor, una herramienta que te permite «escuchar» el tráfico de red en tiempo real. Puede parecer complicado a primera vista, pero en realidad es una herramienta muy potente y fiable para los administradores de sistemas y cualquier usuario de Linux curioso.

Redmagic WWRedmagic WW

En este artículo no profundizaremos en la teoría de las redes. En su lugar, pasaremos directamente al grano y veremos ejemplos concretos de comandos que podrá aplicar en su trabajo diario. Aprenderá a filtrar paquetes por direcciones IP, puertos y tipos de protocolos para encontrar rápidamente la información que necesita en el mar de datos de la red.

Nuestros ejemplos le ayudarán a diagnosticar problemas de conexión, rastrear actividades sospechosas o simplemente satisfacer su curiosidad sobre cómo se comunican los programas entre sí. Comencemos con los comandos más simples y pasemos gradualmente a escenarios de uso más avanzados.

Tcpdump es una útil utilidad de Linux para escuchar y analizar el tráfico de red, que suelen utilizar los administradores y desarrolladores para comprender lo que ocurre en la red: por ejemplo, por qué no funciona un servicio, quién está sobrecargando el canal o si hay conexiones sospechosas. Con unos sencillos comandos, se puede filtrar el tráfico por IP, puertos, protocolos o interfaces, guardarlo para su posterior análisis o verlo en tiempo real. Es como conectarse a una conversación entre ordenadores y comprender de qué están hablando.

Configuración

Justfashionnow WWGshopper Many GEOs

La mayoría de los desarrolladores de sistemas operativos basados en Linux incluyen la utilidad tcpdump en la lista de aplicaciones preinstaladas, pero si por alguna razón no está presente en su distribución, siempre puede descargarla e instalarla a través de «Terminal». Si su sistema operativo está basado en Debian, como Ubuntu, Linux Mint, Kali Linux y similares, debe ejecutar este comando:

sudo apt install tcpdump

Durante la instalación, deberá introducir una contraseña. Tenga en cuenta que esta no se muestra al escribirla. Además, para confirmar la instalación, deberá introducir el símbolo «D» y pulse Intro.

Si tiene Red Hat, Fedora o CentOS, el comando de instalación tendrá el siguiente aspecto:

sudo yam install tcpdump

Una vez instalada la utilidad, se puede utilizar inmediatamente. Esto y mucho más se explicará más adelante en el texto.

Sintaxis

Italojewerly WWItalojewerly WW

Como cualquier otro comando, tcpdump tiene su propia sintaxis. Conociéndola, podrá especificar todos los parámetros necesarios que se tendrán en cuenta al ejecutar el comando. La sintaxis es la siguiente:

tcpdump opciones -i interfaz filtros

Al utilizar el comando, es imprescindible especificar la interfaz para el seguimiento. Los filtros y las opciones no son variables obligatorias, pero permiten una configuración más flexible.

Opciones

Aunque no es obligatorio especificar la opción, es necesario enumerar todas las disponibles. La tabla no muestra la lista completa, sino solo las más populares, pero son más que suficientes para resolver la mayoría de las tareas planteadas.

Opción Definición
-A Permite ordenar los paquetes con formato ASCII.
-l Añade la función de desplazamiento
-i Después de introducirla, debe especificar la interfaz de red que se va a rastrear. Para empezar a rastrear todas las interfaces, escriba la palabra «any» después de la opción.
-c Finaliza el proceso de seguimiento después de verificar la cantidad especificada de paquetes.
-w Genera un archivo de texto con el informe de verificación.
-e Muestra el nivel de conexión a Internet del paquete de datos
-L Muestra solo los protocolos que admite la interfaz de red especificada
-C Crea otro archivo durante la grabación del paquete si su tamaño es mayor que el especificado.
-r Abre el archivo para lectura que se ha creado con la opción -w
-j Para registrar los paquetes se utilizará el formato TimeStamp
-J Permite ver todos los formatos TimeStamp disponibles
-G Sirve para crear un archivo con registros. La opción también requiere especificar un valor temporal, tras el cual se creará un nuevo registro.
-v, -vv, -vvv Dependiendo del número de caracteres en la opción, la salida del comando será más detallada (el aumento es directamente proporcional al número de caracteres).
-f En la salida muestra el nombre de dominio de las direcciones IP.
-F Permite leer la información no desde la interfaz de red, sino desde el archivo especificado.
-D Muestra todas las interfaces de red que se pueden utilizar
-n Desactiva la visualización de nombres de dominio
-Z Especifica el usuario bajo cuya cuenta se crearán todos los archivos.
-K Omite el análisis de las sumas de comprobación
-q Demostración de información breve.
-H Permite detectar encabezados 802.11s.
-I Se utiliza al capturar paquetes en modo monitor.

Una vez analizadas las opciones, pasaremos directamente a sus aplicaciones. Por ahora, veremos los filtros.

Filtros

Como se mencionó al principio del artículo, puede añadir filtros a la sintaxis de tcpdump. A continuación, veremos los más populares:

Filtro Definición
host Sirve para especificar el nombre del host.
net Especifica la IP de la subred y la red
ip Sirve para indicar la dirección del protocolo.
src Muestra los paquetes que se han enviado desde la dirección especificada
dst Muestra los paquetes que han sido recibidos por la dirección especificada.
arp, udp, tcp Filtrado por uno de los protocolos
port Muestra la información relativa a un puerto específico
and, or Sirve para combinar varios filtros en un comando.
less, greater Salida de paquetes menores o mayores que el tamaño especificado

Todos los filtros mencionados anteriormente se pueden combinar entre sí, de modo que en el resultado del comando solo verá la información que desea ver. Para comprender con más detalle el uso de los filtros mencionados anteriormente, vale la pena dar algunos ejemplos.

Ejemplos de uso

Gshopper Many GEOsGshopper Many GEOs

A continuación se muestran las opciones de sintaxis más utilizadas del comando tcpdump. No es posible enumerarlas todas, ya que sus variaciones pueden ser infinitas.

Ver la lista de interfaces

Se recomienda a todos los usuarios que comprueben inicialmente la lista de todas sus interfaces de red que se pueden rastrear. Por la tabla anterior sabemos que para ello hay que utilizar la opción -D, por lo tanto, ejecute el siguiente comando en el terminal:

sudo tcpdump -D

Ejemplo:

Como se puede observar, en el ejemplo hay ocho interfaces que se pueden ver con el comando tcpdump. En el artículo se darán ejemplos con ppp0, puede utilizar cualquier otra.

Captura de tráfico normal

Si necesita rastrear una interfaz de red, puede hacerlo con la opción -i. No olvide indicar el nombre de la interfaz después de introducirlo. He aquí un ejemplo de ejecución de dicho comando:

sudo tcpdump -i ppp0

Tenga en cuenta que antes del comando debe escribir «sudo», ya que requiere derechos de superusuario.

Ejemplo:

Nota: después de pulsar Intro en «Terminal», se mostrarán continuamente los paquetes interceptados. Para detener su flujo, pulse la combinación de teclas Ctrl+C.

Si ejecuta el comando sin opciones ni filtros adicionales, verá el siguiente formato de visualización de los paquetes rastreados:

22:18:52.597573 IP vrrp-topf2.p.mail.ru. https > 10.0.6.67.35482: Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594

Donde se destaca con color:

Azul Tiempo de recepción del paquete
Naranja Versión del protocolo
Verde Dirección del remitente
Violeta Dirección del destinatario
Gris Información adicional sobre tcp
Rojo Tamaño del paquete (se muestra en bytes)

Esta sintaxis tiene la capacidad de mostrar en la ventana «Terminal» sin utilizar opciones adicionales.

Captura de tráfico con la opción -v

Como se sabe por la tabla, la opción -v permite aumentar la cantidad de información. Analicemos un ejemplo. Comprobemos la misma interfaz:

sudo tcpdump -v -i ppp0

Ejemplo:

Aquí se puede observar que ha aparecido la siguiente línea en la salida:

IP (tos 0x0, ttl 58, id 30675, offset 0, flags [DF], proto TCP (6), length 52

Donde se destaca con color:

Naranja Versión del protocolo
Azul Duración del protocolo
Verde Longitud del encabezado del campo
Violeta Versión del paquete tcp
Rojo Tamaño del paquete (se muestra en bytes)

También puede escribir la opción en la sintaxis del comando -vv o -vvv, lo que permitirá aumentar aún más la cantidad de información que se muestra en la pantalla.

Opción -w y -r

En la tabla de opciones se mencionaba la posibilidad de guardar todos los datos mostrados en un archivo separado para poder verlos más tarde. De esto se encarga la opción -w. Usarla es bastante sencillo, solo hay que indicarla en el comando y luego escribir el nombre del futuro archivo con la extensión «.pcap». Veamos todo con un ejemplo:

sudo tcpdump -i ppp0 -w file.pcap

Ejemplo:

Tenga en cuenta que durante la grabación de los registros en el archivo, no se muestra ningún texto en la pantalla del «Terminal».

Cuando desee ver la salida grabada, debe utilizar la opción -r, y luego escribir el nombre del archivo grabado anteriormente. Se aplica sin otras opciones ni filtros:

sudo tcpdump -r file.pcap

Ejemplo:

Ambas opciones son ideales en los casos en que es necesario guardar grandes volúmenes de texto para su posterior análisis.

Filtrado por IP

De la tabla de filtros sabemos que dst permite mostrar en la pantalla de la consola solo aquellos paquetes que han sido recibidos por la dirección indicada en la sintaxis del comando. De esta manera, es muy conveniente ver los paquetes recibidos por su ordenador. Para ello, solo hay que indicar su dirección IP en el comando:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Ejemplo:

Como se puede observar, además de dst, en el comando también hemos escrito el filtro ip. En otras palabras, le hemos dicho al ordenador que, al seleccionar los paquetes, preste atención a su dirección IP y no a otros parámetros.

Por IP se pueden filtrar también los paquetes enviados. En el ejemplo volveremos a utilizar nuestra IP. Es decir, ahora vamos a rastrear qué paquetes se envían desde nuestro ordenador a otras direcciones. Para ello, hay que ejecutar el siguiente comando:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Ejemplo:

Como se puede observar, en la sintaxis del comando hemos cambiado el filtro dst en src, indicándole así al equipo que busque al remitente por IP.

Filtrado por HOST

De forma análoga a la IP en el comando, podemos especificar el filtro host, para descartar los paquetes con el host que le interesa. Es decir, en la sintaxis, en lugar de la dirección IP del remitente/destinatario, deberá indicar su host. Queda así:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

Ejemplo:

En la imagen se puede ver que en «Terminal» solo se muestran los paquetes que se enviaron desde nuestra IP al host google.com. Como se puede entender, en lugar del host google, se puede escribir cualquier otro.

Al igual que en el caso del filtrado por IP, en la sintaxis dst se puede sustituir por src, para ver los paquetes que se envían a tu ordenador:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Tenga en cuenta que el filtro host debe ir después de dst o src, de lo contrario el comando dará un error. En el caso del filtrado por IP, por el contrario, dst y src van antes del filtro ip.

Aplicación del filtro «and» y «or»

Si necesita utilizar varios filtros a la vez en un solo comando, debe aplicar el filtro and o o (depende del caso). Al especificar los filtros en la sintaxis y separarlos con este operador, «obligará» a que funcionen como uno solo. En el ejemplo, queda así:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254

Ejemplo:

Por la sintaxis del comando, se ve que queremos mostrar en pantalla «Terminal» todos los paquetes que se enviaron a la dirección 95.47.144.254 y los paquetes recibidos por esta misma dirección. También puede cambiar algunas variables en esta expresión. Por ejemplo, en lugar de IP, especifique HOST o sustituya directamente las direcciones.

Filtro port y portrange

Filtro port es ideal en los casos en los que se necesita obtener información sobre paquetes con un puerto determinado. Así, si solo necesita ver las respuestas o solicitudes DNS, debe indicar el puerto 53:

sudo tcpdump -vv -i ppp0 port 53

Ejemplo:

Si desea ver los paquetes http, debe introducir el puerto 80:

sudo tcpdump -vv -i ppp0 port 80

Ejemplo:

Entre otras cosas, existe la posibilidad de rastrear directamente el rango de puertos. Para ello se aplica el filtro portrange:

sudo tcpdump portrange 50-80

Como se puede observar, en combinación con el filtro portrange no es necesario especificar opciones adicionales. Basta con establecer el rango.

Filtrado por protocolos

También puede mostrar en pantalla solo el tráfico que corresponda a un protocolo determinado. Para ello, debe utilizar como filtro el nombre de ese protocolo. Veamos un ejemplo udp:

sudo tcpdump -vvv -i ppp0 udp

Ejemplo:

Como se puede ver en la imagen, después de ejecutar el comando en «Terminal» solo se muestran los paquetes con el protocolo udp. Por lo tanto, puede aplicar el filtrado a otros, por ejemplo, arp:

sudo tcpdump -vvv -i ppp0 arp

o tcp:

sudo tcpdump -vvv -i ppp0 tcp

Filtro net

Operador net ayuda a filtrar los paquetes basándose en la designación de su red. Usarlo es tan sencillo como los demás: hay que indicar el atributo net, y luego escribir la dirección de la red. He aquí un ejemplo de dicho comando:

sudo tcpdump -i ppp0 net 192.168.1.1

Ejemplo:

Filtrado por tamaño de paquete

Aún no hemos visto dos filtros interesantes: less y greater. Por la tabla de filtros sabemos que sirven para mostrar paquetes de datos mayores que (menos o menos (greater del tamaño especificado después de introducir el atributo.

Supongamos que solo queremos supervisar los paquetes que no superan los 50 bits, entonces el comando tendrá el siguiente aspecto:

sudo tcpdump -i ppp0 less 50

Ejemplo:

Ahora vamos a mostrar en «Terminal» los paquetes cuyo tamaño sea superior a 50 bits:

sudo tcpdump -i ppp0 greater 50

Ejemplo:

Como se puede observar, se aplican de la misma manera, la única diferencia es el nombre del filtro.)

Como puede ver, tcpdump es una herramienta increíblemente potente para aquellos que necesitan echar un vistazo bajo el capó de la interacción de red. Permite ver en tiempo real lo que realmente se transmite por cable o por aire, convirtiendo los problemas abstractos de red en datos concretos que se pueden analizar.

Empiece con comandos sencillos, como el filtrado por puerto o dirección IP. Poco a poco, con la práctica, podrá crear filtros más complejos para capturar con precisión los paquetes que necesita. No tenga miedo de experimentar en su máquina de prueba: es la mejor manera de entender cómo funciona todo.

En definitiva, saber utilizar tcpdump es una superhabilidad para un administrador de sistemas o un desarrollador. Te da independencia a la hora de diagnosticar problemas, ya sea un fallo en la conexión, una actividad sospechosa o simplemente el deseo de comprender la lógica de funcionamiento de un servicio de red concreto. Esta herramienta se convertirá en un ayudante fiable en tu arsenal.

Redmagic WWRedmagic WWRedmagic WWRedmagic WWRedmagic WWRedmagic WW
¿Qué función considera más importante en un nuevo smartphone??
Share to friends
Elena Sokolova

Me dedico al periodismo tecnológico desde hace más de 7 años. Me centro en la innovación y el futuro de la tecnología. Me encanta hablar de cómo los gadgets y la tecnología pueden cambiar nuestro mundo y compartir noticias sobre los avances más punteros.

Rate author
Appliances-News.com
Add a comment