El comando tcpdump también se denomina analizador de paquetes.
El comando tcpdump funcionará en la mayoría de las versiones del sistema operativo Unix. tcpdump nos permite guardar los paquetes que se capturan, de modo que podamos usarlo para futuros análisis. El archivo guardado se puede ver con el mismo comando tcpdump. También podemos usar software de código abierto como wireshark para leer los archivos tcpdump pcap.
En este tutorial de tcpdump, analicemos algunos ejemplos prácticos sobre cómo usar el comando tcpdump.
1. Captura paquetes de una interfaz ethernet particular usando tcpdump -i
Cuando ejecuta el comando tcpdump sin ninguna opción, capturará todos los paquetes que fluyen a través de todas las interfaces. La opción -i con el comando tcpdump le permite filtrar en una interfaz de ethernet en particular.
$ tcpdump -i eth1 14:59:26.608728 IP xx.domain.netbcp.net.52497 > valh4.lell.net.ssh: . ack 540 win 16554 14:59:26.610602 IP resolver.lell.net.domain > valh4.lell.net.24151: 4278 1/0/0 (73) 14:59:26.611262 IP valh4.lell.net.38527 > resolver.lell.net.domain: 26364+ PTR? 244.207.104.10.in-addr.arpa. (45)
En este ejemplo, tcpdump capturó todos los flujos de paquetes en la interfaz eth1 y los muestra en la salida estándar.
Nota :La utilidad Editcap se utiliza para seleccionar o eliminar paquetes específicos del archivo de volcado y traducirlos a un formato dado.
2. Capture solo N cantidad de paquetes usando tcpdump -c
Cuando ejecuta el comando tcpdump, proporciona paquetes hasta que cancela el comando tcpdump. Con la opción -c puede especificar el número de paquetes a capturar.
$ tcpdump -c 2 -i eth0 listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 14:38:38.184913 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 1457255642:1457255758(116) ack 1561463966 win 63652 14:38:38.690919 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 116:232(116) ack 1 win 63652 2 packets captured 13 packets received by filter 0 packets dropped by kernel
El comando tcpdump anterior capturó solo 2 paquetes de la interfaz eth0.
3. Mostrar paquetes capturados en ASCII usando tcpdump -A
La siguiente sintaxis de tcpdump imprime el paquete en ASCII.
$ tcpdump -A -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 14:34:50.913995 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 1457239478:1457239594(116) ack 1561461262 win 63652 E.....@.@..]..i...9...*.V...]...P....h....E...>{..U=...g. ......G..7\+KA....A...L. 14:34:51.423640 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 116:232(116) ack 1 win 63652 E.....@.@..\..i...9...*.V..*]...P....h....7......X..!....Im.S.g.u:*..O&....^#Ba... E..(R.@.|.....9...i.*...]...V..*P..OWp........
4. Mostrar paquetes capturados en HEX y ASCII usando tcpdump -XX
Algunos usuarios pueden querer analizar los paquetes en valores hexadecimales. tcpdump proporciona una forma de imprimir paquetes en formato ASCII y HEX.
$tcpdump -XX -i eth0 18:52:54.859697 IP zz.domain.innetbcp.net.63897 > valh4.lell.net.ssh: . ack 232 win 16511 0x0000: 0050 569c 35a3 0019 bb1c 0c00 0800 4500 .PV.5.........E. 0x0010: 0028 042a 4000 7906 c89c 10b5 aaf6 0f9a .(.*@.y......... 0x0020: 69c4 f999 0016 57db 6e08 c712 ea2e 5010 i.....W.n.....P. 0x0030: 407f c976 0000 0000 0000 0000 @..v........ 18:52:54.877713 IP 10.0.0.0 > all-systems.mcast.net: igmp query v3 [max resp time 1s] 0x0000: 0050 569c 35a3 0000 0000 0000 0800 4600 .PV.5.........F. 0x0010: 0024 0000 0000 0102 3ad3 0a00 0000 e000 .$......:....... 0x0020: 0001 9404 0000 1101 ebfe 0000 0000 0300 ................ 0x0030: 0000 0000 0000 0000 0000 0000 ............
5. Capture los paquetes y escríbalos en un archivo usando tcpdump -w
tcpdump le permite guardar los paquetes en un archivo y luego puede usar el archivo del paquete para un análisis más detallado.
$ tcpdump -w 08232010.pcap -i eth0 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 32 packets captured 32 packets received by filter 0 packets dropped by kernel
La opción -w escribe los paquetes en un archivo dado. La extensión del archivo debe ser .pcap, que puede ser leído por cualquier analizador de protocolo de red.
6. Leyendo los paquetes de un archivo guardado usando tcpdump -r
Puede leer el archivo pcap capturado y ver los paquetes para su análisis, como se muestra a continuación.
$tcpdump -tttt -r data.pcap 2010-08-22 21:35:26.571793 00:50:56:9c:69:38 (oui Unknown) > Broadcast, ethertype Unknown (0xcafe), length 74: 0x0000: 0200 000a ffff 0000 ffff 0c00 3c00 0000 ............<... 0x0010: 0000 0000 0100 0080 3e9e 2900 0000 0000 ........>.)..... 0x0020: 0000 0000 ffff ffff ad00 996b 0600 0050 ...........k...P 0x0030: 569c 6938 0000 0000 8e07 0000 V.i8........ 2010-08-22 21:35:26.571797 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.50570: P 800464396:800464448(52) ack 203316566 win 71 2010-08-22 21:35:26.571800 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.50570: P 52:168(116) ack 1 win 71 2010-08-22 21:35:26.584865 IP valh5.lell.net.ssh > 11.154.12.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADC
7. Captura paquetes con dirección IP usando tcpdump -n
En todos los ejemplos anteriores, imprime paquetes con la dirección DNS, pero no con la dirección IP. El siguiente ejemplo captura los paquetes y mostrará la dirección IP de las máquinas involucradas.
$ tcpdump -n -i eth0 15:01:35.170763 IP 10.0.19.121.52497 > 11.154.12.121.ssh: P 105:157(52) ack 18060 win 16549 15:01:35.170776 IP 11.154.12.121.ssh > 10.0.19.121.52497: P 23988:24136(148) ack 157 win 113 15:01:35.170894 IP 11.154.12.121.ssh > 10.0.19.121.52497: P 24136:24380(244) ack 157 win 113
8. Capture paquetes con la marca de tiempo legible adecuada usando tcpdump -tttt
$ tcpdump -n -tttt -i eth0 2010-08-22 15:10:39.162830 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 49800 win 16390 2010-08-22 15:10:39.162833 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 50288 win 16660 2010-08-22 15:10:39.162867 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 50584 win 16586
9. Leer paquetes de más de N bytes
Puede recibir solo los paquetes de más de n número de bytes usando un filtro 'mayor' a través del comando tcpdump
$ tcpdump -w g_1024.pcap greater 1024
10. Reciba solo los paquetes de un tipo de protocolo específico
Puede recibir los paquetes según el tipo de protocolo. Puede especificar uno de estos protocolos:fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp y udp. El siguiente ejemplo captura solo paquetes arp que fluyen a través de la interfaz eth0.
$ tcpdump -i eth0 arp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 19:41:52.809642 arp who-has valh5.lell.net tell valh9.lell.net 19:41:52.863689 arp who-has 11.154.12.1 tell valh6.lell.net 19:41:53.024769 arp who-has 11.154.12.1 tell valh7.lell.net
11. Leer paquetes de menos de N bytes
Puede recibir solo los paquetes con menos de n número de bytes usando un filtro 'menos' a través del comando tcpdump
$ tcpdump -w l_1024.pcap less 1024
12. Reciba flujos de paquetes en un puerto en particular usando el puerto tcpdump
Si desea conocer todos los paquetes recibidos por un puerto en particular en una máquina, puede usar el comando tcpdump como se muestra a continuación.
$ tcpdump -i eth0 port 22 19:44:44.934459 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 18932:19096(164) ack 105 win 71 19:44:44.934533 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 19096:19260(164) ack 105 win 71 19:44:44.934612 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 19260:19424(164) ack 105 win 71
13. Capturar paquetes para IP y puerto de destino en particular
Los paquetes tendrán IP de origen y destino y números de puerto. Usando tcpdump podemos aplicar filtros en la IP de origen o destino y el número de puerto. El siguiente comando captura flujos de paquetes en eth0, con una IP de destino particular y el número de puerto 22.
$ tcpdump -w xpackets.pcap -i eth0 dst 10.181.140.216 and port 22
14. Captura paquetes de comunicación TCP entre dos hosts
Si dos procesos diferentes de dos máquinas diferentes se comunican a través del protocolo tcp, podemos capturar esos paquetes usando tcpdump como se muestra a continuación.
$tcpdump -w comm.pcap -i eth0 dst 16.181.170.246 and port 22
Puede abrir el archivo comm.pcap con cualquier herramienta de análisis de protocolo de red para depurar posibles problemas.
15. Paquetes de filtro tcpdump:captura todos los paquetes que no sean arp y rarp
En el comando tcpdump, puede dar la condición "y", "o" y "no" para filtrar los paquetes en consecuencia.
$ tcpdump -i eth0 not arp and not rarp 20:33:15.479278 IP resolver.lell.net.domain > valh4.lell.net.64639: 26929 1/0/0 (73) 20:33:15.479890 IP valh4.lell.net.16053 > resolver.lell.net.domain: 56556+ PTR? 255.107.154.15.in-addr.arpa. (45) 20:33:15.480197 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 540:1504(964) ack 1 win 96 20:33:15.487118 IP zz.domain.innetbcp.net.63897 > valh4.lell.net.ssh: . ack 540 win 16486 20:33:15.668599 IP 10.0.0.0 > all-systems.mcast.net: igmp query v3 [max resp time 1s]