En mi experiencia como administrador de sistemas, a menudo he encontrado que los problemas de conectividad de red son difíciles de solucionar. Para esas situaciones, tcpdump es un gran aliado.
Tcpdump es una utilidad de línea de comandos que le permite capturar y analizar el tráfico de red que pasa por su sistema. A menudo se usa para ayudar a solucionar problemas de red, así como también como una herramienta de seguridad.
Una herramienta poderosa y versátil que incluye muchas opciones y filtros, tcpdump puede usarse en una variedad de casos. Dado que es una herramienta de línea de comandos, es ideal para ejecutarse en servidores o dispositivos remotos para los que no se dispone de una GUI, para recopilar datos que se pueden analizar más tarde. También se puede iniciar en segundo plano o como un trabajo programado usando herramientas como cron.
En este artículo, veremos algunas de las características más comunes de tcpdump.
Tcpdump se incluye con varias distribuciones de Linux, por lo que es probable que ya lo tenga instalado. Compruebe si tcpdump está instalado en su sistema con el siguiente comando:
Si tcpdump no está instalado, puede instalarlo pero usando el administrador de paquetes de su distribución. Por ejemplo, en CentOS o Red Hat Enterprise Linux, así:
Está listo para comenzar a capturar algunos paquetes.
Para capturar paquetes para la resolución de problemas o el análisis, tcpdump requiere permisos elevados, por lo que en los siguientes ejemplos, la mayoría de los comandos tienen el prefijo sudo
.
En el ejemplo anterior, puede ver todas las interfaces disponibles en mi máquina. La interfaz especial any
permite capturar en cualquier interfaz activa.
Usémoslo para comenzar a capturar algunos paquetes. Capture todos los paquetes en cualquier interfaz ejecutando este comando:
Tcpdump continúa capturando paquetes hasta que recibe una señal de interrupción. Puede interrumpir la captura presionando Ctrl+C
. Como puede ver en este ejemplo, tcpdump
capturó más de 9.000 paquetes. En este caso, ya que estoy conectado a este servidor usando ssh
, tcpdump capturó todos estos paquetes. Para limitar la cantidad de paquetes capturados y detener tcpdump
, use el -c
(para contar ) opción:
De forma predeterminada, tcpdump resuelve las direcciones IP y los puertos en nombres, como se muestra en el ejemplo anterior. Al solucionar problemas de red, a menudo es más fácil usar las direcciones IP y los números de puerto; deshabilite la resolución de nombres usando la opción -n
y resolución de puerto con -nn
:
Como se muestra arriba, la salida de la captura ahora muestra las direcciones IP y los números de puerto. Esto también evita que tcpdump emita búsquedas de DNS, lo que ayuda a reducir el tráfico de red mientras soluciona problemas de red.
Ahora que puede capturar paquetes de red, exploremos qué significa este resultado.
Tcpdump es capaz de capturar y decodificar muchos protocolos diferentes, como TCP, UDP, ICMP y muchos más. Si bien no podemos cubrirlos todos aquí, para ayudarlo a comenzar, exploremos el paquete TCP. Puede encontrar más detalles sobre los diferentes formatos de protocolo en las páginas del manual de tcpdump. Un paquete TCP típico capturado por tcpdump se ve así:
Los campos pueden variar según el tipo de paquete que se envíe, pero este es el formato general.
Valor | Tipo de bandera | Descripción |
S | SYN | Inicio de conexión |
F | FIN | Finalización de la conexión |
P | EMPUJAR | Envío de datos |
R | PRIMERA | Restablecimiento de conexión |
. | RECONOCIMIENTO | Reconocimiento |
Este campo también puede ser una combinación de estos valores, como [S.]
para un SYN-ACK
paquete.
El siguiente es el número de secuencia de los datos contenidos en el paquete. Para el primer paquete capturado, este es un número absoluto. Los paquetes subsiguientes usan un número relativo para que sea más fácil de seguir. En este ejemplo, la secuencia es seq 196:568,
lo que significa que este paquete contiene los bytes 196 a 568 de este flujo.
Esto es seguido por el número de acuse de recibo:ack 1
. En este caso, es 1 ya que este es el lado que envía datos. Para el lado que recibe datos, este campo representa el siguiente byte esperado (datos) en este flujo. Por ejemplo, el número de acuse de recibo para el próximo paquete en este flujo sería 568.
El siguiente campo es el tamaño de la ventana win 309
, que representa el número de bytes disponibles en el búfer de recepción, seguido de opciones de TCP como MSS (Tamaño máximo de segmento) o Escala de ventana. Para obtener detalles sobre las opciones del protocolo TCP, consulte los parámetros del Protocolo de control de transmisión (TCP).
Finalmente, tenemos la longitud del paquete, length 372
, que representa la longitud, en bytes, de los datos de carga útil. La longitud es la diferencia entre el último y el primer byte del número de secuencia.
Ahora, aprendamos a filtrar paquetes para reducir los resultados y facilitar la resolución de problemas específicos.
4. Filtrado de paquetes
Como se mencionó anteriormente, tcpdump puede capturar demasiados paquetes, algunos de los cuales ni siquiera están relacionados con el problema que está solucionando. Por ejemplo, si está solucionando un problema de conectividad con un servidor web, no está interesado en el tráfico SSH, por lo que eliminar los paquetes SSH de la salida facilita el trabajo en el problema real.
Una de las funciones más potentes de tcpdump es su capacidad para filtrar los paquetes capturados utilizando una variedad de parámetros, como direcciones IP de origen y destino, puertos, protocolos, etc. Veamos algunos de los más comunes.
Protocolo
Para filtrar paquetes según el protocolo, especificando el protocolo en la línea de comando. Por ejemplo, capture paquetes ICMP solo usando este comando:
$ sudo tcpdump -i any -c5 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
En una terminal diferente, intente hacer ping a otra máquina:
$ ping opensource.com
PING opensource.com (54.204.39.132) 56(84) bytes of data.
64 bytes from ec2-54-204-39-132.compute-1.amazonaws.com (54.204.39.132): icmp_seq=1 ttl=47 time=39.6 ms
De vuelta en la captura de tcpdump, observe que tcpdump captura y muestra solo los paquetes relacionados con ICMP. En este caso, tcpdump no muestra los paquetes de resolución de nombres que se generaron al resolver el nombre opensource.com
:
09:34:20.136766 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 1, length 64
09:34:20.176402 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 1, length 64
09:34:21.140230 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 2, length 64
09:34:21.180020 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 2, length 64
09:34:22.141777 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 3, length 64
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Anfitrión
Limite la captura solo a paquetes relacionados con un host específico mediante el host
filtro:
$ sudo tcpdump -i any -c5 -nn host 54.204.39.132
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:54:20.042023 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [S], seq 1375157070, win 29200, options [mss 1460,sackOK,TS val 122350391 ecr 0,nop,wscale 7], length 0
09:54:20.088127 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [S.], seq 1935542841, ack 1375157071, win 28960, options [mss 1460,sackOK,TS val 522713542 ecr 122350391,nop,wscale 9], length 0
09:54:20.088204 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122350437 ecr 522713542], length 0
09:54:20.088734 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122350438 ecr 522713542], length 112: HTTP: GET / HTTP/1.1
09:54:20.129733 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [.], ack 113, win 57, options [nop,nop,TS val 522713552 ecr 122350438], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
En este ejemplo, tcpdump captura y muestra solo paquetes hacia y desde el host 54.204.39.132
.
Puerto
Para filtrar paquetes según el servicio o puerto deseado, use el port
filtrar. Por ejemplo, capture paquetes relacionados con un servicio web (HTTP) usando este comando:
$ sudo tcpdump -i any -c5 -nn port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:58:28.790548 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [S], seq 1745665159, win 29200, options [mss 1460,sackOK,TS val 122599140 ecr 0,nop,wscale 7], length 0
09:58:28.834026 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [S.], seq 4063583040, ack 1745665160, win 28960, options [mss 1460,sackOK,TS val 522775728 ecr 122599140,nop,wscale 9], length 0
09:58:28.834093 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122599183 ecr 522775728], length 0
09:58:28.834588 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122599184 ecr 522775728], length 112: HTTP: GET / HTTP/1.1
09:58:28.878445 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [.], ack 113, win 57, options [nop,nop,TS val 522775739 ecr 122599184], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
IP de origen/nombre de host
También puede filtrar paquetes según la dirección IP o el nombre de host de origen o destino. Por ejemplo, para capturar paquetes del host 192.168.122.98
:
$ sudo tcpdump -i any -c5 -nn src 192.168.122.98
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:02:15.220824 IP 192.168.122.98.39436 > 192.168.122.1.53: 59332+ A? opensource.com. (32)
10:02:15.220862 IP 192.168.122.98.39436 > 192.168.122.1.53: 20749+ AAAA? opensource.com. (32)
10:02:15.364062 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [S], seq 1108640533, win 29200, options [mss 1460,sackOK,TS val 122825713 ecr 0,nop,wscale 7], length 0
10:02:15.409229 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [.], ack 669337581, win 229, options [nop,nop,TS val 122825758 ecr 522832372], length 0
10:02:15.409667 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [P.], seq 0:112, ack 1, win 229, options [nop,nop,TS val 122825759 ecr 522832372], length 112: HTTP: GET / HTTP/1.1
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Observe que tcpdumps capturó paquetes con la dirección IP de origen 192.168.122.98
para múltiples servicios como resolución de nombres (puerto 53) y HTTP (puerto 80). Los paquetes de respuesta no se muestran porque su IP de origen es diferente.
Por el contrario, puede utilizar el dst
filtrar para filtrar por IP de destino/nombre de host:
$ sudo tcpdump -i any -c5 -nn dst 192.168.122.98
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:05:03.572931 IP 192.168.122.1.53 > 192.168.122.98.47049: 2248 1/0/0 A 54.204.39.132 (48)
10:05:03.572944 IP 192.168.122.1.53 > 192.168.122.98.47049: 33770 0/0/0 (32)
10:05:03.621833 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [S.], seq 3474204576, ack 3256851264, win 28960, options [mss 1460,sackOK,TS val 522874425 ecr 122993922,nop,wscale 9], length 0
10:05:03.667767 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [.], ack 113, win 57, options [nop,nop,TS val 522874436 ecr 122993972], length 0
10:05:03.672221 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 522874437 ecr 122993972], length 642: HTTP: HTTP/1.1 302 Found
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Expresiones complejas
También puede combinar filtros usando los operadores lógicos and
y or
para crear expresiones más complejas. Por ejemplo, para filtrar paquetes desde la dirección IP de origen 192.168.122.98
y solo servicio HTTP, use este comando:
$ sudo tcpdump -i any -c5 -nn src 192.168.122.98 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:08:00.472696 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [S], seq 2712685325, win 29200, options [mss 1460,sackOK,TS val 123170822 ecr 0,nop,wscale 7], length 0
10:08:00.516118 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 268723504, win 229, options [nop,nop,TS val 123170865 ecr 522918648], length 0
10:08:00.516583 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [P.], seq 0:112, ack 1, win 229, options [nop,nop,TS val 123170866 ecr 522918648], length 112: HTTP: GET / HTTP/1.1
10:08:00.567044 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 123170916 ecr 522918661], length 0
10:08:00.788153 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [F.], seq 112, ack 643, win 239, options [nop,nop,TS val 123171137 ecr 522918661], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Puede crear expresiones más complejas agrupando el filtro con paréntesis. En este caso, encierre toda la expresión de filtro entre comillas para evitar que el shell las confunda con expresiones de shell:
$ sudo tcpdump -i any -c5 -nn "port 80 and (src 192.168.122.98 or src 54.204.39.132)"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:10:37.602214 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [S], seq 871108679, win 29200, options [mss 1460,sackOK,TS val 123327951 ecr 0,nop,wscale 7], length 0
10:10:37.650651 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [S.], seq 854753193, ack 871108680, win 28960, options [mss 1460,sackOK,TS val 522957932 ecr 123327951,nop,wscale 9], length 0
10:10:37.650708 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 0
10:10:37.651097 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 112: HTTP: GET / HTTP/1.1
10:10:37.692900 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [.], ack 113, win 57, options [nop,nop,TS val 522957942 ecr 123328000], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
En este ejemplo, estamos filtrando paquetes solo para el servicio HTTP (puerto 80) y las direcciones IP de origen 192.168.122.98
o 54.204.39.132
. Esta es una forma rápida de examinar ambos lados del mismo flujo.
5. Comprobación del contenido del paquete
En los ejemplos anteriores, estamos revisando solo los encabezados de los paquetes para obtener información como el origen, los destinos, los puertos, etc. A veces, esto es todo lo que necesitamos para solucionar los problemas de conectividad de la red. A veces, sin embargo, necesitamos inspeccionar el contenido del paquete para asegurarnos de que el mensaje que enviamos contiene lo que necesitamos o que recibimos la respuesta esperada. Para ver el contenido del paquete, tcpdump proporciona dos banderas adicionales:-X
para imprimir contenido en hexadecimal y ASCII o -A
para imprimir el contenido en ASCII.
Por ejemplo, inspeccione el contenido HTTP de una solicitud web como esta:
$ sudo tcpdump -i any -c10 -nn -A port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
13:02:14.871803 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [S], seq 2546602048, win 29200, options [mss 1460,sackOK,TS val 133625221 ecr 0,nop,wscale 7], length 0
E..<..@[email protected].'[email protected]............
............................
13:02:14.910734 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [S.], seq 1877348646, ack 2546602049, win 28960, options [mss 1460,sackOK,TS val 525532247 ecr 133625221,nop,wscale 9], length 0
E..<..@./..a6.'...zb.P..o..&...A..q a..........
.R.W....... ................
13:02:14.910832 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 133625260 ecr 525532247], length 0
E..4..@[email protected].'....P...Ao..'...........
.....R.W................
13:02:14.911808 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 133625261 ecr 525532247], length 112: HTTP: GET / HTTP/1.1
E.....@[email protected].'....P...Ao..'...........
.....R.WGET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: opensource.com
Connection: Keep-Alive
................
13:02:14.951199 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [.], ack 113, win 57, options [nop,nop,TS val 525532257 ecr 133625261], length 0
E..4.F@./.."6.'...zb.P..o..'.......9.2.....
.R.a....................
13:02:14.955030 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 525532258 ecr 133625261], length 642: HTTP: HTTP/1.1 302 Found
E....G@./...6.'...zb.P..o..'.......9.......
.R.b....HTTP/1.1 302 Found
Server: nginx
Date: Sun, 23 Sep 2018 17:02:14 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 207
X-Content-Type-Options: nosniff
Location: https://opensource.com/
Cache-Control: max-age=1209600
Expires: Sun, 07 Oct 2018 17:02:14 GMT
X-Request-ID: v-6baa3acc-bf52-11e8-9195-22000ab8cf2d
X-Varnish: 632951979
Age: 0
Via: 1.1 varnish (Varnish/5.2)
X-Cache: MISS
Connection: keep-alive
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://opensource.com/%3C/span%3Ehttps%3A%3Cspan%20class%3D"sy0">//opensource.com/">here</a>.</p>
</body></html>
................
13:02:14.955083 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 133625304 ecr 525532258], length 0
E..4..@[email protected].'....P....o..............
.....R.b................
13:02:15.195524 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 133625545 ecr 525532258], length 0
E..4..@[email protected].'....P....o..............
.....R.b................
13:02:15.236592 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 525532329 ecr 133625545], length 0
E..4.H@./.. 6.'...zb.P..o..........9.I.....
.R......................
13:02:15.236656 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 133625586 ecr 525532329], length 0
E..4..@[email protected].'....P....o..............
.....R..................
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Esto es útil para solucionar problemas con las llamadas a la API, suponiendo que las llamadas utilicen HTTP simple. Para conexiones encriptadas, esta salida es menos útil.
6. Guardar capturas en un archivo
Otra característica útil proporcionada por tcpdump es la capacidad de guardar la captura en un archivo para que pueda analizar los resultados más tarde. Esto le permite capturar paquetes en modo por lotes durante la noche, por ejemplo, y verificar los resultados por la mañana. También ayuda cuando hay demasiados paquetes para analizar, ya que la captura en tiempo real puede ocurrir demasiado rápido.
Para guardar paquetes en un archivo en lugar de mostrarlos en la pantalla, use la opción -w
(para escribir ):
$ sudo tcpdump -i any -c10 -nn -w webserver.pcap port 80
[sudo] password for ricardo:
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Este comando guarda la salida en un archivo llamado webserver.pcap
. El .pcap
extensión significa "captura de paquetes" y es la convención para este formato de archivo.
Como se muestra en este ejemplo, no se muestra nada en la pantalla y la captura finaliza después de capturar 10 paquetes, según la opción -c10
. Si desea recibir comentarios para asegurarse de que se capturan los paquetes, use la opción -v
.
Tcpdump crea un archivo en formato binario para que no pueda abrirlo simplemente con un editor de texto. Para leer el contenido del archivo, ejecute tcpdump con -r
(para leer ) opción:
$ tcpdump -nn -r webserver.pcap
reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
13:36:57.679494 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [S], seq 3709732619, win 29200, options [mss 1460,sackOK,TS val 135708029 ecr 0,nop,wscale 7], length 0
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
13:36:57.719005 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 0
13:36:57.719186 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 112: HTTP: GET / HTTP/1.1
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
13:36:57.760182 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 135708109 ecr 526052959], length 0
13:36:57.977602 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 135708327 ecr 526052959], length 0
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0
13:36:58.022132 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 135708371 ecr 526053025], length 0
$
Dado que ya no está capturando los paquetes directamente desde la interfaz de red, sudo
no es necesario leer el archivo.
También puede usar cualquiera de los filtros que hemos discutido para filtrar el contenido del archivo, tal como lo haría con datos en tiempo real. Por ejemplo, inspeccione los paquetes en el archivo de captura desde la dirección IP de origen 54.204.39.132
ejecutando este comando:
$ tcpdump -nn -r webserver.pcap src 54.204.39.132
reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0
¿Qué sigue?
Estas características básicas de tcpdump lo ayudarán a comenzar con esta poderosa y versátil herramienta. Para obtener más información, consulte el sitio web de tcpdump y las páginas man.
La interfaz de línea de comandos tcpdump proporciona una gran flexibilidad para capturar y analizar el tráfico de red. If you need a graphical tool to understand more complex flows, look at Wireshark.
One benefit of Wireshark is that it can read .pcap
files captured by tcpdump. You can use tcpdump to capture packets in a remote machine that does not have a GUI and analyze the result file with Wireshark, but that is a topic for another day.
This article was originally published in October 2018 and has been updated by Seth Kenlon.