===== 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.