Cables Ethernet conectados a un conmutador de red.
Inara Prusakova / Shutterstock
Wireshark es un analizador de paquetes de clase mundial disponible en Linux, Windows y macOS. Sus filtros son flexibles y sofisticados, pero a veces, contradictorios. Explicaremos las "trampas" que debe tener en cuenta.

Análisis de paquetes con mordida real

Wireshark es una de las joyas del mundo de código abierto. Es una herramienta de software de clase mundial, utilizada por profesionales y aficionados por igual para investigar y diagnosticar problemas de red. Los desarrolladores de software lo utilizan para identificar y caracterizar errores en las rutinas de comunicación. Los investigadores de seguridad lo usan para capturar y eliminar actividades maliciosas en una red.
Un flujo de trabajo típico es ejecutar Wireshark en modo de captura, por lo que registra el tráfico de red a través de una de las interfaces de red en la computadora. Los paquetes de red se muestran en tiempo real, a medida que se capturan. Sin embargo, es en el análisis posterior a la captura que se revela el detalle granular de lo que está sucediendo en la red.
Los paquetes capturados se denominan trazas. Cuando se completa la captura, se puede pasar la traza, paquete por paquete. Puede inspeccionar cualquier paquete con el más mínimo detalle, trazar "conversaciones" de red entre dispositivos y utilizar filtros para incluir (o excluir) paquetes de su análisis.
Las capacidades de filtrado de Wireshark son insuperables, con una gran flexibilidad y poder de resolución. Hay sutilezas en su sintaxis que facilitan la escritura de un filtro y obtienen un resultado que no cumple con sus expectativas.
Si no comprende cómo funcionan los filtros en Wireshark, nunca saldrá de la primera marcha y acelerará las capacidades del software.

Instalando Wireshark

Cuando instala Wireshark, se le pregunta si alguien que use una cuenta no root debería poder capturar rastros de red. Decir no a esto podría ser una idea atractiva. Es posible que no desee que todos puedan ver lo que sucede en la red. Sin embargo, la instalación de Wireshark para que solo aquellos con privilegios de root puedan usarlo, lo que significa que todos sus componentes se ejecutarán con permisos elevados.
Wireshark contiene más de 2 millones de líneas de código complicado e interactúa con su computadora en el nivel más bajo. Las mejores prácticas de seguridad aconsejan que se ejecute la menor cantidad de código posible con privilegios elevados, especialmente cuando funciona a un nivel tan bajo.
Es mucho más seguro ejecutar Wireshark con una cuenta de usuario normal. Todavía podemos restringir quién tiene la capacidad de ejecutar Wireshark. Esto requiere algunos pasos de configuración adicionales, pero es la forma más segura de proceder. Los elementos de captura de datos de Wireshark aún se ejecutarán con privilegios elevados, pero el resto de las Wiresharkejecuciones como un proceso normal.
Para comenzar la instalación en Ubuntu, escriba:
sudo apt-get install wireshark
sudo apt-get install wireshark en una ventana de terminal.
En Fedora, escriba:
sudo dnf install wireshark
sudo dnf instale wireshark en una ventana de terminal.
En Manjaro, use este comando:
sudo pacman -Syu wireshark-qt
sudo pacman -Syu wireshark-qt en una ventana de terminal.
Durante la instalación, verá la pantalla a continuación, recomendando que no se ejecute Wiresharkcomo root. Presione Tab para mover el resaltado rojo a "<OK>" y presione la barra espaciadora.
Pantalla de instalación que recomienda no ejecutar Wireshark como root.
En la siguiente pantalla, presione Tab para mover el resaltado rojo a "<YES>" y presione la barra espaciadora.
La pantalla de opciones que permite a los usuarios no root ejecutar Wireshark, con "Sí" resaltado.
Para ejecutar Wireshark, debe ser miembro del grupo "wireshark", que se crea durante la instalación. Esto le permite controlar quién puede correr WiresharkCualquiera que no esté en el grupo "wireshark" no puede correr Wireshark.
Para agregarse al grupo "Wireshark" use este comando:
sudo usermod -a -G wireshark $ USER
Para que su nueva membresía de grupo surta efecto, puede cerrar sesión y volver a iniciarla, o usar este comando:
newgrp wireshark
Para ver si estás en el nuevo grupo, usa el groupscomando:
grupos
sudo usermod -a -G wireshark $ USER en una ventana de terminal.
Debería ver "wireshark" en la lista de grupos.

