GhostAcademy logo GhostAcademy
🦈 CLI · Wireshark · pcap · análisis de tráfico
TShark
// version CLI de Wireshark · display filters · capture filters · TCP streams · estadísticas

TShark es la herramienta de línea de comandos de Wireshark. Comparte el mismo motor de análisis de protocolos pero sin interfaz gráfica — ideal para captura en servidores remotos, automatización en scripts y análisis de grandes archivos pcap.

-r pcap · -Y display filter · -T fields -f capture filter · BPF/tcpdump syntax -T fields -e campo · extracción de datos -z follow,tcp,ascii · TCP streams -z conv,ip · -z io,phs · estadísticas
Prep
Captura Base
Ejercicio 1
Resumen básico
Ejercicio 2
Display Filters
Ejercicio 3
Extracción campos
Ejercicio 4
Capture Filters
Ejercicio 5
TCP Streams
Ejercicio 6
Estadísticas
INSTALL
Instalación
TShark se incluye en el paquete Wireshark. También necesitarás tcpdump para los ejercicios de captura (generalmente ya instalado).
bash
sudo apt install tshark -y
PREP
Crear un Archivo de Captura Base
Antes de cualquier ejercicio, genera sample.pcap con una mezcla de tráfico HTTP, DNS e ICMP. Necesitarás dos terminales abiertas simultáneamente.
1
Terminal 1 — Iniciar captura con tcpdump
Reemplaza <interfaz> por la tuya (eth0, enp0s3, etc.). La opción -c 300 limita la captura a 300 paquetes.
2
Terminal 2 — Generar tráfico
Haz un ping, una resolución DNS y una solicitud HTTP mientras la captura está activa.
3
Detener la captura
Vuelve a la Terminal 1 y pulsa Ctrl+C si la captura no terminó automáticamente tras los 300 paquetes.
Terminal 1 — captura
$ sudo tcpdump -i enp0s3 -c 300 -w sample.pcap tcpdump: listening on enp0s3 ...
Terminal 2 — tráfico
$ ping -c 3 google.com $ host google.com $ wget -qO- www.example.com > /dev/null
EJ. 01
Resumen Básico de la Captura
Visualizar información clave de los paquetes en un formato similar a la vista principal de Wireshark.
ObjetivoComando tsharkDescripción
Primeros 10 paquetes tshark -r sample.pcap -c 10 Muestra nº, tiempo, IP origen/destino, protocolo e info del paquete.
Contar paquetes tshark -r sample.pcap | wc -l Número total de paquetes grabados en el archivo.
Solo las IPs tshark -r sample.pcap -T fields -e ip.src -e ip.dst -c 5 Muestra solo los campos de IP de origen y destino para los primeros 5 paquetes.
bash — comandos del ejercicio 1
# Ver los primeros 10 paquetes
tshark -r sample.pcap -c 10

# Contar el total de paquetes
tshark -r sample.pcap | wc -l

# Mostrar solo IPs origen y destino
tshark -r sample.pcap -T fields -e ip.src -e ip.dst -c 5
EJ. 02
Filtrado por Protocolo — Display Filters
Los filtros de visualización de TShark (-Y) son idénticos a los de Wireshark. Esenciales para aislar el tráfico de interés de una captura completa.
ℹ️ Display Filters vs Capture Filters: Los display filters (-Y) filtran la visualización de un pcap existente. Los capture filters (-f, ejercicio 4) filtran en el momento de la captura, antes de guardar. Son sintaxis distintas.
ObjetivoFiltro (-Y)Comando completo
Solo DNS
dns
tshark -r sample.pcap -Y "dns"
Peticiones HTTP
http.request
tshark -r sample.pcap -Y "http.request"
Tráfico a/desde una IP
ip.addr == 192.168.1.1
tshark -r sample.pcap -Y "ip.addr == 192.168.1.1"
Puerto específico (SSH)
tcp.port == 22
tshark -r sample.pcap -Y "tcp.port == 22"
bash — display filters
tshark -r sample.pcap -Y "dns"
tshark -r sample.pcap -Y "http.request"
tshark -r sample.pcap -Y "ip.addr == 192.168.1.1"
tshark -r sample.pcap -Y "tcp.port == 22"
EJ. 03
Extracción de Datos Específicos — -T fields
Utiliza -T fields con -e campo para extraer valores concretos de los paquetes. Muy útil para scripting y auditorías automatizadas.
ObjetivoComandoCampo extraído
Nombres DNS solicitados tshark -r sample.pcap -Y "dns" -T fields -e dns.qry.name dns.qry.name
Códigos de estado HTTP tshark -r sample.pcap -Y "http.response" -T fields -e http.response.code http.response.code
Tiempo de respuesta TCP tshark -r sample.pcap -T fields -e tcp.time_delta tcp.time_delta
bash — extracción de campos
# Nombres de dominio en consultas DNS
tshark -r sample.pcap -Y "dns" -T fields -e dns.qry.name

