Analizar tramas Ethernet con tcpdump en Linux

CompTIABeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá los fundamentos del análisis de tráfico de red en un sistema Linux utilizando la potente herramienta de línea de comandos tcpdump. El objetivo principal es capturar e inspeccionar tramas Ethernet en la capa de enlace de datos, proporcionando experiencia práctica sobre cómo se estructura la información para su transmisión a través de una red local. Adquirirá habilidades prácticas para identificar e interpretar comunicaciones de red de bajo nivel.

Comenzará preparando su entorno, lo que incluye la instalación de tcpdump y la identificación de su interfaz de red activa. A continuación, iniciará una captura de paquetes en vivo para monitorizar la actividad de red en tiempo real. Para comprender diferentes patrones de comunicación, generará tráfico unicast utilizando el comando ping y tráfico broadcast a través de ARP. Al examinar la salida capturada, aprenderá a analizar las cabeceras de las tramas Ethernet y a distinguir entre direcciones MAC unicast y broadcast.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 98%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Instalar tcpdump e Identificar su Interfaz de Red

En este paso, preparará su entorno para el análisis de red. Esto implica dos acciones clave: instalar tcpdump, un potente analizador de paquetes de línea de comandos, e identificar el nombre de su interfaz de red principal. Un analizador de paquetes le permite "ver" los datos que viajan por la red, y tcpdump necesita saber qué conexión de red específica monitorizar.

Primero, aseguremos que tcpdump esté instalado. Aunque es una herramienta estándar, es una buena práctica confirmar su presencia. Utilizaremos el gestor de paquetes apt. El comando sudo apt update sincroniza su lista de paquetes con los repositorios de software, y sudo apt install tcpdump -y instala la herramienta, con -y confirmando automáticamente la instalación.

Ejecute los siguientes comandos en su terminal:

sudo apt update
sudo apt install tcpdump -y

Una vez completada la instalación, puede verificarla comprobando la versión de tcpdump.

tcpdump --version

Debería ver una salida similar a esta, confirmando que la herramienta está lista para usarse. Los números de versión pueden variar.

tcpdump version 4.99.x
libpcap version 1.10.x
OpenSSL 3.0.x [Date]

A continuación, necesita encontrar el nombre de la interfaz de red que va a monitorizar. Un ordenador puede tener múltiples interfaces (por ejemplo, para Ethernet cableada, Wi-Fi o redes virtuales). Utilizaremos el comando ip addr para listar todas las interfaces de red disponibles y sus configuraciones.

Ejecute este comando:

ip addr

La salida listará varias interfaces. Usted está buscando su interfaz activa principal. A menudo se llama eth0 o enp0s3. Busque una entrada que tenga una dirección inet (su dirección IP) y que esté en estado UP.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:01:be:b3 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.8/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159786sec preferred_lft 1892159786sec
    inet6 fe80::216:3eff:fe01:beb3/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:8a:88:cd:da brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

De la salida de ejemplo anterior, el nombre de la interfaz es eth0. Tome nota del nombre de su interfaz específica, ya que lo necesitará en el siguiente paso.

Iniciar una Captura Amplia y Observar el Tráfico

En este paso, comenzará a capturar tráfico de red en vivo. La unidad fundamental de datos en la Capa de Enlace de Datos (Capa 2) es la trama Ethernet. Cada trama actúa como un sobre digital, que contiene no solo los datos que se envían, sino también información de direccionamiento crucial como las direcciones MAC de origen y destino. Utilizaremos tcpdump con la opción -e para ver específicamente estos detalles de la Capa 2. Esta captura inicial no tendrá filtros para darle una idea de toda la actividad en su red.

Ahora, comencemos el proceso de captura. Necesitará el nombre de la interfaz que identificó en el paso anterior (por ejemplo, eth0). La captura de paquetes de red requiere privilegios administrativos, por eso usamos sudo. También agregaremos la bandera -n para evitar que tcpdump resuelva las direcciones IP a nombres de host, y -q para hacer la salida más limpia.

En su terminal, ejecute el comando tcpdump. Recuerde reemplazar eth0 con el nombre real de su interfaz.

## Reemplace eth0 con el nombre real de su interfaz del Paso 1
sudo tcpdump -i eth0 -e -n -q

Analicemos este comando:

  • sudo: Ejecuta el comando con privilegios de superusuario, que son necesarios para acceder a las interfaces de red de esta manera.
  • tcpdump: La herramienta de captura de paquetes en sí.
  • -i eth0: La bandera -i especifica la interfaz de red en la que escuchar.
  • -e: Esta opción es crucial para nuestro laboratorio. Le dice a tcpdump que imprima la cabecera de enlace (Ethernet) para cada paquete, que incluye las direcciones MAC de origen y destino.
  • -n: Evita la resolución de nombres de host, mostrando direcciones IP en bruto.
  • -q: Modo "quiet" (silencioso), que reduce la cantidad de salida específica del protocolo.