Iniciando Wireshark

Puede iniciar Wireshark con el siguiente comando. El ampersand ( &) se inicia Wiresharkcomo una tarea en segundo plano, lo que significa que puede continuar utilizando la ventana de terminal. Incluso puede cerrar la ventana de terminal y Wireshark continuará ejecutándose.
Escriba lo siguiente:
Wireshark y
Wireshark y en una ventana de terminal.
RELACIONADO: Cómo ejecutar y controlar procesos en segundo plano en Linux
Aparece la interfaz Wireshark. Se enumeran los dispositivos de interfaz de red presentes en su computadora, junto con algunos pseudodispositivos integrados.
La interfaz principal de wireshark.
Una línea ondulada al lado de una interfaz significa que está activa y que el tráfico de red la atraviesa. Una línea plana significa que no hay actividad en la interfaz. El elemento principal de esta lista es "enp0s3", la conexión por cable para esta computadora y, como se esperaba, muestra actividad.
Para comenzar a capturar paquetes, hacemos clic con el botón derecho en "enp0s3" y luego seleccionamos "Iniciar captura" en el menú contextual.
Haga clic en "Iniciar captura" en el menú contextual.
Puede configurar filtros para reducir la cantidad de tráfico que captura Wireshark. Preferimos capturar todo y filtrar todo lo que no queremos ver al hacer un análisis. De esta manera, sabemos que todo lo que sucedió está en la pista. No desea perderse accidentalmente un evento de red que explica la situación que está investigando debido a su filtro de captura.
Por supuesto, para las redes de alto tráfico, las trazas pueden volverse muy grandes rápidamente, por lo que el filtrado en la captura tiene sentido en este escenario. O tal vez solo lo prefieras de esa manera.
Tenga en cuenta que la sintaxis para los filtros de captura es ligeramente diferente a la de las pantallas.
La aleta de tiburón, el cuadrado y la aleta de tiburón con iconos de flechas circulares resaltados en la interfaz de Wireshark con una captura de paquetes activa.
Los iconos resaltados en la imagen de arriba indican lo siguiente, de izquierda a derecha:
  • Aleta de tiburón : si es azul, al hacer clic se iniciará la captura de un paquete. Si Wireshark está capturando paquetes, este icono será gris.
  • Cuadrado : si es rojo, al hacer clic se detendrá la captura de paquetes en ejecución. Si Wireshark no está capturando paquetes, este icono será gris.
  • Aleta de tiburón con flecha circular : si esto es verde, al hacer clic se detendrá la traza que se está ejecutando actualmente. Esto le brinda la oportunidad de guardar o descartar los paquetes capturados y reiniciar el rastreo. Si Wireshark no está capturando paquetes, este icono será gris.

Analizando el rastro

Al hacer clic en el icono del cuadrado rojo, se detendrá la captura de datos para que pueda analizar los paquetes capturados en la traza. Los paquetes se presentan en orden de tiempo y están codificados por colores de acuerdo con el protocolo del paquete. Los detalles del paquete resaltado se muestran en los dos paneles inferiores de la interfaz de Wireshark.
Una traza capturada mostrada en Wireshark en orden de tiempo.
Una manera sencilla de facilitar la lectura del rastreo es hacer que Wireshark proporcione nombres significativos para las direcciones IP de origen y destino de los paquetes. Para hacer esto, haga clic en Ver> Resolución de nombre y seleccione "Resolver direcciones de red".
Wireshark intentará resolver el nombre de los dispositivos que enviaron y recibieron cada paquete. No podrá identificar todos los dispositivos, pero aquellos que sí podrán ayudarlo a leer el rastro.
Rastro de Wireshark con nombres de dispositivos resueltos.
Al desplazar la pantalla hacia la izquierda, se mostrarán más columnas a la derecha. La columna de información muestra cualquier información que Wireshark pueda detectar del paquete. En el siguiente ejemplo, vemos algunas pingsolicitudes y respuestas.
La columna Información que muestra algunas solicitudes y respuestas de ping.
De manera predeterminada, Wireshark muestra todos los paquetes en el orden en que fueron rastreados. Muchos dispositivos envían paquetes de ida y vuelta simultáneamente. Esto significa que es probable que una sola conversación entre dos dispositivos tenga paquetes de otros entrelazados.
Para examinar una sola conversación, puede aislarla por protocolo. El protocolo para cada paquete se muestra en la columna de protocolo. La mayoría de los protocolos que verá pertenecen a la familia TCP / IP. Puede especificar el protocolo exacto o usar Ethernet como una especie de catchall.
Haga clic con el botón derecho en cualquiera de los paquetes en la secuencia que desea examinar y luego haga clic en Filtro de conversación> Ethernet. En el siguiente ejemplo, seleccionamos un pingpaquete de solicitud.
Ping aislado "conversación" en la interfaz de Wireshark.
La secuencia de paquetes se muestra sin otros entre ellos, ya que Wireshark generó automáticamente un filtro para hacer esto. Se muestra en la barra de filtro y se resalta en verde, lo que indica que la sintaxis del filtro es correcta.
Para borrar el filtro, haga clic en "X" en la barra de filtro.

