Tcpstat, estadísticas de la red
Tcpstat es un programa que nos da distintas estadísticas sobre la red. Estas estadísticas las puede obtener monitorizando una interfaz de red, o leyéndolas de una captura previa desde un fichero.
Introducción
Tcpstat hace uso de la librería pcap, utilizada para capturar paquetes, al igual que otros programas como tcpdump, wireshark, dsniff o snort. Por lo tanto con Tcpstat podremos analizar ficheros de captura creados con cualquier otro programa compatible con el formato pcap.
Instalación
En Debian tan sencillo como:
Ejecución
Pcap accede directamente al interfaz de red para poder hacer las mediciones oportunas (capturando los paquetes que pasen por esa interfaz). Por este motivo, tiene que ejecutarse como root si vamos a capturar paquetes de la interfaz de red. No es necesario si los paquetes los lees desde un fichero pcap.
Un pequeño ejemplo puedes ejecutarlo tecleando:
Con esto obtendrás las estadísticas cada 5 segundos, incluyendo la tasa de bps, la media de bytes por paquete y la desviación típica de bytes por paquete.
Opciones
A continuación explico las opciones más importantes:
- -F Hace un flush a la salida estándar, útil cuando se utiliza con tuberías o se redirige su salida a algún fichero.
- -f “filtro” Aplica un filtro a las estadísticas. Este filtro tiene la misma sintaxis que un filtro de pcap (ver manual de tcpdump)
- -o “cadena” Cadena de formato de salida. En el siguiente apartado veremos en qué consiste.
- -s segundos Se ejecuta sólo durante el número de segundos especificado, y luego sale. Por defecto se ejecuta hasta que se pulse Control-C.
- -p No pone el interfaz en modo promiscuo (por defecto lo pone en modo promiscuo)
- -r fichero.pcap Lee del fichero pcap indicado en lugar de una interfaz de red.
- -e Elimina los intervalos sin estadísticas.
- -l Incluye la capa de enlace en el cálculo del tamaño de paquete.
- También puedes especificar un intervalo de actualización, tras el cual se actualicen las estadísticas. Para especificar un intervalo de actualización de 1 segundo, ejecutarías:
- %A numero de paquetes ARP
- %a tamaño de paquete medio
- %B numero de bytes por segundo
- %b numero de bits por segundo
- %C numero de paquetes ICMP y ICMPv6
- %d desviación estándar del tamaño de cada paquete
- %I numero de paquetes IPv4
- %l carga de la red en el último minuto, similar a uptime
- %M tamaño máximo de paquete
- %m tamaño mínimo de paquete
- %N número de bytes
- %n número de paquetes
- %p número de paquetes por segundo
- %R Lo mismo que %S, pero relativo al primer paquete visto
- %r Lo mismo que %s, pero relativo al primer paquete visto
- %S El timestamp para el intervalo en segundos después de la “época UNIX”
- %s El timestamp para el intervalo en segundos.microsegundos después de la “época UNIX”
- %T número de paquetes TCP
- %U número de paquetes UDP
- %V número de paquetes IPv6
Cadena de formato
Puedes especificar qué estadísticas queremos ver impresas.
Si no especificas ninguna, la cadena de formato por defecto es:
Time:%S\tn=%n\tavg=%a\tstddev=%d\tbps=%b\n
Utilizando esta cadena de formato obtendrás como salida algo similar a lo siguiente:
Time:1182967131 n=285 avg=643.86 stddev=664.55 bps=293598.40
Time:1182967136 n=347 avg=553.59 stddev=648.45 bps=307352.00
Time:1182967141 n=375 avg=489.45 stddev=628.97 bps=293668.80
Time:1182967146 n=392 avg=530.18 stddev=643.44 bps=332528.00
Time:1182967151 n=345 avg=596.07 stddev=658.98 bps=329032.00
Time:1182967156 n=300 avg=650.89 stddev=664.36 bps=312427.20
Time:1182967161 n=300 avg=660.77 stddev=666.50 bps=317171.20
Time:1182967166 n=132 avg=636.59 stddev=650.23 bps=134448.00
En cambio, si utilizamos la cadena de formato “bps:%b\n” obtendrás como salida algo similar a lo siguiente:
bps:257598.40
bps:246494.40
bps:248875.20
bps:247489.60
bps:249275.20
bps:247528.00
bps:245633.60
Ejemplos:
A continuación pongo algunos ejemplos sencillos que te pueden resultar útiles.
Para medir estadísticas de transferencia HTTP
# tcpstat -f "tcp port http" -i eth0 1
Para medir el bitrate de un stream RTP que nos llega al puerto 1234
# tcpstat -f "udp port 1234" -i eth0 -o "bps=%b\n" 1
Para ver el uso de un servidor FTP en modo activo (puerto 21 control y 20 datos)
# tcpstat -f "port 20 or port 21" -i eth0 1
Para ver la tasa de transferencia y carga de la red de un servidor gnump3d
# tcpstat -f "port 8888" -i eth0 -o "Tasa de transferencia:%b\tCarga de la red:%l\n" 1
Para leer las estadísticas de un fichero capturado previamente con Wireshark
$ tcpstat -r captura.pcap 0.5
Con imaginación puedes darle muchos más usos, según lo que necesites monitorizar. Para mayor información sobre los filtros, consulta el manual de tcpdump.
Conclusión
Tcpstat puede ser una buena herramienta para administradores de redes y de servidores para obtener diversa información sobre el uso de la red.
Referencias
- man tcpstat
- man tcpdump
- man wireshark