Después de ejecutar el comando, tcpdump comenzará a escuchar. Verá un mensaje inicial y luego su terminal comenzará a mostrar cualquier paquete que capture. Dependiendo de su red, puede ver mucho tráfico que no es relevante para lo que queremos hacer. Esto podría incluir solicitudes ARP, servicios en segundo plano, etc.

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:24:00.123456 ARP, Request who-has 172.16.50.1 tell 172.16.50.254, length 28
10:24:01.567890 IP6 fe80::... > ff02::...: ICMP6, router advertisement, length 80

Deje que esto se ejecute durante unos segundos para observar la actividad, luego detenga la captura presionando Ctrl+C. Esto demuestra el desafío de encontrar información específica en un entorno concurrido.

Refinar la Captura con un Filtro ICMP

Como vio en el último paso, una captura sin filtros puede ser ruidosa. Para centrarnos en el tráfico específico que queremos analizar, podemos usar un filtro de captura. Dado que utilizaremos el comando ping, que usa el protocolo ICMP, le diremos a tcpdump que solo capture paquetes ICMP. También agregaremos la bandera -n para evitar que tcpdump resuelva las direcciones IP a nombres de host y -q para hacer la salida más limpia. Esto hace que la salida sea mucho más fácil de analizar.

Ahora, inicie tcpdump nuevamente, pero esta vez agregue el filtro icmp y las nuevas banderas.

## Reemplace eth0 con el nombre real de su interfaz del Paso 1
sudo tcpdump -i eth0 -e -n -q 'icmp'

La parte 'icmp' del comando es el filtro. Instruye a tcpdump a ignorar todos los paquetes excepto aquellos que usan el protocolo ICMP.

Después de ejecutar este comando, tcpdump estará escuchando nuevamente, pero la terminal ahora debería estar en silencio, ya que está esperando específicamente el tráfico ICMP.

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

Importante: ¡Deje esta terminal en ejecución! tcpdump necesita permanecer activo para capturar el tráfico que generaremos en el siguiente paso. Necesitará abrir una nueva pestaña o ventana de terminal para los comandos subsiguientes. Puede hacer esto haciendo clic en el ícono + en el panel de la terminal.

Generar Tráfico Unicast con 'ping' y Analizar Cabeceras de Frame

En este paso, generará y observará tráfico unicast. Unicast es un método de comunicación uno a uno donde una trama se envía desde una única fuente a un único destino en la red. Para hacer esto, utilizará la utilidad común ping, que envía paquetes ICMP (Internet Control Message Protocol) a un host de destino para verificar la conectividad. Estos paquetes están encapsulados dentro de tramas Ethernet para su transmisión.

Con tcpdump (con el filtro icmp) todavía en ejecución en su primera terminal, necesita generar algo de actividad de red.

Abra una nueva terminal haciendo clic en el ícono + en el panel de la terminal. En esta nueva terminal, use el comando ping para enviar algunos paquetes a google.com. Usaremos la opción -c 4 para enviar exactamente cuatro paquetes automáticamente y luego detenernos.

ping -c 4 google.com

Verá una salida en su segunda terminal similar a esta, mostrando las respuestas del servidor de Google:

PING google.com (142.250.191.174) 56(84) bytes of data.
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=1 ttl=115 time=1.58 ms
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=2 ttl=115 time=1.55 ms
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=3 ttl=115 time=1.62 ms
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=4 ttl=115 time=1.51 ms

--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.510/1.565/1.621/0.040 ms

Ahora, vuelva a su primera terminal donde tcpdump está en ejecución. Verá varias líneas nuevas de salida que fueron capturadas mientras estaba haciendo ping.

Analicemos uno de los paquetes salientes de "echo request". Se verá algo como esto (las direcciones MAC e IP diferirán en su sistema):

10:25:01.123456 00:16:3e:01:be:b3 > de:ad:be:ef:00:01, ethertype IPv4 (0x0800), length 98: 172.16.50.8 > 142.250.191.174: ICMP echo request, id 123, seq 1, length 64

Aquí está lo que significa esta línea:

  • 10:25:01.123456: La marca de tiempo de cuándo se capturó la trama.
  • 00:16:3e:01:be:b3: La dirección MAC de origen (la MAC de su VM).
  • >: Un separador que indica la dirección del tráfico (de origen a destino).
  • de:ad:be:ef:00:01: La dirección MAC de destino. Tenga en cuenta que esta es probablemente la puerta de enlace (router) de su red local, no el servidor de Google. Su VM envía la trama a la puerta de enlace, que luego la reenvía hacia Internet.
  • ethertype IPv4: Este campo indica que la carga útil de datos de la trama Ethernet es un paquete IPv4.
  • 172.16.50.8 > 142.250.191.174: Esta es la información de la Capa 3 (IP), que muestra las direcciones IP de origen y destino.
  • ICMP echo request: Esto identifica el paquete como parte de una solicitud de ping.

También verá los paquetes correspondientes de "echo reply" que regresan. Observe cómo las direcciones MAC de origen y destino se intercambian.

Finalmente, regrese a la terminal de tcpdump y presione Ctrl+C para detener la captura.

