Table of Contents

Guía rápida y completa del sniffer Tshark (Wireshark en modo texto)

Las ventajas que ofrece tshark frente a otros sniffers es su capacidad de poder visualizar tráfico de red de manera muy filtrada. Permitiendo también generar con esos filtros otros ficheros pcap derivados. Otras de sus posibilidades son la obtención de estadísticas muy configurables y útiles. También permite el coloreado de paquetes en la terminal de la misma manera que lo hace wireshark (GUI), posibilidad de descifrar https mediante ficheros de claves y geolocalización de IPs. Resumiendo, todo el potencial del popular Wireshark pero en modo texto.

Listar las interfaces de red disponibles numeradamente e indicar cual utilizar.

tshark -D
 
# Capturar en la interfaz indicada, el número corresponde al listado. "any" corresponde a todas las interfaces.
tshark -i ens32 / tshark -i1

Obtener información sobre una captura pcap.

capinfos fichero.pcap

Abrir una captura pcap.

tshark -r fichero.cap

Permite obtener la salida estándar (-P) a la vez que se crea un fichero pcap (-w), el comentario es algo optativo.

tshark -P -w fichero.pcap --capture-comment "Comentario"

Extraer tráfico de una captura aplicando uno o varios filtros y crear otro fichero pcap.

tshark -r test2.pcap -Y ldap.simple -w cacas.pcap

Resolución de nombres en tshark.

# Deshabilita la resolución de nombres de objetos como IPs, puertos, etc.
tshark -n
 
-N m    # Resolver dirección MAC
-N n    # Resolver nombres usando las resoluciones de la captura.
-N N    # Resuelve utilizando DNS.
–N t    # Resolver nombres de puertos.
-N d    # Ressolver IP.

Especificar condiciones temporales en las capturas.

-c n             Termina la captura después de capturar n paquetes.
-a duration:n    Termina la captura después de n segundos.
-a filesize:n    Termina la captura después de que el fichero de captura llegue a n Kb. (Rquiere -w fichero.pcap)
–a files:n       Termina la captura cuando al tener n ficheros de captura. requiere de filesize o duration y de -w indicando directorio: "tshark -a files:3 -a filesize:1024 -w /tmp/"

Ejemplo: A los 10 segundos tshark dejará de capturar.
# shark -i2 -f "port 25" -aduration:10

Configurar campos / formato de la salida de Tshark

La salida que obtenemos por defecto en tshark, si no se especifican opciones extras es sin colores y el formato sería el siguiente (Puede obtenerse mediante “tshark -G column-formats”).

tshark -o 'gui.column.format:"No.","%m","Time","%t","Source","%s","Destination","%d","Protocol","%p","Length","%L","Info","%i"'

Salida coloreada en la terminal al estilo wireshark.

tshark --color

Formatos de salida (json, text, etx,etc. Para compatibilidad con elasticsearch mirar el manual).

tshark -T ek|fields|json|jsonraw|pdml|ps|psml|tabs|text
 
-T psml / -T pdm   # Formato XML psml ó pdml
-T ps              # Formato postscript
-T text            # Formato texto. Por defecto
 
-T json            # Formato json embellecido
-T ek              # Formato json en una sola linea, util para combinarlo con herramientas como jq.
 
-T fields          # Especifica qué campos se desean mostrar. ej "-e ip.addr).
 
# NOTA: La opción "fields" se usa para especificar con "-e" los campos que se quieren visualizar, pueden ser usados en combinación con los filtros de captura o lectura indistintamente.

Formas de mostrar los campos (fields).

-E header=y/n                   # Establece si imprimimos o no la cabecera de los campos indicados en -e
-E separator=/t|/s|[caracter]   # Establecemos un separador para los campos mostrados en -e ó un separador tipo caracter./t tabuludo, /s espacio y -E separator="-" (Sólo un car
acter) 
-E quote=d|s|n                  # Delimitar campos con comillas normales, simples o sin delimitar.
 
# Mostrar únicamente los campos "http.host" y "ip.addr" indicando el nombre del campos en la cabecera.
tshark -nr test99.pcap -Y "http" -T fields -e http.host -e ip.addr -E headers=y
 
http.host	ip.addr
192.168.178.1	192.168.178.50,192.168.178.1

Información mostrada de los paquetes.

