tcpdump

Guía para principiantes de TCPDUMP

Guía para principiantes de TCPDUMP
Tcpdump es un analizador de paquetes de red de datos inalámbrico gratuito y de código abierto que funciona en la interfaz de línea de comandos. Es la herramienta CLI más utilizada para analizar el tráfico de la red. Tcpdump permite a los usuarios ver, leer o capturar el tráfico de red transmitido a través de una red conectada a la computadora. Es útil en la administración del sistema, monitoreo del tráfico de la red (para problemas o de otro tipo).

Originalmente, fue escrito en 1988 por cuatro trabajadores del Network Research Group en el Laboratorio Lawrence Berkeley en California. Fue organizado once años después por Micheal Richardson y Bill Fenner en 1999, quienes crearon el sitio tcpdump. Tcpdump funciona en todos los sistemas operativos similares a Unix. La versión de Windows de Tcpdump se llama WinDump y usa WinPcap, la alternativa de Windows para libpcap.

Utilice el complemento para instalar tcpdump:

$ sudo snap instalar tcpdump

Utilice su administrador de paquetes para instalar tcpdump:

$ sudo apt-get install tcpdump (Debian / Ubuntu)
$ sudo dnf install tcpdump (CentOS / RHEL 6 y 7)
$ sudo yum install tcpdump (Fedora / CentOS / RHEL 8)

Veamos diferentes usos y resultados a medida que exploramos tcpdump!

UDP

Tcpdump también puede volcar paquetes UDP. Usaremos una herramienta netcat (nc) para enviar un paquete UDP y luego volcarlo.

$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337

En el comando anterior, enviamos un paquete UDP que consta de la cadena "Tcpdumper" al puerto UDP 1337 vía localhost. Tcpdump captura el paquete que se envía a través del puerto UDP 1337 y lo mostrará.

Ahora volcaremos este paquete usando tcpdump.

$ sudo tcpdump -i lo udp puerto 1337 -vvv -X

Este comando capturará y mostrará los datos capturados de los paquetes en ASCII y en formato hexadecimal.

tcpdump: escucha en lo, tipo de enlace EN10MB (Ethernet), longitud de instantánea 262144 bytes
04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, desplazamiento 0, banderas [DF], proto UDP (17), longitud 37)
localhost.54574> localhost.1337: [bad udp cksum 0xfe24 -> 0xeac6!] UDP, longitud 9
0x0000: 4500 0025 7f8a 4000 4011 bd3b 7f00 0001 E…%… @.@…;…
0x0010: 7f00 0001 d52e 0539 0011 fe24 7463 7064… 9… $ tcpd
0x0020: 756d 7065 72 parachoques

Como podemos ver, el paquete se envió al puerto 1337 y la longitud era 9 como cadena tcpdumper es de 9 bytes. También podemos ver que el paquete se ha mostrado en formato hexadecimal.

DHCP

Tcpdump también puede realizar investigaciones sobre paquetes DHCP a través de la red. DHCP usa el puerto UDP no 67 o 68, por lo que definiremos y limitaremos tcpdump solo para paquetes DHCP. Supongamos que estamos usando una interfaz de red wifi.
El comando utilizado aquí será:

$ sudo tcpdump -i wlan0 puerto 67 o puerto 68 -e -n -vvv
tcpdump: escucha en wlan0, tipo de enlace EN10MB (Ethernet), longitud de instantánea 262144 bytes
03:52:04.004356 00: 11: 22: 33: 44: 55> 00: 11: 22: 33: 44: 66, ethertype IPv4 (0x0800), longitud 342: (tos 0x0, ttl 64, id 39781, offset 0, flags [DF ], proto UDP (17), longitud 328)
192.168.10.21.68> 192.168.10.1.67: [udp sum ok] BOOTP / DHCP, solicitud de 00: 11: 22: 33: 44: 55, longitud 300, xid 0xfeab2d67, banderas [ninguna] (0x0000)
Cliente-IP 192.168.10.dieciséis
Dirección Ethernet del cliente 00: 11: 22: 33: 44: 55
Extensiones Vendor-rfc1048
Galleta mágica 0x63825363
Mensaje DHCP (53), longitud 1: Liberación
ID de servidor (54), longitud 4: 192.168.10.1
Nombre de host (12), longitud 6: "loro"
FIN (255), longitud 0
PAD (0), longitud 0, aparece 42