Creando tus propios filtros

Pongamos un filtro simple en la barra de filtro:
ip.addr == 192.168.4.20
Esto selecciona todos los paquetes que han sido enviados o recibidos por el dispositivo con la dirección IP 192.168.4.20. Tenga en cuenta que el doble es igual a los signos ( ==) sin espacio entre ellos.
Wireshark con un filtro de ip.addr == 192.168.4.20.
Para ver los paquetes enviados por un dispositivo (la fuente), puede usar  ip.srcpara ver los paquetes que han llegado a un dispositivo (el destino), puede usar  ip.dst, como se muestra a continuación:
ip.dst == 192.168.4.20 && ip.src == 192.168.4.28
Wireshard con un filtro de ip.addr == 192.168.4.20.
Tenga en cuenta el uso de un doble ampersand ( &&) para indicar el "y" lógico. Este filtro busca paquetes que llegaron a 192.168.4.20 desde 192.168.4.28.
Las personas nuevas en los filtros Wireshark a menudo piensan que un filtro como este capturará todos los paquetes entre dos direcciones IP, pero ese no es el caso.
Lo que realmente hace es filtrar todos los paquetes hacia o desde la dirección IP 192.168.4.20, independientemente de dónde vinieron o hacia dónde fueron enviados. Hace lo mismo con todos los paquetes de la dirección IP 192.168.4.28. Para decirlo de manera más simple, filtra todo el tráfico hacia o desde cualquier dirección IP.
También puede buscar actividad en otros protocolos. Por ejemplo, puede escribir este filtro para buscar solicitudes HTTP:
http.request
Wireshark con filtro http.request
Para excluir los paquetes que provienen o se enviaron a un dispositivo, use un signo de exclamación ( !) y encierre el filtro entre paréntesis [ ()]:
! (ip.addr == 192.168.4.14)
Este filtro excluye todos los paquetes enviados hacia o desde 192.168.4.14.
Wireshark con un filtro de! (Ip.addr == 192.168.4.14).
Es contradictorio porque el filtro contiene el operador de igualdad ( ==). Es posible que haya esperado que escriba este filtro así:
ip.addr! = 192.168.4.14
Sin embargo, esto no funcionará.
También puede buscar cadenas dentro de paquetes, por protocolo. Este filtro busca paquetes del Protocolo de control de transmisión (TCP) que contienen la cadena "youtube":
tcp contiene youtube
Wireshark con un filtro tcp contiene youtube.
Un filtro que busca la retransmisión es útil como una forma de verificar si hay un problema de conectividad. Las retransmisiones son paquetes que se reenvían porque se dañaron o se perdieron durante la transmisión inicial. Demasiadas retransmisiones indican una conexión lenta o un dispositivo que responde lentamente.
Escriba lo siguiente:
tcp.analysis.retransmission
Wireshark con un filtro de tcp.analysis.retransmission.

Nacimiento, vida, muerte y encriptación

Se inicia una conexión de red entre dos dispositivos cada vez que uno se pone en contacto con el otro y envía un SYNpaquete (sincronizado). El dispositivo receptor luego envía un ACKpaquete (de reconocimiento). Indica si aceptará la conexión enviando un SYNpaquete.
SYNy en ACKrealidad son dos banderas en el mismo paquete. El dispositivo original confirma el SYNenvío de un mensaje ACK, y luego los dispositivos establecen una conexión de red.
Esto se llama el apretón de manos de tres vías:
A -> SYN -> B