Generar Tráfico de Broadcast vía ARP e Identificar la Dirección MAC de Broadcast

En este paso, contrastará el tráfico unicast con el tráfico de difusión (broadcast). Mientras que unicast es un mensaje uno a uno, broadcast es un mensaje uno a todos enviado a cada dispositivo en el segmento de red local. Un ejemplo principal de esto es el Protocolo de Resolución de Direcciones (ARP), que se utiliza para descubrir la dirección MAC asociada con una dirección IP específica. Para hacer esto, un dispositivo envía una trama de difusión preguntando: "¿Quién tiene esta dirección IP?".

Primero, iniciemos una nueva captura de tcpdump. Esta vez, agregaremos un filtro para que solo nos muestre los paquetes ARP. También usaremos la bandera -n para evitar que tcpdump resuelva las direcciones IP a nombres de host, y -q para hacer la salida más limpia.

En una terminal, ejecute el siguiente comando, recordando reemplazar eth0 con el nombre de su interfaz del Paso 1.

## Reemplace eth0 con el nombre real de su interfaz
sudo tcpdump -i eth0 -e -n -q 'arp'

tcpdump ahora está escuchando, pero solo para tráfico ARP.

A continuación, necesitamos activar una solicitud ARP. Una forma confiable de hacerlo es borrar la caché ARP de su sistema y luego intentar contactar a otro dispositivo en la red local, como su router de puerta de enlace. Borrar la caché obliga a su sistema a redescubrir la dirección MAC de la puerta de enlace usando ARP.

Abra una nueva terminal. Primero, encuentre la dirección IP de su puerta de enlace con el comando ip route.

ip route | grep default

La salida mostrará su ruta predeterminada, y la dirección IP listada después de "via" es su puerta de enlace.

default via 172.16.50.1 dev eth0

Nota: Es probable que la dirección IP de su puerta de enlace sea diferente. Es fundamental utilizar la dirección IP de este comando en los pasos siguientes. Un error común es usar una IP diferente como 172.17.0.1, que a menudo es la puerta de enlace para una red Docker local y no producirá el resultado correcto para este ejercicio.

En este ejemplo, la puerta de enlace es 172.16.50.1. Ahora, borre su caché ARP usando el comando ip neigh flush. Esto eliminará las asignaciones de direcciones MAC conocidas, obligando a su sistema a usar ARP para encontrarlas nuevamente.

sudo ip -s -s neigh flush dev eth0

Es posible que vea una salida que confirma que se eliminaron entradas. Finalmente, haga ping a la puerta de enlace una sola vez para activar la búsqueda ARP.

## Reemplace 172.16.50.1 con la IP real de su puerta de enlace
ping -c 1 172.16.50.1

Ahora, vuelva a su primera terminal donde tcpdump está en ejecución. Verá el tráfico ARP que se generó. Busque la línea "Request":

10:30:01.123456 00:16:3e:01:be:b3 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: ARP, Request who-has 172.16.50.1 tell 172.16.50.8, length 28

Analicemos esta trama de difusión:

  • 00:16:3e:01:be:b3: La dirección MAC de origen (su VM).
  • ff:ff:ff:ff:ff:ff: Esta es la dirección MAC de difusión especial. Cuando un switch ve una trama con esta dirección de destino, la reenvía a través de todos sus puertos a cada dispositivo conectado.
  • ethertype ARP: Esto indica que la carga útil de la trama es un paquete ARP.
  • ARP, Request who-has 172.16.50.1 tell 172.16.50.8: Este es el mensaje ARP en sí, una pregunta de difusión a toda la red solicitando la dirección MAC de 172.16.50.1.

También verá el paquete "Reply", que es una trama unicast enviada directamente de vuelta desde la puerta de enlace a la dirección MAC de su VM.

Ahora puede detener la captura de tcpdump presionando Ctrl+C en su terminal.

Resumen

En este laboratorio, aprendió el proceso fundamental de análisis de tramas Ethernet utilizando tcpdump en un entorno Linux. Comenzó preparando su sistema, lo que implicó la instalación de la utilidad tcpdump con el gestor de paquetes apt y la identificación de su interfaz de red principal utilizando el comando ip addr. Luego aprendió a iniciar una captura de paquetes, primero ejecutando una captura sin filtrar para observar todo el tráfico de red y apreciar la necesidad de filtrado. Después de detener la captura inicial, aprendió a aplicar un filtro icmp con sudo tcpdump -i eth0 -e -n -q 'icmp' para centrarse específicamente en el tráfico que deseaba analizar.

El laboratorio luego lo guió a través de la generación y el análisis de dos tipos principales de tráfico de red. Utilizó el comando ping para crear tráfico unicast y examinó la salida filtrada de tcpdump para identificar las direcciones MAC de origen y destino específicas en las cabeceras de las tramas Ethernet. Posteriormente, generó tráfico de difusión iniciando una solicitud ARP con una captura separada y filtrada por arp, y aprendió a reconocer la dirección MAC de difusión distinta, ff:ff:ff:ff:ff:ff, que indica una trama destinada a todos los dispositivos en el segmento de red local.