tshark -G protocols   # Muestra las abreviaciones de los protocolos
tshark -G fields      # Muestra un listado de todos los campos de todos los protocolos soportados:  tshark -G fields | grep -i "http\.request
tshark -G ?           # Muestra las posibles opciones.
tshark -V             # Muestra los detalles de los paquetes.
tshark -O protocol    # Muestra los detalles de los paquetes y su contenido en los protocolos especificados.
tshark -G column-formats # Como comentamos anteriormente en la guía puede definir el formato de algunos campos.

Opciones de visualización de tiempo.

-t ad   Formato absoluto fecha y tiempo (ej. 2018-05-13 21:46:11).
-t a    Formato absoluto sin dato de fecha (ej. 21:46:11).
–t r    Relativo en segundos entre primer paquete y el actual (ej. 41.182871015).
–t d    Tiempo respecto al paquete anterior (ej. 0.004406077).

Filtros en Tshark / Wireshark

Tshark tiene dos tipos de filtros, uno es a la hora de capturar paquetes y el otro que se puede utilizar se aplica sobre la visualización de los datos. Se recomienda utilizar los de captura por si se van a analizar redes con mucho tráfico en detrimento de los de visualización.

Filtros de captura

Los filtros de captura están orientados a usarse en tiempo de ejecución de la captura. Estos no pueden ser usados para filtrar contenido en un fichero pcap, para ello deben usarse los filtros llamados de lectura o visualización.

Los filtros de captura utilizan la sintaxis (BPF - Berkeley Packet Filter) que es también la utilizada en tcpdump. Lo que aporta tshark frente a tcpdump es su capacidad de visualización (filtros de lectura / visualización) para poder analizar la red de una manera algo más eficiente. También se nos permite extraer información y crear otros ficheros pcap derivados. Estos filtros de lectura tienen una sintaxis diferente a los de captura.

Filtros para interceptar contraseñas.

### LDAP
ldap.authentication
 
### FTP
ftp.request.command == "USER" or ftp.request.command == "PASS"
 
### HTTP 
 
HTTP/XML
xml.tag == "<password>"
 
### HTTP Authentication
 
# HTTP Basic Authentication
http.authbasic
 
# Proxy Authentication.
http.proxy_authenticate
 
# Citrix Authentication.
http.authcitrix.user and http.authcitrix.password

Ejemplo de filtro: Filtrando por direcciones destino que usen los puertos 80 y 443.

tshark -i1 -f "dst port 80 && dst port 443"

Filtros de lectura / visualización

Estos son los filtros orientados a operar sobre ficheros pcap pero pueden ser usados en capturas en tiempo real. Como se comento anteriormente y por pura lógica los filtros de captura son más eficientes para filtrar tráfico en tiempo real que los visuales. Por lo que si se quiere obtener una visualización personalizada de algunos campos del protocolo http, lo correcto sería filtrar la captura por http y luego aplicar un filtro de visualización. A continuación se muestra como obtener información sobre cualquier campo de tshark / wireshark para poder visualizarlo y/o condicionarlo en el filtro.

Listado de todos los protocolos - campos soportados: https://www.wireshark.org/docs/dfref/

tshark -G fields      # Muestra un listado de todos los campos de todos los protocolos soportados:  tshark -G fields | grep -i "http\.request
tshark -G ?           # Muestra las posibles opciones.

Obtener información completa sobre los filtros de visualización.

man wireshark-filter

Conectar a la interfaz 2 (tshark -D) y visualizar únicamente conexiones TCP al puerto 443.

tshark -i2 -Y "tcp.port == 443"

Filtrar los campos de la salida.

Ejemplo: Se muestran los campos “ldap.simple” y “ldap.name” encontrados en el fichero test.pcap.

shark -nr test.pcap -T fields -e ldap.simple -e ldap.name  -Y'((ldap.authentication == 0) && !(ldap.simple == "abc32")) && !(ldap.simple == "1234")'
1 sexa69          cn=user1 zink,ou=_users,ou=XXX,ou=cacas,dc=group,dc=local
2 !wx35_r         cn=user2 villwock,ou=_users,ou=XXX,ou=cacas2,dc=group,dc=local

Estos dos comandos muestran la misma salida, la primera aplica un filtro de captura y la segunda uno de visualización.

Capturar en tiempo real peticiones DNS usando un filtro de captura.

tshark -f "dst port 53" -n -T fields -e dns.qry.type -e dns.qry.name -e ip.dst
 
1	busindre.com	201.244.0.4
28	busindre.com	201.244.0.4

