Una pequeña introducción a tcpdump | Algo de Linux

lunes, 13 de febrero de 2012

Una pequeña introducción a tcpdump

tcpdump es un potente sniffer de paquetes de línea de comandos que todo administrador de redes ha tenido que usar en alguna ocasión, ya sea para testear el funcionamiento de alguna aplicación, para detectar problemas en red o capturar datos que circulan sin cifrar.

Para usar tcpdump se requiere tener privilegios de root.

Instalar tcpdump en linux es trivial:

# apt-get install tcpdump

Para aquellos que usan windows, decir que existe un port de tcpdump para ellos. Se llama Windump. Windump es completamente compatible con tcpdump y puede ser utilizado para los mismos fines.

Con tcpdump utilizamos una serie de filtros que nos van a permitir seleccionar los paquetes que queramos analizar. No voy a entrar en muchos detalles sobre la sintaxis de tcpdump, tan sólo voy a mostrar algunos ejemplos de cómo usarlo con algunos filtros. Para más info, recomiendo acudir al manual (man tcpdump).

Por defecto, tcpdump escuchará en eth0. Si queremos indicarle que escuche en otra interfaz, se lo indicaremos con el parámetro -i interfaz.

Ejemplos:

Imaginemos que queremos escuchar todo el tráfico que pasa por el interfaz eth0:

# tcpdump
 
Imaginemos que tenemos dos interfaces: eth0 y wlan0 y queremos escuchar en wlan0:

# tcpdump -i wlan0
 
Ahora imaginemos que queremos capturar el tráfico que proviene de un equipo que tiene la IP 192.168.1.12

# tcpdump -i wlan0 src host 192.168.1.12 

Si quisiéramos capturar los paquetes que van destinados al equipo que tiene la IP 192.168.1.12

# tcpdump -i wlan0 dst host 192.168.1.12
 
Y si quisiéramos capturar los paquetes con origen y destino 192.168.1.12

# tcpdump -i wlan0 host 192.168.1.12
 
Si queremos capturar los paquetes dirigidos a una determinada dirección MAC:

# tcpdump ether dst XX:XX:XX:XX:XX:XX (sustituyendo XX:XX:XX:XX:XX:XX por la dirección mac concreta)

Para capturar los paquetes que vengan desde una red, como por ejemplo 192.168.1.0:

# tcpdump src net 192.168.1.0

Si queremos capturar los paquetes dirigidos por ejemplo a la ip 192.168.2.100 en el puerto 3128

# tcpdump dst host 192.168.2.100 and dst port 3128

Si queremos capturar el tráfico web:

# tcpdump tcp and port 80

También podemos capturar lo contrario de algo. Por ejemplo, capturar los paquetes que no vayan dirigidos a un host concreto.

# tcpdump not dst host 192.168.1.100

Si queremos capturar peticiones de DNS:

# tcpdump udp and dst port 53

Si queremos capturar peticiones ldap:

# tcpdump tcp port ldap

Y si queremos capturar peticiones a ldaps:

# tcpdump -n tcp port ldaps

Si queremos capturar el tráfico de telnet:

# tcpdump tcp port 23

Si queremos analizar el tráfico de dhcp:

# tcpdump -i eth0 -n port 67 or port 68