DNS

DNS, también conocido como Sistema de nombres de dominio, confirma que le proporcionará lo que está buscando al hacer coincidir el nombre de dominio con la dirección de dominio. Para inspeccionar la comunicación de nivel DNS de su dispositivo a través de Internet, puede usar tcpdump de la siguiente manera. DNS usa el puerto UDP 53 para la comunicación.

$ sudo tcpdump -i wlan0 puerto udp 53
tcpdump: escucha en wlan0, tipo de enlace EN10MB (Ethernet), longitud de instantánea 262144 bytes
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, desplazamiento 0, banderas [DF], proto UDP (17), longitud 72)
192.168.10.dieciséis.45899> uno.uno.uno.uno.dominio: [udp sum ok] 20852+ A? mozilla.cloudflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, desplazamiento 0, banderas [DF], proto UDP (17), longitud 104)
uno.uno.uno.uno.dominio> 192.168.10.dieciséis.45899: [udp sum ok] 20852 q: A? mozilla.cloudflare-dns.com. 2/0/0 mozilla.cloudflare-dns.com. [24s] A 104.dieciséis.249.249, mozilla.cloudflare-dns.com. [24s] A 104.dieciséis.248.249 (76)
04:23:48.648477 IP (tos 0x0, ttl 64, id 31446, desplazamiento 0, banderas [DF], proto UDP (17), longitud 66)
192.168.10.dieciséis.34043> uno.uno.uno.uno.dominio: [udp sum ok] 40757+ PTR? 1.1.1.1.en addr.arpa. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, desplazamiento 0, banderas [DF], proto UDP (17), longitud 95)
uno.uno.uno.uno.dominio> 192.168.10.dieciséis.34043: [udp sum ok] 40757 q: PTR? 1.1.1.1.en addr.arpa. 1/0/0 1.1.1.1.en addr.arpa. [26m53s] PTR uno.uno.uno.uno. (67)

ARP

El protocolo de resolución de direcciones se utiliza para descubrir la dirección de la capa de enlace, como una dirección MAC. Está asociado con una dirección de capa de Internet determinada, normalmente una dirección IPv4.

Estamos usando tcpdump para capturar y leer los datos transportados en los paquetes arp. El comando es tan simple como:

$ sudo tcpdump -i wlan0 arp -vvv
tcpdump: escucha en wlan0, tipo de enlace EN10MB (Ethernet), longitud de instantánea 262144 bytes
03:44:12.023668 ARP, Ethernet (longitud 6), IPv4 (longitud 4), Solicitar quién tiene 192.168.10.1 digo 192.168.10.2, longitud 28
03:44:17.140259 ARP, Ethernet (longitud 6), IPv4 (longitud 4), Solicitar quién tiene 192.168.10.21 decir 192.168.10.1, longitud 28
03:44:17.140276 ARP, Ethernet (longitud 6), IPv4 (longitud 4), respuesta 192.168.10.21 es a las 00: 11: 22: 33: 44: 55 (oui desconocido), longitud 28
03:44:42.026393 ARP, Ethernet (longitud 6), IPv4 (longitud 4), Solicitar quién tiene 192.168.10.1 digo 192.168.10.2, longitud 28

ICMP

ICMP, también conocido como Protocolo de mensajes de control de Internet, es un protocolo de apoyo en el conjunto de protocolos de Internet. ICMP se utiliza como protocolo informativo.

Para ver todos los paquetes ICMP en una interfaz, podemos usar este comando:

$ sudo tcpdump icmp -vvv
tcpdump: escucha en wlan0, tipo de enlace EN10MB (Ethernet), longitud de instantánea 262144 bytes
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, desplazamiento 0, banderas [DF], proto ICMP (1), longitud 84)
192.168.10.16> 192.168.10.1: solicitud de eco ICMP, id 47363, seq 1, longitud 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, desplazamiento 0, indicadores [ninguno], proto ICMP (1), longitud 84)
192.168.10.1> 192.168.10.16: respuesta de eco ICMP, id 47363, seq 1, longitud 64
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, desplazamiento 0, banderas [DF], proto ICMP (1), longitud 84)
192.168.10.16> 192.168.10.1: solicitud de eco ICMP, id 47363, seq 2, longitud 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, desplazamiento 0, indicadores [ninguno], proto ICMP (1), longitud 84)
192.168.10.1> 192.168.10.16: respuesta de eco ICMP, id 47363, seq 2, longitud 64

NTP

NTP es un protocolo de red diseñado específicamente para sincronizar la hora en una red de máquinas. Para capturar tráfico en ntp:

$ sudo tcpdump dst puerto 123
04:31:05.547856 IP (tos 0x0, ttl 64, id 34474, desplazamiento 0, banderas [DF], proto UDP (17), longitud 76)
192.168.10.dieciséis.ntp> tiempo-b-wwv.nista.gov.ntp: [udp sum ok] NTPv4, Cliente, longitud 48
Indicador de salto: reloj no sincronizado (192), estrato 0 (no especificado), encuesta 3 (8 s), precisión -6
Retraso de raíz: 1.000000, dispersión de la raíz: 1.000000, ID de referencia: (sin especificar)
Marca de tiempo de referencia: 0.000000000
Marca de tiempo del originador: 0.000000000
Recibir marca de tiempo: 0.000000000
Transmitir marca de tiempo: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Originador - Marca de tiempo de recepción: 0.000000000
Originador - Marca de tiempo de transmisión: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, desplazamiento 0, banderas [ninguno], proto UDP (17), longitud 76)
tiempo-b-wwv.nista.gov.ntp> 192.168.10.dieciséis.ntp: [udp sum ok] NTPv3, servidor, longitud 48
Indicador de salto: (0), Estrato 1 (referencia primaria), encuesta 13 (8192s), precisión -29
Retraso de raíz: 0.000244, Dispersión de la raíz: 0.000488, ID de referencia: NIST
Marca de tiempo de referencia: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Marca de tiempo del originador: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Recibir marca de tiempo: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Transmitir marca de tiempo: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
Originador - Recibir marca de tiempo: +9.480896026
Originador - Marca de tiempo de transmisión: +9.480897141

SMTP

SMTP o Protocolo simple de transferencia de correo se utiliza principalmente para correos electrónicos. Tcpdump puede usar esto para extraer información útil del correo electrónico. Por ejemplo, para extraer destinatarios / remitentes de correo electrónico:

$ sudo tcpdump -n -l puerto 25 | grep -i 'MAIL FROM \ | RCPT TO'

IPv6

IPv6 es la "próxima generación" de IP, que proporciona una amplia gama de direcciones IP. IPv6 ayuda a lograr la salud a largo plazo de Internet.

Para capturar el tráfico IPv6, use el filtro ip6 que especifica los protocolos TCP y UDP usando proto 6 y proto-17.

