tcpdump es una increíble herramienta de línea de comandos para rastrear redes. Es un estándar de la industria para capturar y analizar paquetes TCP / IP.
tcpdump le permite examinar los encabezados de los paquetes TCP / IP. Imprime una línea para cada paquete y el comando sigue ejecutándose hasta que presiona Ctrl + C para terminar.
Examinemos una línea de una salida de ejemplo:
20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0
Cada línea incluye
- Marca de tiempo de Unix (20:58:26.765637)
- protocolo (IP)
- el nombre de host o IP de origen y el número de puerto (10.0.0.50.80)
- nombre de host o IP de destino y número de puerto (10.0.0.1.53181)
- Banderas TCP (
Flags [F.]
). Las banderas indican el estado de la conexión. Esto puede incluir más de un valor, como en este ejemplo [F.] para FIN-ACK. Este campo puede tener los siguientes valores:- S – SYN. El primer paso para establecer la conexión.
- F – FIN. Terminación de la conexión.
- . – ACK. Paquete de acuse de recibo recibido correctamente.
- P – EMPUJE. Le dice al receptor que procese paquetes en lugar de almacenarlos en búfer.
- R – RST. La comunicación se detuvo.
- Número de secuencia de los datos del paquete. (
seq 1
) - Número de acuse de recibo (
ack 2
) - Tamaño de ventana (
win 453
). El número de bytes disponibles en el búfer de recepción. A esto le siguen las opciones de TCP. - Longitud de la carga útil de datos. (
length 0
)
Installation
En distribuciones basadas en Debian, tcpdump se puede instalar con el comando APT:
sudo apt install tcpdump
tcpdump command options
La ejecución de tcpdump sin ninguna opción capturará todos los paquetes que fluyen a través de la interfaz predeterminada.
Para ver la lista de interfaces de red disponibles en el sistema y en las que tcpdump puede capturar paquetes.
tcpdump -D or tcpdump --list-interfaces
Teniendo como salida la siguiente:
1.ens192 [Up, Running] 2.lo [Up, Running, Loopback] 3.any (Pseudo-device that captures on all interfaces) [Up, Running] 4.bluetooth-monitor (Bluetooth Linux Monitor) [none] 5.nflog (Linux netfilter log (NFLOG) interface) [none] 6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
Para capturar paquetes que fluyen a través de una interfaz específica, use el -i
bandera con el nombre de la interfaz. Sin el -i
interfaz tcpdump elegirá la primera interfaz de red que encuentra.
tcpdump -i eth1
De forma predeterminada, tcpdump resuelve las direcciones IP en nombres de host y también usa nombres de servicio en lugar de números de puerto. Si el DNS está roto o no desea que tcpdump realice búsquedas de nombres, use el -n
.
tcpdump -n
Para capturar solo un conjunto de líneas, digamos 5, use el -c
bandera:
tcpdump -c 5
tcpdump filter expressions
Las expresiones de filtro seleccionan qué encabezados de paquete se mostrarán. Si no se aplican filtros, se muestran todos los encabezados de los paquetes. Los filtros más utilizados son puerto, host, src, dst, tcp, udp, icmp.
filtro de puerto
Utilice el filtro de puerto para ver los paquetes que llegan a un puerto específico:
tcpdump -i eth1 -c 5 port 80
Para capturar paquetes de un tipo de protocolo específico, por ejemplo, icmp, en la interfaz eth1:
tcpdump -i eth1 icmp
Combinar expresiones de filtro
Puede combinar estas expresiones de filtro con los operadores AND, OR y NOT. Esto le permitirá escribir comandos que pueden aislar paquetes con mayor precisión:
Paquetes de una IP específica y destinados a un puerto específico:
tcpdump -n -i eth1 src 10.0.0.1 and dst port 80
Para capturar todos los paquetes excepto ICMP, use el operador NOT:
tcpdump -i eth1 not icmp
Para capturar todos los paquetes excepto un host:
tcpdump -i eth1 not host 136.45.12.26
Saving packet headers to a file
Dado que la salida de tcpdump puede desplazarse más allá de la pantalla bastante rápido, puede almacenar los encabezados de los paquetes en un archivo con el indicador -w. Los archivos para guardar la salida usan formato pcap y tienen una extensión de .pcap
.
PCAP significa captura de paquetes. El siguiente comando guarda 10 líneas de salida en la interfaz eth1 en icmp.pcap.
tcpdump -i eth1 -c 10 -w icmp.pcap
Puede leer este archivo con -r
bandera:
tcpdump -r icmp.pcap
Viewing packet details
Hasta ahora solo hemos visto los encabezados de los paquetes, para ver el uso del contenido del paquete -A
opción. Esto imprime el contenido del paquete en ASCII, que puede ser de ayuda en la resolución de problemas de red. también -X
bandera se puede utilizar para mostrar la salida en formato hexadecimal. Esto puede no ser de mucha ayuda si la conexión está encriptada.
tcpdump -c10 -i eth1 -n -A port 80
23:35:53.109306 IP 10.0.0.1.53916 > 10.0.0.50.80: Flags [P.], seq 2366590408:2366590907, ack 175457677, win 4111, options [nop,nop,TS val 255253117 ecr 5344866], length 499: HTTP: GET / HTTP/1.1 E..'..@.@.%. ... ..2...P..M. uE............ .6.}.Q.bGET / HTTP/1.1 Host: 10.0.0.50 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 If-Modified-Since: Tue, 04 Mar 2014 11:46:45 GMT
Para facilitar el acceso a los registros y poder estar más al pendiente he creado un script que me envía un email con todos los registros capturados, acá les dejo el script:
#!/bin/bash ruta="/home/Script/" cd $ruta touch tcpdump.log Log=tcpdump.log echo >$Log echo " ********** [Comenzando escaneo de tcpdump `date +%d-%m-%Y-%Hh%Mm%Ss`] **********" >>$Log echo >>$Log echo >>$Log echo " ********** [Comenzando escaneo UDP port 53] **********" >>$Log echo >>$Log tcpdump -i ens192 -c 50 udp port 53 >>$Log echo >>$Log echo " ********** [Comenzando escaneo TcpDump -XSvvvnnttttc] **********" >>$Log echo >>$Log tcpdump -XSvvvnnttttc 15 >>$Log echo >>$Log echo " ********** [Comenzando escaneo port 8090] **********" >>$Log echo >>$Log tcpdump -c50 -i ens192 -n -A port 8090 >>$Log echo >>$Log echo " ********** [Escaneo de tcpdump FINALIZADO `date +%d-%m-%Y-%Hh%Mm%Ss`] **********" >>$Log echo >>$Log mail -s "*** [Escaneo de tcpdump FINALIZADO `date +%d-%m-%Y-%Hh%Mm%Ss`] ***" email@example.es < $ruta/$Log rm -rf $ruta/$Log exit
Espero les pueda ser de ayuda como lo ha sido para mí. See you later!