GNU/Linux >> Tutoriales Linux >  >> Linux

Comando tcpdump de Linux

tcpdump es una utilidad de línea de comandos que nos permite capturar y analizar el tráfico de red que pasa por nuestro sistema. Dependiendo de las opciones de filtrado, podemos usar esta herramienta para ayudar de manera efectiva a solucionar cualquier tipo de problema de red. Es una herramienta muy utilizada por los ingenieros administradores de sistemas para estas funciones.

En este tutorial, analizaremos algunas de las formas de usar tcpdump , pero no todos. Esto se debe a que simplemente hay demasiadas opciones de filtrado involucradas en este comando, y no es posible cubrirlas todas. Aquí solo veremos algunas de las opciones comúnmente utilizadas. Puede encontrar el resto en la página del manual.

Instalando el comando tcpdump

Puede verificar si su sistema tiene el tcpdump comando, escribiendo

tcpdump --version

Si el resultado muestra que no está instalado, puede obtenerlo directamente usando el administrador de paquetes de su sistema.

NOTA :Ya que estaremos capturando paquetes, necesitamos permisos elevados. (sudo es requerido). Estaremos prefijando todo tcpdump comandos con sudo como resultado.

Lista de interfaces para captura de paquetes

Antes de capturar paquetes de forma activa, veremos las interfaces disponibles para tcpdump .

Podemos listar las interfaces usando -D (Mostrar) opción.

sudo tcpdump -D

Obtendrá una lista de todas las interfaces disponibles en su máquina. Esto dependerá de un sistema a otro, por lo que el mío tiene otras interfaces como Docker , ya que se está ejecutando el servicio Docker, además de las típicas interfaces de red.

La interfaz especial any permite capturar en cualquier interfaz activa.

Ahora que conocemos las interfaces disponibles en nuestra máquina, ¡comencemos a capturar paquetes!

Capturar paquetes usando tcpdump

Captura todos los paquetes en cualquier interfaz ejecutando este comando:

sudo tcpdump -i any

Esto especificará que la interfaz sea cualquiera , la interfaz especial mencionada anteriormente.

tcpdump continúa capturando paquetes hasta que recibe una interrupción señal. Puede interrumpir la captura presionando Ctrl+C .

La salida enumerará todas las capturas de paquetes hasta que se recibió la señal de interrupción para terminar tcpdump .

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:49:32.841984 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132693749:4132693857, ack 3344962610, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 108
10:49:32.842057 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
10:49:32.842101 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 144:260, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 116
10:49:32.842135 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 260:296, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
...
...
^C
264 packets captured
361 packets received by filter
91 packets dropped by kernel

Como puede observar, tcpdump había capturado 264 paquetes. Por ejemplo, ya que estoy conectado a este servidor usando ssh , tcpdump capturó todos estos paquetes.

Limitar el número de capturas de paquetes

Para limitar la cantidad de paquetes capturados y detener tcpdump , use el -c (límite de captura) opción:

sudo tcpdump -i any -c 2

Esto hará que el comando tcpdump deje de capturar automáticamente después de 2 paquetes. No necesariamente necesitaremos usar la señal de interrupción para terminarlo manualmente en este caso.

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:57:31.284198 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132754245:4132754353, ack 3344963698, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 108
10:57:31.284275 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 36
2 packets captured
16 packets received by filter
8 packets dropped by kernel

Esta opción puede ser bastante útil para monitorear las conexiones de red y solucionar cualquier problema, si hay problemas de red.

Desactivar nombre y resolución de puerto

Por defecto, tcpdump El comando resuelve direcciones IP y puertos en nombres (como vultr.com.ssh , que realiza la resolución de nombres a partir de las direcciones IP y los puertos).

Al solucionar problemas de red, a menudo es más fácil usar las direcciones IP y los números de puerto; Podemos deshabilitar la resolución de nombres usando la opción -n y resolución de puertos con -nn .

sudo tcpdump -i any -c 2 -nn

El comando anterior captura 2 paquetes en cualquier interfaz y deshabilita la resolución del puerto.

Entonces, la salida ahora detendrá cualquier resolución de nombres y simplemente devolverá las direcciones IP y los números de puerto.

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
11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108
11:00:36.459982 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 36
2 packets captured
8 packets received by filter
0 packets dropped by kernel