$ sudo tcpdump -n -i cualquier ip6 -vvv
tcpdump: tipo de enlace de datos LINUX_SLL2
tcpdump: escuchando en cualquier tipo de enlace LINUX_SLL2 (Linux cocinado v2), longitud de instantánea 262144 bytes
04:34:31.847359 lo In IP6 (flowlabel 0xc7cb6, hlim 64, longitud de carga útil UDP (17) del siguiente encabezado: 40) :: 1.49395> :: 1.49395: [bad udp cksum 0x003b -> 0x3587!] UDP, longitud 32
04:34:31.859082 lo In IP6 (flowlabel 0xc7cb6, hlim 64, longitud de carga útil UDP (17) del siguiente encabezado: 32) :: 1.49395> :: 1.49395: [bad udp cksum 0x0033 -> 0xeaef!] UDP, longitud 24
04:34:31.860361 lo In IP6 (flowlabel 0xc7cb6, hlim 64, longitud de carga útil UDP (17) del siguiente encabezado: 40) :: 1.49395> :: 1.49395: [bad udp cksum 0x003b -> 0x7267!] UDP, longitud 32
04:34:31.871100 lo In IP6 (flowlabel 0xc7cb6, hlim 64, longitud de carga útil UDP (17) del siguiente encabezado: 944) :: 1.49395> :: 1.49395: [bad udp cksum 0x03c3 -> 0xf890!] UDP, longitud 936
4 paquetes capturados
12 paquetes recibidos por filtro
0 paquetes descartados por el kernel

El '-c 4' proporciona un recuento de paquetes de hasta 4 paquetes solamente. Podemos especificar el número de paquetes an y capturar n paquetes.

HTTP

El protocolo de transferencia de hipertexto se utiliza para transferir datos desde un servidor web a un navegador para ver páginas web. HTTP usa comunicación de formulario TCP. Específicamente, se usa el puerto TCP 80.

Para imprimir todos los paquetes HTTP IPv4 hacia y desde el puerto 80:

tcpdump: escucha en wlan0, tipo de enlace EN10MB (Ethernet), longitud de instantánea 262144 bytes
03:36:00.602104 IP (tos 0x0, ttl 64, id 722, desplazamiento 0, banderas [DF], proto TCP (6), longitud 60)
192.168.10.21.33586> 192.168.10.1.http: Flags [S], cksum 0xa22b (correcto), seq 2736960993, win 64240, opciones [mss 1460, sackOK, TS val 389882294 ecr 0, nop, wscale 10], longitud 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, desplazamiento 0, banderas [DF], proto TCP (6), longitud 60)
192.168.10.1.http> 192.168.10.21.33586: Banderas [S.], cksum 0x2dcc (correcto), seq 4089727666, ack 2736960994, win 14480, opciones [mss 1460, sackOK, TS val 30996070 ecr 389882294, nop, wscale 3], longitud 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, desplazamiento 0, banderas [DF], proto TCP (6), longitud 52)
192.168.10.21.33586> 192.168.10.1.http: Banderas [.], cksum 0x94e2 (correcto), seq 1, ack 1, win 63, opciones [nop, nop, TS val 389882297 ecr 30996070], longitud 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, desplazamiento 0, banderas [DF], proto TCP (6), longitud 481)

Solicitudes HTTP…

192.168.10.21.33586> 192.168.10.1.http: Banderas [P.], cksum 0x9e5d (correcto), seq 1: 430, ack 1, win 63, opciones [nop, nop, TS val 389882297 ecr 30996070], longitud 429: HTTP, longitud: 429
GET / HTTP / 1.1
Anfitrión: 192.168.10.1
Agente de usuario: Mozilla / 5.0 (Windows NT 10.0; RV: 78.0) Gecko / 20100101 Firefox / 78.0
Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, imagen / webp, * / *; q = 0.8
Aceptar-Idioma: en-US, en; q = 0.5
Aceptar codificación: gzip, desinflar
DNT: 1
Conexión: mantener vivo
Cookie: _TESTCOOKIESUPPORT = 1; SID = c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Solicitudes de actualización inseguras: 1

Y las respuestas también se capturan

