En el siguiente artículo vamos a echar un vistazo a tcpdump. Esta herramienta nos va a permitir ver información sobre el tráfico que entra y sale de una interfaz de red determinada. Se trata de una herramienta de diagnóstico que nos va a permitir ver la información de los paquetes. Esta información será de donde provienen los paquetes entrantes y hacia donde se dirigen los paquetes salientes, aportando algo de información adicional. Incluso podremos guardar el resultado en un archivo para echarle un vistazo en otro momento.
Este programa funciona en la mayoría de los sistemas operativos UNIX: Gnu/Linux, Solaris, BSD, Mac OS X, HP-UX y AIX entre otros. En esos sistemas, tcpdump hace uso de la biblioteca libpcap para capturar los paquetes que circulan por la red. Además existe una adaptación para los sistemas Microsoft Windows llamada WinDump que hace uso de la biblioteca Winpcap.
En UNIX y otros sistemas operativos es necesario tener privilegios de administrador (root) para utilizar tcpdump. Los usuarios podremos aplicar varios filtros para que la salida sea más depurada. Un filtro es una expresión que va detrás de las opciones y que nos permite seleccionar los paquetes que estamos buscando. En ausencia de filtros tcpdump volcará todo el tráfico que pase por el adaptador de red seleccionado.
Comportamiento predeterminado de tcpdump
La ejecución de tcpdump sin parámetros buscará la primera interfaz activa que encuentre y mostrará información sobre los paquetes que entran o salen de un dispositivo de red. Esto se hará hasta que el proceso se interrumpa (presionando Ctrl+C) o se cancele. Para utilizarlo solo tendremos que escribir en una terminal (Ctrl+Alt+T):
sudo tcpdump
Una vez que el comando finaliza, la salida mostrará cuántos paquetes fueron capturados, cuántos fueron realmente recibidos y cuántos abandonó el kernel.
Visualización de parámetros
Vamos a poder seleccionar una interfaz diferente para ver la información del tráfico. Para saber con qué interfaces se ejecutará tcpdump, utilizaremos el parámetro ‘-D’ que mostrará una lista de dispositivos que se pueden usar como parámetros.
sudo tcpdump -D
Ahora que tenemos una lista de interfaces utilizables, vamos a poder especificar una para utilizarla.
sudo tcpdump -i enp0s3
Limitar la cantidad de paquetes a capturar
Si queremos limitar la salida a solo una cierta cantidad de paquetes, utilizaremos el parámetro ‘-c’ para especificar cuántos paquetes queremos capturar y mostrar la información antes de que termine. Un ejemplo sería el siguiente:
sudo tcpdump -c 20
Ver información en detalle con tcpdump
Se puede mostrar información más detallada usando el parámetro ‘-v’. Esta información incluye el tiempo de vida (TTL), la longitud del paquete, el protocolo y otra información útil para el diagnóstico. Para aumentar la cantidad de salida para cada paquete, utilizaremos el parámetro ‘-vv’ o ‘-vvv’. Algunos ejemplos serían:
sudo tcpdump -vv sudo tcpdump -vvv
Guardar y leer archivos
Tcpdump puede guardar el resultado en un archivo para su posterior visualización por la herramienta. Para ello utilizaremos el parámetro ‘-w’ junto con el nombre del archivo para escribirlo. Debemos recordar que el archivo creado solo puede ser leído por tcpdump. El archivo creado no está en formato de texto plano.
Para escribir la salida de la herramienta en un archivo, tendremos que asignarle el nombre que queramos. Un ejemplo sería el siguiente:
sudo tcpdump -w paquetes.dump
Para leer este archivo más tarde, utilizaremos el parámetro ‘-r’ como se muestra a continuación:
sudo tcpdump -r paquetes.dump
Filtros simples de tcpdump
Los filtros se pueden utilizar para capturar paquetes hacia y desde ciertos hosts y/o puertos, y paquetes que usan un protocolo específico (por ejemplo, TCP o UDP). Hay otros filtros más avanzados, pero a continuación solo veremos algunos ejemplos simples:
Capturar solo paquetes TCP
sudo tcpdump 'tcp'
Solo paquetes UDP
sudo tcpdump 'udp'
Capturar paquetes HTTP (normalmente usa el puerto 80)
sudo tcpdump 'tcp port 80'
Captura de paquetes que viajan hacia o desde un host específico
sudo tcpdump 'host ubunlog.com'
Captura paquetes HTTP que viajan hacia o desde un host específico
sudo tcpdump 'tcp port 80 and host ubunlog.com'
Después de todo esto, creo que se ha podido comprobar que tcpdump es una herramienta de diagnóstico bastante simple y útil para utilizar, visualizar y guardar información de paquetes relacionados con una interfaz de red. De todos modos, a medida que juguemos tcpdump iremos descubriendo otras características que no se han mostrado en este artículo. También vamos a tener la posibilidad de consultar la página de documentación que esta herramienta nos ofrece para ver sus posibilidades más en detalle.