Capturar en tiempo real peticiones DNS usando un filtro de lecura / visualización.

tshark -Y "udp.port == 53" -n -T fields -e dns.qry.type -e dns.qry.name -e ip.dst
 
1	busindre.com	201.244.0.4
28	busindre.com	201.244.0.4

NOTA: Si se usa la salida de campos sin especificar un filtro del tipo que sea, todos los paquetes que no tengan dichos campos serán mostrados como lineas en blanco, por lo que es importante que el filtro tenga coherencia en relación a los campos que se quieren visualizar.

HTTPS

Descifrar tráfico HTTPS en tshark mediante un fichero [descifrar_trafico_https_con_wireshark|SSLKEYLOGFILE]].

tshark -nr test.pcap -Y "ssl"  -o ssl.keylog_file:/tmp/SSLKEYLOGFILE

GeoIP

Obtener información geográfica y/o filtrar por geolocalización en las capturas de red.

mkdir -p ~/.wireshark
echo '"/usr/share/GeoIP"' > ~/.wireshark/geoip_db_paths
 
# Arrancar tshark activando el modo GeoIP lookup.
 
tshark -n -i venet0 -V  -o "ip.use_geoip: TRUE"
tshark -n -i venet0 -V  -o "ip.use_geoip: TRUE" -T fields -e ip.dst -e ip.geoip.dst_country 
tshark -n -i venet0  -o "ip.use_geoip: TRUE" -R "ip.geoip.country==China"

Estadísticas

Para las estadísticas tshark utiliza la opción “-z” la cual necesita como parámetro el tipo de filtro y optativamente uno o varios filtros. Hay muchísimos tipos de estadísticas disponibles y se recomienda consultar las páginas del manual, aquí solo se mostrarán algunas de ellas.

Si únicamente se quieren obtener estadísticas, se recomienda usar la opción “-q” de tshark para no ver el tráfico en la terminal.

Es posible también especificar varios tipos de estadísticas en un solo comando tshark, veamos un ejemplo para obtener estadísticas de endpoints por IP y estadisticas de conexiones IP que hayan usado UDP en el puerto 53 (Normalmente DNS).

tshark  -qz endpoints,ip -z conv,ip,"udp.port==53"

Agregar información a la salida de la captura.

# -z proto,colinfo,filtro,campo
 
# Agrega a los datagramas IP el campo ip.proto y a los http, el campo http.host.
tshark -i1 -z proto,colinfo,ip.proto,ip.proto -z proto,colinfo,http.host,http.host

Las estadísticas podemos dividirlas en dos grupos, estadísticas generales y específicas. Las generales nos permiten filtrar varios protocolos de una manera muy personalizada. Las estadísticas especificas en cambio suelen tener también opciones de configuración y filtrado, pero vienen ya preparadas y adaptadas para determinados protocolos populares como HTTP, DNS, SAMBA, SIP, etc.

Estadísticas por IO (bytes / frames) en intervalos de tiempo configurables.

# Pueden asignarse varios filtros.
# -z io,stat,intervalo,[filtro],[filtro],..
 
tshark -i1 -qzio,stat,10                          # Saca estadísticas cada 10 segundos de los frames y bytes
tshark -i1 -qzio,stat,10,http,ip,"udp.port==53"   # Saca estadísticas cada 10 segundos de los frames y bytes por protocolo http, IP y el tráfico udp del puerto 53.

Estadísticas de Jerarquía de Protocolos.

tshark -i1 -qzio,phs            # Muestra estadísticas por protocolo
tshark -i1 -qzio,phs,[filtro]   # Muestra estadísticas por protocolo aplicando filtro.
 
# Ejemplo de salida.
 
 tcp                                     frames:15031 bytes:7714455
      ssl                                frames:1206 bytes:970409
        tcp.segments                     frames:274 bytes:294440
          ssl                            frames:111 bytes:155164
      http                               frames:614 bytes:558256
        data-text-lines                  frames:21 bytes:12635
          tcp.segments                   frames:2 bytes:2956
        image-gif                        frames:7 bytes:6639
          tcp.segments                   frames:2 bytes:1110
 ...

Estadística de comunicación entre pares.

Muestra estadísticas por comunicación establecida.Tipos: bluetooth, eth, fc ,fddi ,ip ,ipv6 ,ipx ,jxta ,mptcp ,ncp ,rsvp ,sctp ,sll, tcp, tr, udp, usb, wlan,