192.168.10.1.http> 192.168.10.21.33586: Banderas [P.], cksum 0x84f8 (correcto), seq 1: 523, ack 430, win 1944, opciones [nop, nop, TS val 30996179 ecr 389882297], longitud 522: HTTP, longitud: 522
HTTP / 1.1200 OK
Servidor: servidor web ZTE 1.0 ZTE corp 2015.
Rangos de aceptación: bytes
Conexión: cerrar
Opciones de X-Frame: SAMEORIGIN
Control de caché: sin caché, sin almacenamiento
Longitud del contenido: 138098
Conjunto de cookies: _TESTCOOKIESUPPORT = 1; RUTA = /; HttpOnly
Tipo de contenido: texto / html; juego de caracteres = utf-8
X-Content-Type-Options: nosniff
Política de seguridad de contenido: frame-ancestors 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data :;
Protección X-XSS: 1; modo = bloquear
Set-Cookie: SID =; expira = Thu, 01-Jan-1970 00:00:00 GMT; ruta = /; HttpOnly

TCP

Para capturar paquetes solo de TCP, este comando hará todo el bien:

$ sudo tcpdump -i wlan0 tcp
tcpdump: escucha en wlan0, tipo de enlace EN10MB (Ethernet), longitud de instantánea 262144 bytes
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, desplazamiento 0, indicadores [ninguno], proto TCP (6), longitud 104)
tl-in-f189.1e100.neto.https> 192.168.10.dieciséis.50272: Banderas [P.], cksum 0xc924 (correcto), seq 1377740065: 1377740117, ack 1546363399, win 300, opciones [nop, nop, TS val 13149401 ecr 3051434098], longitud 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, desplazamiento 0, banderas [DF], proto TCP (6), longitud 52)
192.168.10.dieciséis.50272> tl-en-f189.1e100.neto.https: Banderas [.], cksum 0xf898 (correcto), seq 1, ack 52, win 63, opciones [nop, nop, TS val 3051461952 ecr 13149401], longitud 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, desplazamiento 0, banderas [DF], proto TCP (6), longitud 88)
192.168.10.dieciséis.50272> tl-en-f189.1e100.neto.https: Banderas [P.], cksum 0x2531 (correcto), seq 1:37, ack 52, win 63, opciones [nop, nop, TS val 3051463260 ecr 13149401], longitud 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, desplazamiento 0, banderas [DF], proto TCP (6), longitud 88)
192.168.10.dieciséis.50434> hkg12s18-en-f14.1e100.neto.https: Banderas [P.], cksum 0xb21e (correcto), seq 328391782: 328391818, ack 3599854191, win 63, opciones [nop, nop, TS val 3656137742 ecr 2564108387], longitud 36
4 paquetes capturados
4 paquetes recibidos por filtro
0 paquetes descartados por el kernel

Normalmente, la captura de paquetes TCP genera mucho tráfico; puede especificar en detalle sus requisitos agregando filtros a la captura, tales como:

Puerto
Especifica el puerto a monitorear

$ sudo tcpdump -i wlan0 puerto tcp 2222

IP de origen
Para ver paquetes de una fuente específica

$ sudo tcpdump -i wlan0 tcp src 192.168.10.2

IP de destino
Para ver paquetes a un destino específico

$ sudo tcpdump -i wlan0 tcp dst 192.168.10.2

Guardar la captura de paquetes en archivos

Para guardar la captura de paquetes para hacer un análisis más tarde, podemos usar la opción -w de tcpdump que requiere un parámetro de nombre de archivo. Estos archivos se guardan en un formato de archivo pcap (captura de paquetes), que se puede usar para guardar o enviar capturas de paquetes.

Por ejemplo:

$ sudo tcpdump -w / capturado.pcap

Podemos agregar filtros en cuanto a si queremos capturar paquetes TCP, UDP o ICMP, etc.

Leer la captura de paquetes de archivos

Desafortunadamente, no puede leer el archivo guardado a través de comandos comunes de 'leer archivo' como cat, etc. La salida es casi un galimatías, y es difícil saber qué hay en el archivo. '-r' se usa para leer los paquetes guardados en el .pcap, almacenado anteriormente por '-w' u otro software que almacene pcaps:

$ sudo tcpdump -r / salidas.pcap

Esto imprime los datos recopilados de los paquetes capturados en la pantalla del terminal en un formato legible.

