Wireshark es la herramienta de análisis de paquetes más usada en análisis forense de red, SOC y pruebas de seguridad. Saber escribir filtros correctos marca la diferencia entre perder horas buscando en miles de paquetes o llegar al tráfico relevante en segundos. Esta cheat sheet cubre los filtros de captura (BPF) y los filtros de visualización (display filters), con ejemplos reales para los protocolos más habituales en ciberseguridad. Para más contexto sobre herramientas defensivas, consulta nuestra guía de cursos y certificaciones de ciberseguridad.
Captura vs. filtros de visualización: la diferencia importante
Wireshark tiene dos tipos de filtros con sintaxis completamente distintas:
- Filtros de captura (Capture Filters): se aplican antes de capturar. Usan sintaxis BPF (Berkeley Packet Filter). Solo capturan el tráfico que cumple el filtro; el resto se descarta y no se puede recuperar.
- Filtros de visualización (Display Filters): se aplican sobre una captura ya realizada o en curso. Usan el propio lenguaje de Wireshark, más expresivo. No descartan paquetes, solo los ocultan.
En un entorno de análisis forense o SOC, lo habitual es capturar todo y filtrar después con display filters. Los capture filters se usan cuando el volumen de tráfico es tan alto que guardarlo todo no es viable.
Filtros de captura (BPF)
| Filtro BPF | Qué captura |
|---|---|
host 192.168.1.10 |
Todo el tráfico hacia o desde esa IP |
src host 192.168.1.10 |
Tráfico originado en esa IP |
dst host 192.168.1.10 |
Tráfico destinado a esa IP |
net 192.168.1.0/24 |
Todo el tráfico de esa subred |
port 80 |
Tráfico HTTP (puerto 80, TCP o UDP) |
tcp port 443 |
Tráfico HTTPS por TCP |
not port 22 |
Excluye SSH (útil para no capturar tu propia sesión) |
tcp |
Solo protocolo TCP |
udp |
Solo protocolo UDP |
icmp |
Solo pings y mensajes ICMP |
port 53 |
Tráfico DNS |
tcp port 80 or tcp port 443 |
HTTP y HTTPS juntos |
host 10.0.0.1 and port 3389 |
RDP hacia un host concreto |
not host 10.0.0.254 |
Excluye un host específico (p. ej. el gateway) |
Filtros de visualización (Display Filters): HTTP
| Display Filter | Qué muestra |
|---|---|
http |
Todo el tráfico HTTP |
http.request |
Solo peticiones HTTP (GET, POST, etc.) |
http.response |
Solo respuestas HTTP |
http.request.method == "POST" |
Solo peticiones POST (envío de formularios, credenciales) |
http.request.method == "GET" |
Solo peticiones GET |
http.response.code == 200 |
Respuestas exitosas |
http.response.code == 404 |
Recursos no encontrados |
http.response.code >= 400 |
Todos los errores HTTP |
http.host contains "ejemplo.com" |
Peticiones a un dominio concreto |
http.request.uri contains "login" |
Peticiones a rutas con «login» |
http contains "password" |
Paquetes HTTP con la cadena «password» en cualquier campo |
Filtros de visualización: DNS
| Display Filter | Qué muestra |
|---|---|
dns |
Todo el tráfico DNS |
dns.qry.name contains "google" |
Consultas DNS que contienen «google» |
dns.qry.type == 1 |
Consultas de tipo A (IPv4) |
dns.qry.type == 28 |
Consultas de tipo AAAA (IPv6) |
dns.qry.type == 15 |
Consultas MX (correo) |
dns.flags.response == 0 |
Solo las preguntas DNS (sin respuestas) |
dns.flags.response == 1 |
Solo las respuestas DNS |
dns.count.answers > 10 |
Respuestas con muchos registros (posible DNS tunneling) |
Filtros de visualización: TCP y conexiones
| Display Filter | Qué muestra |
|---|---|
tcp |
Todo el tráfico TCP |
tcp.port == 443 |
Tráfico en el puerto 443 (origen o destino) |
tcp.dstport == 22 |
Conexiones SSH entrantes |
tcp.srcport == 4444 |
Tráfico originado en el puerto 4444 (p. ej. reverse shell) |
tcp.flags.syn == 1 and tcp.flags.ack == 0 |
Paquetes SYN puros (inicio de conexión o escaneo de puertos) |
tcp.flags.reset == 1 |
Conexiones reseteadas (puertos cerrados o rechazados) |
tcp.stream eq 5 |
Muestra solo el stream TCP número 5 (útil tras Follow TCP Stream) |
tcp.analysis.retransmission |
Retransmisiones (problemas de red o evasión) |
ip.src == 10.0.0.5 and tcp.dstport == 80 |
Peticiones HTTP desde una IP concreta |
Follow Stream: reconstruir conversaciones
Una de las funciones más potentes de Wireshark es reconstruir una sesión completa. Haz clic derecho sobre cualquier paquete de una conversación y selecciona:
- Follow → TCP Stream: reconstruye la sesión TCP completa en texto. Imprescindible para ver credenciales en claro (HTTP, FTP, Telnet) o el contenido de una reverse shell.
- Follow → HTTP Stream: similar pero decodificando la capa HTTP.
- Follow → UDP Stream: para protocolos como DNS o TFTP.
Al abrir el stream, Wireshark aplica automáticamente el filtro tcp.stream eq N para aislar esa conversación. Cierra la ventana del stream para volver a la vista general.
Filtros combinados y operadores lógicos
| Operador | Ejemplo | Significado |
|---|---|---|
and / && |
ip.src == 10.0.0.1 and http |
Cumple ambas condiciones |
or / || |
dns or http |
Cumple al menos una |
not / ! |
not arp |
Excluye el protocolo |
contains |
http.host contains "banco" |
El campo contiene la cadena |
matches |
http.request.uri matches ".php$" |
Coincidencia con regex |
== |
ip.addr == 192.168.1.5 |
Igualdad exacta |
!= |
eth.src != 00:11:22:33:44:55 |
Diferente de |
> / < |
frame.len > 1400 |
Comparación numérica |
Atajos de teclado más usados
| Atajo | Acción |
|---|---|
Ctrl + E |
Iniciar / detener captura |
Ctrl + F |
Buscar paquete por contenido |
Ctrl + G |
Ir a un número de paquete concreto |
Ctrl + Shift + R |
Reiniciar captura desde cero |
Ctrl + Shift + F |
Buscar en todos los campos del paquete |
Ctrl + Alt + Shift + T |
Follow TCP Stream (desde paquete seleccionado) |
Si estás preparando una certificación como el Security+ o el SSCP, el análisis de tráfico con Wireshark aparece en los dominios de operaciones de red y monitorización de seguridad. Practica con capturas de ejemplo en la sección Sample Captures de la wiki oficial de Wireshark.
Preguntas frecuentes
¿Cuál es la diferencia entre un filtro de captura y un display filter en Wireshark?
Un filtro de captura (BPF) descarta el tráfico que no cumple la condición antes de guardarlo: si no lo capturaste, no puedes recuperarlo. Un display filter se aplica sobre una captura ya existente y solo oculta paquetes visualmente sin eliminarlos; puedes quitarlo en cualquier momento para volver a ver el tráfico completo. En análisis forense se usa casi siempre display filter para no perder evidencias.
¿Cómo veo las credenciales que viajan en claro por la red?
Captura el tráfico de la interfaz correspondiente, aplica el filtro http.request.method == "POST" y luego haz clic derecho sobre un paquete relevante y selecciona Follow → TCP Stream. Si las credenciales van sin cifrar (HTTP, FTP, Telnet, SMTP sin TLS) aparecerán en texto plano en la ventana del stream. Para tráfico cifrado (HTTPS/TLS) necesitas la clave privada del servidor o el secreto de sesión (SSLKEYLOGFILE) para descifrarlo.
¿Cómo detecto un escaneo de puertos Nmap en Wireshark?
Un escaneo SYN (nmap -sS) genera muchos paquetes SYN hacia puertos diferentes desde la misma IP origen en muy poco tiempo. El filtro tcp.flags.syn == 1 and tcp.flags.ack == 0 aísla esos paquetes. Combínalo con ip.src == X.X.X.X para ver el patrón de un origen concreto: la secuencia de puertos sondeados queda bastante clara.
¿Wireshark puede descifrar tráfico TLS/HTTPS?
Sí, bajo ciertas condiciones. Si configuras la variable de entorno SSLKEYLOGFILE en el navegador (Chrome y Firefox la soportan), el navegador vuelca los secretos de sesión a ese fichero. En Wireshark, ve a Edit → Preferences → Protocols → TLS y señala ese fichero en (Pre)-Master-Secret log filename. Wireshark descifra el tráfico TLS correspondiente automáticamente.
