Filtros, flujos y tshark para leer un pcap
Un pcap de una tarde trae miles de paquetes y usted busca tres. La diferencia entre tardar diez minutos y tardar dos horas es saber filtrar. Aquí van las herramientas que yo uso, en el orden en que las uso.
Ficha de los filtros de visualización de Wireshark
- Qué son: expresiones que esconden todo menos lo que le interesa. Ojo: son los filtros de visualización (la barra verde, arriba), no los de captura. El archivo no se toca; solo cambia lo que ve.
- Dónde: la barra de filtro de Wireshark, o
tshark -Y "..."en la terminal.
Sintaxis
protocolo.campo OPERADOR valorFiltros que más uso
| Filtro | Qué muestra |
|---|---|
dns | solo tráfico DNS |
dns.qry.name contains "exfil" | consultas cuyo nombre incluye ese texto |
http.request | solo las peticiones HTTP (no las respuestas) |
tcp.flags.syn == 1 && tcp.flags.ack == 0 | los primeros paquetes de cada conexión |
ip.addr == 192.0.2.23 | todo lo que entra o sale de esa IP |
Combine con && (y), || (o) y ! (no). Un error que todos cometemos el primer día:
dns.qry.name = "algo"Wireshark pinta la barra de rojo: el operador de igualdad es == (o eq), no =.
Seguir un flujo
Cuando quiera leer una conversación de corrido (lo que el cliente pidió y lo que el servidor contestó, sin paquetes sueltos), haga clic derecho en un paquete de la conexión y elija Seguir > Flujo TCP (o Flujo UDP). Wireshark arma el diálogo completo, en colores distintos por lado, y deja aplicado un filtro tcp.stream eq N. Para un reto web o de texto claro, esto suele mostrarle la respuesta de una.
Para el panorama use Estadísticas > Conversaciones: la pestaña de cada protocolo le dice quién habló con quién y cuánto. Si un equipo le mandó cientos de paquetes a una sola dirección, salta a la vista.
Ficha de tshark
- Nombre:
tsharkes la versión de terminal de Wireshark (terminal shark). Sirve para lo mismo sin abrir la interfaz y es la que usaría dentro de un script.
Sintaxis
tshark -r ARCHIVO.pcap -Y "FILTRO" -T fields -e CAMPOOpciones principales
| Opción | Qué hace | Ejemplo |
|---|---|---|
-r | lee un archivo en vez de capturar | tshark -r captura.pcap |
-Y | aplica un filtro de visualización | -Y "http.request" |
-T fields -e | imprime solo el campo que pida | -T fields -e dns.qry.name |
-c | corta tras N paquetes | -c 20 |
Un ejemplo que vale por mil: sacar todos los nombres DNS consultados, uno por línea, listos para procesar.
$ tshark -r captura.pcap -Y "dns.flags.response == 0" -T fields -e dns.qry.name
www.cafedelvalle.example
intranet.cafetal.ejemplo.cr
hora.cafetal.ejemplo.crEl error más común con tshark en Windows es llamarlo sin tenerlo en el PATH:
tshark : El término 'tshark' no se reconoce como nombre de un cmdlet...Se arregla abriendo la terminal desde la carpeta de Wireshark, o agregando esa carpeta al PATH. Si no quiere pelear con eso, todo lo de esta píldora se puede hacer con la interfaz y, en la última lección, con Python.