# Códigos de respuesta HTTP (200, 404, 500...)
tshark -r sample.pcap -Y "http.response" -T fields -e http.response.code

# Delta de tiempo entre paquetes TCP (latencia)
tshark -r sample.pcap -T fields -e tcp.time_delta
EJ. 04
Filtros de Captura — -f (BPF Syntax)
A diferencia de los display filters (-Y), los capture filters (-f) filtran antes de guardar. Usan la sintaxis de tcpdump/BPF. Ahorran espacio y recursos.
⚠️ Sintaxis diferente: Los capture filters usan sintaxis BPF (tcpdump) — no la misma que los display filters. Ejemplo: port 80 (BPF) vs tcp.port == 80 (display filter).

Ejemplo 1 — Capturar solo ICMP

Paso 1 — captura filtrada
$ sudo tcpdump -i enp0s3 -c 10 -w icmp.pcap 'icmp'
Paso 2 — generar ICMP
$ ping -c 10 google.com
bash — verificar que solo hay ICMP
tshark -r icmp.pcap -Y "icmp"   # Debería mostrar todos los paquetes

Ejemplo 2 — Excluir tráfico SSH (puerto 22)

bash — captura excluyendo SSH
# Paso 1: capturar TODO excepto puerto 22
sudo tcpdump -i enp0s3 -w non_local.pcap 'not port 22'

# Paso 2: verificar que no hay paquetes SSH en el archivo
tshark -r non_local.pcap -Y "tcp.port == 22"
# → salida vacía = confirmación de que el filtro funcionó
Comando
sudo tcpdump -i enp0s3 -w non_local.pcap 'not port 22'
Filtro BPF
'not port 22' — captura todos los paquetes excepto los que usan el puerto 22 (SSH) como origen o destino.
Resultado
169 packets captured
Verificación
Salida vacía de tshark al filtrar tcp.port == 22 = ningún paquete SSH en el archivo. El filtro de exclusión funcionó correctamente.
✅ Salida vacía = éxito: Que tshark no muestre nada al aplicar -Y "tcp.port == 22" sobre non_local.pcap es la confirmación de que el filtro BPF excluyó correctamente todo el tráfico SSH en el momento de la captura.
EJ. 05
Reconstrucción de Streams TCP
Fundamental para seguridad y auditoría — permite ver la conversación completa entre dos puntos, incluyendo el contenido de las solicitudes y respuestas HTTP.
ℹ️ Sobre el índice de stream: El número al final de follow,tcp,ascii,N indica el índice del stream TCP (0, 1, 2...). Si omites el número, TShark muestra un resumen de todos los streams disponibles.

Paso 1 — Limpiar y crear la captura

Terminal 1 — captura web
$ rm -f sample1.pcap $ sudo tcpdump -i enp0s3 -c 50 -w sample1.pcap 'port 80 or port 443' tcpdump: listening on enp0s3 ...
Terminal 2 — generar tráfico web
$ wget -qO- www.example.com > /dev/null $ wget -qO- www.example.com > /dev/null # repetir hasta llenar 50 paquetes

Paso 2 — Ver resumen de streams y reconstruir

bash — follow TCP stream
# Ver el Stream 0 (primer stream TCP detectado)
tshark -r sample1.pcap -z "follow,tcp,ascii,0"