A <- SYN, ACK <- B

A -> ACK -> B
En la siguiente captura de pantalla, alguien en la computadora "nostromo.local" establece una conexión Secure Shell (SSH) a la computadora "ubuntu20-04.local". El apretón de manos de tres vías es la primera parte de la comunicación entre las dos computadoras. Tenga en cuenta que las dos líneas que contienen los  SYNpaquetes están codificadas por colores en gris oscuro.
Wireshark muestra una conexión SSH entre dos computadoras.
Al desplazarse por la pantalla para mostrar las columnas a la derecha SYN, se muestran los paquetes de apretón de manos SYN/ACKACK.
Wireshark muestra los paquetes de apretón de manos de tres vías.
Notará que el intercambio de paquetes entre las dos computadoras alterna entre los protocolos TCP y SSH. Los paquetes de datos se pasan a través de la conexión SSH cifrada, pero los paquetes de mensajes (como ACK) se envían a través de TCP. Filtraremos los paquetes TCP en breve.
Cuando la conexión de red ya no es necesaria, se descarta. La secuencia de paquetes para romper una conexión de red es un apretón de manos de cuatro vías.
Un lado envía un FINpaquete (acabado). El otro extremo envía un ACKpara reconocer el FIN, y luego también envía un FINpara indicar que acepta que la conexión debe cortarse. El primer lado envía un mensaje ACKpor el FINque acaba de recibir, y la conexión de red se desmantela.
Así es como se ve el apretón de manos de cuatro vías:
A -> FIN -> B

A <- FIN, ACK <- B

A -> ACK -> B
A veces, los FIN piggybacks originales en un ACKpaquete que se iba a enviar de todos modos, como se muestra a continuación:
A -> FIN, ACK -> B

A <- FIN, ACK <- B

A -> ACK -> B
Esto es lo que sucede en este ejemplo.
Wireshark muestra los paquetes de apretón de manos de cuatro vías.
Si queremos ver solo el tráfico SSH para esta conversación, podemos usar un filtro que especifique ese protocolo. Escribimos lo siguiente para ver todo el tráfico utilizando el protocolo SSH hacia y desde la computadora remota:
ip.addr == 192.168.4.25 && ssh
Esto filtra todo excepto el tráfico SSH hacia y desde 192.168.4.25.
Wireshark con un filtro de ip.addr == 192.168.4.25 && ssh.

Otras plantillas de filtro útiles

Cuando escribe un filtro en la barra de filtro, permanecerá rojo hasta que el filtro sea sintácticamente correcto. Se volverá verde cuando el filtro esté correcto y completo.
Si escribe un protocolo, como tcpipudp, o shh, seguido de un punto ( .), aparece un menú. Enumerará los filtros recientes que contenían ese protocolo y todos los campos que se pueden usar en los filtros para ese nombre de protocolo.
Por ejemplo, con ip, puede utilizar  ip.addrip.checksumip.srcip.dstip.idip.host, y docenas de otros.
Use las siguientes plantillas de filtro como base de sus filtros:
  • Para mostrar solo los paquetes de protocolo HTTP: http
  • Para mostrar solo los paquetes de protocolo DNS: dns
  • Para mostrar solo los paquetes TCP con 4000 como puerto de origen o destino: tcp.port==4000
  • Para mostrar todos los paquetes de restablecimiento de TCP: http.request
  • Para filtrar los paquetes ARP, ICMP y DNS: !(arp or icmp or dns)
  • Para mostrar todas las retransmisiones en una traza: tcp.analysis.retransmission
  • Para filtrar indicadores (como SYNFIN): debe establecer un valor de comparación para estos: 1significa que el indicador está configurado y 0 significa que no lo está. Así, un ejemplo sería: tcp.flags.syn == 1.
Hemos cubierto algunos de los principios rectores y usos fundamentales de los filtros de visualización aquí, pero, por supuesto, hay mucho más.
Para apreciar el alcance completo y la potencia de los Wiresharkfiltros, asegúrese de consultar su referencia en línea .