===== Guía rápida y básica de captura de paquetes con TCPDUMP =====
Interfaces que pueden ser utilizadas por tcpdump.
tcpdump -D
tcpdump -L # Muestra los tipos de enlace de datos disponibles para la interfaz.
No utilizar el modo promiscuo.
tcpdump -p
Escuchar en un interfaz en concreto o en todas.
tcpdump -i eth0
tcpdump -i any
Modo descriptivo (verbose): Hay tres niveles.
tcpdump -v
tcpdump -vv
tcpdump -vvv
Poco descriptivo (menos descriptivo que por defecto).
tcpdump -q
Mostrar paquetes en ASCII.
tcpdump -i eth0 -A
Mostrar las cabeceras del enlace.
tcpdump -e -i eth0
Modo descriptivo + Paquetes en hexadecimal + ASCII (sin incluir cabeceras).
tcpdump -v -X # Sin incluir cabeceras.
tcpdump -v -XX # Incluyendo cabeceras.
Fechas de la capturas de tráfico de red.
tcpdump -tttt -i eth1 # Fechas de la capturas de paquetes comprensibles.
tcpdump -t -i eth1 # Evita el uso de marcas de tiempo.
Limitar la captura a un número de paquetes específico, ej. 100 paquetes.
tcpdump -c 100
Guardar la captura de tráfico en un fichero .cap / rotar fichero .cap cada X tiempo / tamaño.
tcpdump -w capture.cap
tcpdump -w 'trace_%Y-%m-%d_%H:%M:%S.pcap' -G 60 -z gzip # Rota el fichero .cap cada minuto y comprime (optativo) con gzip (se puede usar bzip).
tcpdump -ni eth0 -s65535 -C 100 -w captura # Cada 100Mb rota el fichero (captura1, captura2,..)
Guardar la captura en un fichero .cap mostrando cuantos paquetes son capturados.
tcpdump -v -w capture.cap
Mostrar paquetes de una captura en fichero .cap.
tcpdump -r capture.cap
tcpdump -vvv -r capture.cap # Mostrando el máximo detalle.
tcpdump -tttt -r capture.cap # Mostrando las fechas de forma comprensible.
Mostrar dirección IP y puerto en vez del dominio y nombre de protocolo mientras se captura tráfico. (Se usará frecuentemente en siguientes comandos).
tcpdump -n
tcpdump -nn # Puede ser obligatorio en algunos sistemas
Filtrar por dirección ip (host) / rangos (net) destino, origen y destino + origen. (Mostrando ip + puerto con -n)
tcpdump -n host 192.168.1.1 # IP Origen + IP Destino (Tráfico entrante y saliente).
tcpdump -n dst 192.168.1.1 # IP Destino.
tcpdump -n src 192.168.1.1 # IP Origen.
tcpdump -n dst net 192.168.1.0/24 # IPs destino en el rango Rango 192.168.1.0/24
Filtrar por puerto / tipo de puerto / rango de puertos origen, destino, origen + destino. (Mostrando IP y puerto).
tcpdump -n dst port 23 # Puerto destino 23.
tcpdump -n src not port 54563 # Todos los puertos origen que no sean el 54563
tcpdump -n dst portrange 1-1023 # Rango de puertos 1-1023.
tcpdump -n tcp src portrange 1-1023 # Paquetes TCP con puertos origen entre el 1 y 1023.
tcpdump -n udp portrange 1-1023 # Todo paquete entrante o saliente con puertos entre 1-1023.
Capturar cualquier paquete con destino 192.168.1.1:23. (Mostrando IP y puerto).
tcpdump -n "dst host 192.168.1.1 and dst port 23"
Capturar paquetes con IP destino 192.168.1.1 y puerto 80 o 443.
tcpdump -n "dst host 192.168.1.1 and (dst port 80 or dst port 443)"
Capturar tráfico ICMP.
tcpdump -v icmp
Capturar paquetes arp.
tcpdump -v arp
Capturar paquetes ARP o ICMP.
tcpdump -v "icmp or arp"
Capturar paquetes broadcast o multicast.
tcpdump -n "broadcast or multicast"
Capturar 500 bytes de datos por cada paquete en vez de 68 bytes (por defecto).
tcpdump -s 500
Capturar todos los bytes de datos que formen los paquetes.
tcpdump -s 0
Capturar tráfico filtrando por tamaño del paquete.
tcpdump -w captura.pcap less 1024 # Captura paquetes con un tamaño menor a 1024 bytes.
tcpdump -w captura.pcap greater 1024 # Captura paquetes con un tamaño mayor a 1024 bytes.
**Comandos útiles**.
Ver peticiones HTTP enviando los datos binarios mediante "-l" y una tubería a "strings".
tcpdump -l -s0 tcp dst port 80 -w - | strings
tcpdump -l -s0 tcp dst port 80 -w - | strings| grep 'POST\|Host' # Filtrando peticiones POST.
tcpdump -q -A -n -l -s0 tcp dst port 80 | grep GET | # Otra manera de conseguir lo mismo.
# Capturar 1000 paquetes y mostrar por orden las direcciones IPs que más tráfico generan.
tcpdump -tnn -c 1000 -i enp2s0 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | awk ' $1 > 10 '
# Lista las IPs una por linea que están conectando al host.
tcpdump -i enp2s0 -n ip | awk '{ print gensub(/(.*)\..*/,"\\1","g",$3), $4, gensub(/(.*)\..*/,"\\1","g",$5) }' | awk -F " > " '{print $1"\n"$2}'
# Guardar capturas en otro servidor remoto (SSH).
tcpdump -i enp2s0 -w - | ssh servidorremoto.com -C "cat - > /home/usuario/captura.pcap"
# Analizar en tiempo real con Wireshark el tráfico web de un servidor remoto (SSH).
ssh root@192.168.178.106 tcpdump -i eth0 port 80 -w - | /usr/bin/wireshark -k -i -
# Mostrar direcciones de correo de emails entrantes (from / to).
tcpdump -l -s0 -w - tcp dst port 25 | strings | grep -i 'MAIL FROM\|RCPT TO'
# Carga de red en una interfaz (utilizando pv).
tcpdump -i eth2 -w - |pv -bert >/dev/null
# Interceptar credenciales en el tráfico de red entrante o saliente.
tcpdump -i enp2s0 port http or port ftp or port smtp or port imap or port pop3 -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --color=auto --line-buffered -B20
# Auditar tráfico de memcached.
tcpdump -i eth0 -s 65535 -A -ttt port 11211
# Mostrar las llamadas de postgresql al servidor local (localhost).
tcpdump -nnvvXSs 1514 -i lo0 dst port 5432
**Herramientas para combinar con tcpdump / wireshark**.
* Editcap: Editar capturas (seleccionar / eliminar paquetes).
* Mergecap: Juntar varios volcados de tráfico en uno.
* TShark (Incluido con Wireshark): Analizar capturas.
* httpry: Sniffer centrado en el protocolo HTTP.