Hoja de referencia de tcpdump

Tcpdump se puede utilizar con otros comandos de Linux como grep, sed, etc., para extraer información útil. A continuación, se muestran algunas combinaciones útiles y palabras clave combinadas con tcpdump para obtener información valiosa.

Extraer agentes de usuario HTTP:

$ sudo tcpdump -n | grep "Agente de usuario:"

Las URL solicitadas a través de HTTP se pueden monitorear usando tcpdump como:

$ sudo tcpdump -v -n | egrep -i "POST / | GET / | Host:"

Tú también puedes Extraer contraseñas HTTP en solicitudes POST

$ sudo tcpdump -nn -l | egrep -i "POST / | pwd = | passwd = | contraseña = | Host:"

Las cookies del servidor o del lado del cliente se pueden extraer mediante:

$ sudo tcpdump -n | egrep -i 'Establecer-Cookie | Host: | Cookie:'

Capture solicitudes y respuestas de DNS mediante:

$ sudo tcpdump -i wlp58s0 -s0 puerto 53

Imprima todas las contraseñas de texto sin formato:

$ sudo tcpdump puerto http o puerto ftp o puerto smtp o puerto imap o puerto pop3 o puerto telnet -l -A | egrep -i -B5 'pass = | pwd = | log = | login = | user = | user | username = | pw = | passw = | passwd = | contraseña = | contraseña: | usuario: | nombre de usuario: | contraseña: | iniciar sesión: | pasar '

Filtros Tcpdump comunes

  • -A Muestra paquetes en formato ASCII.
  • -C Cantidad de paquetes a capturar.
  • -contar Imprimir el recuento de paquetes solo al leer un archivo capturado.
  • -mi Imprimir direcciones MAC y encabezados a nivel de enlace.
  • -ho -ayuda Imprime la versión y la información de uso.
  • -versión Mostrar solo la información de la versión.
  • -I Especifique la interfaz de red para capturar en.
  • -K Evite los intentos de verificar las sumas de comprobación de cualquier paquete. Agrega velocidad.
  • -metro Especificar el módulo que se utilizará.
  • -norte No convierta direcciones (i.mi., direcciones de host, números de puerto, etc.) a los nombres.
  • -número Imprima un número de paquete opcional al comienzo de cada línea.
  • -pag Prohibir que la interfaz entre en modo promiscuo.
  • -Q Elija la dirección para capturar los paquetes. Enviar o recibir.
  • -q Salida silenciosa / rápida. Imprime menos información. Las salidas son más cortas.
  • -r Se usa para leer paquetes de un pcap .
  • -t No imprima una marca de tiempo en cada línea de volcado.
  • -v Imprime más información sobre la salida.
  • -w Escriba los paquetes sin procesar en el archivo.
  • -X Imprime salida ASCII.
  • -X Imprime ASCII con hexadecimal.
  • -interfaces de lista Muestra todas las interfaces de red disponibles donde tcpdump puede capturar paquetes.

Cesación

Tcpdump ha sido una herramienta muy utilizada en la investigación y aplicaciones de Seguridad / Redes. El único inconveniente tcpdump tiene 'No GUI', pero es demasiado bueno para mantenerse fuera de las listas principales. Como escribe Daniel Miessler, “los analizadores de protocolo como Wireshark son geniales, pero si realmente quieres dominar el paquete-fu, primero debes convertirte en uno con tcpdump."

Tutorial de OpenTTD
OpenTTD es uno de los juegos de simulación empresarial más populares que existen. En este juego, necesitas crear un maravilloso negocio de transporte....
SuperTuxKart para Linux
SuperTuxKart es un gran título diseñado para ofrecerte la experiencia Mario Kart de forma gratuita en tu sistema Linux. Es bastante desafiante y diver...
Tutorial de Battle for Wesnoth
The Battle for Wesnoth es uno de los juegos de estrategia de código abierto más populares que puedes jugar en este momento. Este juego no solo ha esta...