GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener estadísticas de red en tiempo real en Linux con formato KB/MB/Bytes y para puerto específico o ID de proceso de aplicación?

Es probable que su aplicación esté enviando paquetes a un número de puerto UDP o TCP específico o a una dirección IP específica.

Por lo tanto, puede usar algo como TCPdump para capturar ese tráfico.

TCPdump no le brinda las estadísticas en tiempo real que desea, pero puede alimentar su salida a algo que sí lo haga (intentaré actualizar esta respuesta con una respuesta más adelante).

Actualización:

$ sudo tcpdump -i eth1 -l -e -n | ./netbps
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:36:53    2143.33 Bps
11:37:03    1995.99 Bps
11:37:13    2008.35 Bps
11:37:23    1999.97 Bps
11:37:33    2083.32 Bps
131 packets captured
131 packets received by filter
0 packets dropped by kernel

Lo interrumpí después de un minuto presionando Ctrl+C.

Debería agregar una expresión de filtro adecuada al final del tcpdump comando para incluir solo el tráfico generado por su aplicación (por ejemplo, port 123 )

El programa netbps es esto:

#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes;

my $reporting_interval = 10.0; # seconds
my $bytes_this_interval = 0;
my $start_time = [Time::HiRes::gettimeofday()];

STDOUT->autoflush(1);

while (<>) {
  if (/ length (\d+):/) {
    $bytes_this_interval += $1;
    my $elapsed_seconds = Time::HiRes::tv_interval($start_time);
    if ($elapsed_seconds > $reporting_interval) {
       my $bps = $bytes_this_interval / $elapsed_seconds;
       printf "%02d:%02d:%02d %10.2f Bps\n", (localtime())[2,1,0],$bps;
       $start_time = [Time::HiRes::gettimeofday()];
       $bytes_this_interval = 0;
    }
  }
}

Es solo un ejemplo, ajusta al gusto.


Uso como se muestra a continuación desde la misma carpeta:

Para verificar el empaquetador por interfaz:./netpps.sh eth0

Para verificar la velocidad por interfaz:./netspeed.sh eth0

Medir paquetes por segundo en una interfaz netpps.sh como nombre de archivo

#!/bin/bash

INTERVAL="1"  # update interval in seconds

if [ -z "$1" ]; then
        echo
        echo usage: $0 [network-interface]
        echo
        echo e.g. $0 eth0
        echo
        echo shows packets-per-second
        exit
fi

IF=$1

while true
do
        R1=`cat /sys/class/net/$1/statistics/rx_packets`
        T1=`cat /sys/class/net/$1/statistics/tx_packets`
        sleep $INTERVAL
        R2=`cat /sys/class/net/$1/statistics/rx_packets`
        T2=`cat /sys/class/net/$1/statistics/tx_packets`
        TXPPS=`expr $T2 - $T1`
        RXPPS=`expr $R2 - $R1`
        echo "TX $1: $TXPPS pkts/s RX $1: $RXPPS pkts/s"
done

Medir el ancho de banda de la red en una interfaz netspeed.sh como nombre de archivo

#!/bin/bash

INTERVAL="1"  # update interval in seconds

if [ -z "$1" ]; then
        echo
        echo usage: $0 [network-interface]
        echo
        echo e.g. $0 eth0
        echo
        exit
fi

IF=$1

while true
do
        R1=`cat /sys/class/net/$1/statistics/rx_bytes`
        T1=`cat /sys/class/net/$1/statistics/tx_bytes`
        sleep $INTERVAL
        R2=`cat /sys/class/net/$1/statistics/rx_bytes`
        T2=`cat /sys/class/net/$1/statistics/tx_bytes`
        TBPS=`expr $T2 - $T1`
        RBPS=`expr $R2 - $R1`
        TKBPS=`expr $TBPS / 1024`
        RKBPS=`expr $RBPS / 1024`
        echo "TX $1: $TKBPS kB/s RX $1: $RKBPS kB/s"
done

Consulte este sitio para obtener más información http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html


Más fácil de usar y más fácil de controlar la salida y redirigir al archivo para un registro continuo:

ifstat

Probablemente viene con la mayoría de las distribuciones de Linux y se puede instalar con brew en mac


Linux
  1. Cómo buscar puertos abiertos en Linux con netstat, lsof y nmap

  2. Linux:¿cómo hacer que Grindeq (complemento de látex para Word) funcione con Word en Wine?

  3. Linux:¿cómo buscar una palabra específica y tomar texto?

  4. ¿Cómo hacer que solo el usuario, el pid y el comando se ejecuten para un proceso específico? (Ubuntu 11.10)

  5. cómo usar netstat en un puerto específico en Linux

Aprenda a detectar equipos de red con Scientific Linux 7.1 y Python

Cómo controlar puertos periféricos:Acceso y escritura en puerto paralelo con C en Linux. Parte I

Cómo ver las estadísticas del sistema Linux con Saidar

Uso de ifstat para estadísticas de red de Linux

Cómo eliminar archivos con extensión específica en Linux

Cómo comenzar con Arch Linux