Tcpdump es una herramienta para línea de comandos cuya utilidad principal es analizar el tráfico que circula por la red.
Permite al usuario capturar y mostrar en tiempo real los paquetes transmitidos y recibidos por la red a la cual el ordenador está conectado. Fue escrito por Van Jacobson, Craig Leres, y Steven McCanne mientras trabajaban en el Grupo de Investigación de Red del Laboratorio Lawrence Berkeley. Más tarde el programa fue ampliado por Andrew Tridgell.
Tcpdump funciona en la mayoría de los sistemas operativos UNIX: 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.
Existe una adaptación de tcpdump para los sistemas Microsoft Windows llamada WinDump y que hace uso de la biblioteca Winpcap.
En UNIX y otros sistemas operativos es necesario tener privilegios de administrador (root) para utilizar tcpdump.
El usuario puede 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 vea el adaptador de red seleccionado.
tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ]
[ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ] [ -y datalinktype ] [ -Z user ]
[ expression ]
-A: Imprime cada paquete en [[código ASCII]]
-D: Imprime la lista de interfaces disponibles
-n: No convierte las direcciones de salida
-p: No utiliza la [[interfaz]] especificada en [[modo promiscuo]]
-t: No imprime la hora de captura de cada [[Trama de red|trama]]
-x: Imprime cada paquete en [[hexadecimal]]
-X: Imprime cada paquete en [[hexadecimal]] y [[código ASCII]]
-c count: Cierra el [[Software|programa]] tras recibir 'count' paquetes
-C file_size
-E algo:secret
-F file
-i interface: Escucha en la interfaz especificada
-M secret
-r file
-s snaplen
-T type
-w file: Guarda la salida en el [[Archivo (informática)|archivo]] 'file'
-W filecount
-y datalinktype
-Z user
La opción -d es útil a la hora de depurar un filtro. La misma produce un volcado del filtro que ha sido compilado en una forma legible humanamente y detiene la ejecución del programa. Por ejemplo:
tcpdump -d "tcp or ip multicast or vlan 600 and ip multicast"
Produce el siguiente volcado:
(000) ldh [12] (001) jeq #0x86dd jt 2 jf 4 (002) ldb [20] (003) jeq #0x6 jt 13 jf 18 (004) jeq #0x800 jt 5 jf 9 (005) ldb [23] (006) jeq #0x6 jt 13 jf 7 (007) ldb [30] (008) jge #0xe0 jt 13 jf 18 (009) jeq #0x8100 jt 10 jf 18 (010) ldh [14] (011) and #0xfff (012) jeq #0x258 jt 13 jf 18 (013) ldh [16] (014) jeq #0x800 jt 15 jf 18 (015) ldb [34] (016) jge #0xe0 jt 17 jf 18 (017) ret #96 (018) ret #0
src > dst: flags [dataseq ack window urgent options]
15:23:44.772291 IP 192.168.1.17.52798 > 85.Red-83-37-170.dynamicIP.rima-tde.net.65000: . ack 1791 win 7851 <nop, nop, timestamp 5520421 997821>
Capturar tráfico cuya dirección IP de origen sea 192.168.3.1
Capturar tráfico cuya dirección origen o destino sea 192.168.3.2
Capturar tráfico con destino a la dirección MAC 50:43:A5:AE:69:55
Capturar tráfico con red destino 192.168.3.0
Capturar tráfico con red origen 192.168.3.0/28
Capturar tráfico con destino el puerto 23
Capturar tráfico con origen o destino el puerto 110
Capturar los paquetes de tipo ICMP
Capturar los paquetes de tipo UDP
Capturar el tráfico Web
Capturar las peticiones de DNS
Capturar el tráfico al puerto telnet o SSH
Capturar todo el tráfico excepto el web
otra forma:
Capturar todo el tráfico a host 10.168.1.100 puerto 80, en full verbose mode, full snap length, sin ponerla en modo promiscuo, sin convertir las direcciones de salida, imprimir en ASCII y volcar todo el dump en un file
tcpdump -vvv -n -s 65535 -A -p -w /tmp/tcpdump host 10.168.1.100 and port 80