Aquí, examinemos una línea de la salida.

11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108

Este es un TCP típico captura de paquetes Se puede hacer referencia a otros paquetes y formatos de protocolo en la página del manual del comando tcpdump.

El primer campo, 11:00:36.459922 , representa la marca de tiempo del paquete recibido según el reloj local.

A continuación, IP representa el protocolo de la capa de red; en este caso, IPv4 . Para IPv6 paquetes, el valor es IP6 .

El siguiente campo, 111.11.111.11.22 , es la dirección IP y el puerto de origen. A esto le sigue la dirección IP y el puerto de destino, representado por 123.45.678.90.48006 .

Ahora que sabemos cómo es el formato de salida básico, analicemos algunas opciones de filtrado para tcpdump

Paquetes de filtrado

Uno de tcpdump La característica más poderosa del comando 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.

Filtro basado en Protocolo

Para filtrar paquetes según el protocolo, debemos especificar el protocolo en el comando.

Para capturar ICMP solo paquetes, podemos filtrar según ICMP protocolo.

sudo tcpdump -i any -c 5 icmp

Desde el ping el comando usa ICMP paquetes, podemos analizar los paquetes entrantes debido a ping desde otra máquina.

Hagamos ping a nuestra máquina actual y capturemos los paquetes de ping entrantes.

Abra una sesión de terminal en otra máquina y escriba

ping IP_ADDRESS_MACHINE_1

Ahora, en nuestro tcpdump sesión de terminal, ahora podemos ver que captura esos paquetes de respuesta de ping 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
11:18:47.947475 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 1, length 64
11:18:47.947554 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 1, length 64
11:18:48.947669 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 2, length 64
11:18:48.947752 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 2, length 64
11:18:49.947853 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 3, length 64
5 packets captured
6 packets received by filter
0 packets dropped by kernel

Aquí, 123.45.678.90 es la dirección IP de la máquina (Máquina 2) que envía ping a nuestro tcpdump sistema y 111.11.111.11 es la dirección IP de la máquina de filtrado de paquetes (Máquina 1).

Desde que estaba usando ssh para enviar las solicitudes de ping, hay una resolución de dominio (pero no una resolución de nombre) a vultr.com .

Filtro basado en Host

Para limitar la captura a solo paquetes relacionados con un host específico, podemos usar el host filtrar

sudo tcpdump -i any -c5 -nn host 192.168.1.2

En este ejemplo, tcpdump captura y muestra solo paquetes hacia y desde el host 192.168.1.2 .

Filtro basado en Puerto

Para filtrar paquetes según el servicio o puerto deseado, use el port filtrar. Por ejemplo, capture paquetes relacionados con una sesión ssh usando este comando (puerto 22 filtrado):

sudo tcpdump -i any -c5 -nn port 22

Filtro basado en 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.1.2

sudo tcpdump -i any -c 5 -nn src 192.168.1.2

Podemos usar dst para filtrar también por IP de destino/nombre de host.

sudo tcpdump -i any -c 5 -nn src 172.168.1.2

Guardar capturas de paquetes

Podemos guardar los resultados de las capturas de paquetes en un archivo para su posterior análisis.

Para guardar paquetes en un archivo en lugar de mostrarlos en la pantalla, use la opción -w :

sudo tcpdump -i any -c 5 -nn -w sample.pcap port 22

Este comando guarda la salida en un archivo llamado sample.pcap . El .pcap la extensión significa "captura de paquetes" y es la convención para este formato de archivo.

Conclusión

En este tutorial, aprendimos cómo podríamos realizar la captura y el filtrado de paquetes en función de diferentes opciones, utilizando el tcpdump comando.


Linux
  1. Cómo capturar y analizar paquetes con el comando tcpdump en Linux

  2. comando linux mv

  3. Linux du comando

  4. Comando IP de Linux

  5. Comando cd de linux

Comando de fecha en Linux

Comando W en Linux

Comando Tcpdump en Linux

Al mando en Linux

Comando Df en Linux

Analizador de paquetes:15 ejemplos de comandos TCPDUMP