# Ver el Stream 1 (si el 0 no era tráfico web)
tshark -r sample1.pcap -z "follow,tcp,ascii,1"
✅ Resultado esperado: Verás el texto sin procesar de la solicitud HTTP (GET / HTTP/1.1...) y la respuesta del servidor (HTTP/1.1 200 OK...) — la conversación completa reconstruida entre cliente y servidor.
ObjetivoComandoDescripción
Stream 0 tshark -r sample1.pcap -z "follow,tcp,ascii,0" Primer stream TCP del archivo — normalmente el primer flujo capturado.
Stream 1 tshark -r sample1.pcap -z "follow,tcp,ascii,1" Segundo stream TCP — prueba con diferentes índices si el 0 no contiene lo buscado.
EJ. 06
Estadísticas de Red — -z
La opción -z genera estadísticas útiles: conversaciones entre IPs, distribución de protocolos y actividad de red por intervalo de tiempo.
ObjetivoComandoDescripción
Conversaciones IPv4 tshark -r sample.pcap -z conv,ip Qué IPs se comunicaron, número de paquetes y bytes transferidos en cada dirección.
Jerarquía de protocolos tshark -r sample.pcap -z io,phs Porcentaje de paquetes de cada protocolo: Ethernet, IP, TCP, UDP, HTTP, etc.
Gráfico E/S por segundo tshark -r sample1.pcap -z io,stat,1 Actividad de red del archivo desglosada por intervalos de 1 segundo — detecta picos de tráfico.
bash — estadísticas con -z
# Conversaciones entre IPs (quién habla con quién)
tshark -r sample.pcap -z conv,ip

# Distribución de protocolos (Ethernet > IP > TCP > HTTP...)
tshark -r sample.pcap -z io,phs

# Actividad por segundo (detección de picos de tráfico)
tshark -r sample1.pcap -z io,stat,1
REF
TShark vs Wireshark
Ambas herramientas comparten el mismo motor de análisis de protocolos y los mismos filtros de visualización y formatos de archivo. La diferencia es la interfaz y el caso de uso.
💻 TShark — CLI
Interfaz
Línea de comandos
Uso típico
Servidores remotos sin GUI, scripts automatizados, filtros complejos, lotes de pcaps
Rendimiento
Más eficiente — no renderiza gráficos
Salida
Texto plano en terminal
🖥️ Wireshark — GUI
Interfaz
Interfaz gráfica de escritorio
Uso típico
Análisis interactivo, inspección visual, seguimiento de flujos, gráficos estadísticos
Rendimiento
Requiere más CPU/RAM para renderizar la GUI
Salida
Paneles visuales: listado, detalle, raw data
AspectoTSharkWireshark
Motor de análisisMismo motor compartidoMismo motor compartido
Display filtersIdénticos (misma sintaxis)Idénticos (misma sintaxis)
Formatos de archivo.pcap, .pcapng (lectura/escritura).pcap, .pcapng (lectura/escritura)
Diferencia claveAutomatización y consolaVisualización e interacción
En esencia: TShark te permite hacer todo lo que Wireshark puede a nivel de análisis de paquetes y filtrado, pero sin necesidad de una pantalla gráfica. Perfecto cuando accedes por SSH a un servidor Linux/Unix.
INSTALL
Instalar Wireshark en Ubuntu 24.04
Instalación con permisos correctos para capturar sin sudo.
bash — instalación completa
# 1. Actualizar repositorios
sudo apt update

# 2. Instalar Wireshark
sudo apt install wireshark -y
# → En el diálogo: selecciona "Sí" para permitir captura sin root

# 3. Añadir tu usuario al grupo wireshark
sudo usermod -aG wireshark $USER
# $USER toma automáticamente el nombre de tu usuario actual

# 4. Cerrar sesión / reiniciar para aplicar los cambios de grupo
# Luego ejecutar:
wireshark
⚠️ Paso importante: Debes cerrar la sesión de terminal e iniciar una nueva (o reiniciar la VM) para que los cambios del grupo wireshark surtan efecto. Sin esto, seguirás necesitando sudo para capturar tráfico.