# -z conv # Muestra los valores posibles.
# -z conv,tipo,[filtro] 
 
tshark -i1 -zconv,eth
tshark -i1 -zconv,tcp
tshark -i1 -zconv,eth,"ip.addr == 192.168.1.1"

Estadísticas por destino.

# -z endpoints,type[,filter]
 
"bluetooth"  Bluetooth addresses
"eth"   Ethernet addresses
"fc"    Fibre Channel addresses
"fddi"  FDDI addresses
"ip"    IPv4 addresses
"ipv6"  IPv6 addresses
"ipx"   IPX addresses
"jxta"  JXTA message addresses
"ncp"   NCP connections
"rsvp"  RSVP connections
"sctp"  SCTP addresses
"tcp"   TCP/IP socket pairs  Both IPv4 and IPv6 are supported
"tr"    Token Ring addresses
"usb"   USB addresses
"udp"   UDP/IP socket pairs  Both IPv4 and IPv6 are supported
"wlan"  IEEE 802.11 addresses
 
# tshark  -qz endpoints,ip -z endpoints,ipv6
IPv4 Endpoints
Filter:<No Filter>
                       |  Packets  | |  Bytes  | | Tx Packets | | Tx Bytes | | Rx Packets | | Rx Bytes |
192.168.178.50              1344       1049919        556           57160         788          992759   
151.101.13.50               1101        917655        658          874301         443           43354   
104.244.76.42                100         89105         60           83751          40            5354   
23.45.237.207                 92         36918         46           30714          46            6204   
209.244.0.4                   40          4833         20            3259          20            1574   
192.168.178.1                  3           390          3             390           0               0  

Estadísticas HTTP.

-z http,stat,filtro
-z http,tree,filtro
-z http_req,tree
-z http_srv,tree

Estadísticas DNS.

-i1 -z dns,tree
 
# Ejemplo de salida.                  
========================================================================================================================================
DNS:
Topic / Item                   Count      Average       Min val     Max val       Rate (ms)     Percent       Burst rate    Burst start 
----------------------------------------------------------------------------------------------------------------------------------------
Total Packets                  154                                                0,0021        100%          0,1800        38,828      
 rcode                         154                                                0,0021        100,00%       0,1800        38,828     
  No error                     154                                                0,0021        100,00%       0,1800        38,828     
 opcodes                       154                                                0,0021        100,00%       0,1800        38,828     
  Standard query               154                                                0,0021        100,00%       0,1800        38,828     
 Query/Response                154                                                0,0021        100,00%       0,1800        38,828     
  Response                     77                                                 0,0010        50,00%        0,1000        38,843     
  Query                        77                                                 0,0010        50,00%        0,1000        38,807     
 Query Type                    154                                                0,0021        100,00%       0,1800        38,828     
  A (Host Address)             84                                                 0,0011        54,55%        0,0900        38,828     
  AAAA (IPv6 Address)          70                                                 0,0009        45,45%        0,0900        38,828     
 Class                         154                                                0,0021        100,00%       0,1800        38,828     
  IN                           154                                                0,0021        100,00%       0,1800        38,828     
Payload size                   154        75,79         28          264           0,0021        100%          0,1800        38,828     
Query Stats                    0                                                  0,0000        100%          -             -     
 Qname Len                     77         18,60         10          33            0,0010                      0,1000        38,807     
 Label Stats                   0                                                  0,0000                      -             -     
  3rd Level                    60                                                 0,0008                      0,0800        38,807     
  4th Level or more            10                                                 0,0001                      0,0400        39,631     
  2nd Level                    7                                                  0,0001                      0,0200        2,814     
  1st Level                    0                                                  0,0000                      -             -     
Response Stats                 0                                                  0,0000        100%          -             -     
 no. of questions              154        1,00          1           1             0,0021                      0,2000        38,843     
 no. of authorities            154        0,19          0           1             0,0021                      0,2000        38,843     
 no. of answers                154        2,55          0           8             0,0021                      0,2000        38,843     
 no. of additionals            154        0,00          0           0             0,0021                      0,2000        38,843     
Service Stats                  0                                                  0,0000        100%          -             -     
 request-response time (secs)  77         0,06          0,032116    0,451902      0,0010                      0,1000        38,843     
 no. of unsolicited responses  0                                                  0,0000                      -             -     
 no. of retransmissions        0                                                  0,0000                      -             -           

Enlaces recomendados.