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:

# apt-get install tcpstat

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:

# tcpstat -i eth0

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:


    # tcpstat -i eth0 1
    <span class="gp">#</span><span class="w"> </span>tcpstat <span class="nt">-i</span> eth0 1

  • Cadena de formato

    Puedes especificar qué estadísticas queremos ver impresas.

    1. %A numero de paquetes ARP
    2. %a tamaño de paquete medio
    3. %B numero de bytes por segundo
    4. %b numero de bits por segundo
    5. %C numero de paquetes ICMP y ICMPv6
    6. %d desviación estándar del tamaño de cada paquete
    7. %I numero de paquetes IPv4
    8. %l carga de la red en el último minuto, similar a uptime
    9. %M tamaño máximo de paquete
    10. %m tamaño mínimo de paquete
    11. %N número de bytes
    12. %n número de paquetes
    13. %p número de paquetes por segundo
    14. %R Lo mismo que %S, pero relativo al primer paquete visto
    15. %r Lo mismo que %s, pero relativo al primer paquete visto
    16. %S El timestamp para el intervalo en segundos después de la “época UNIX
    17. %s El timestamp para el intervalo en segundos.microsegundos después de la “época UNIX
    18. %T número de paquetes TCP
    19. %U número de paquetes UDP
    20. %V número de paquetes IPv6

    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


blog comments powered by Disqus