GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere statistiche di rete in tempo reale in Linux con formato KB/MB/byte e per porta specifica o ID processo dell'applicazione?

La tua applicazione sta probabilmente inviando pacchetti a un numero di porta UDP o TCP specifico o a un indirizzo IP specifico.

Puoi quindi usare qualcosa come TCPdump per catturare quel traffico.

TCPdump non ti fornisce le statistiche in tempo reale che desideri, ma puoi fornire il suo output a qualcosa che lo fa (cercherò di aggiornare questa risposta con una risposta più tardi).

Aggiornamento:

$ 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

L'ho interrotto dopo un minuto premendo Ctrl+C.

Dovresti aggiungere un'espressione di filtro adatta alla fine di tcpdump comando per includere solo il traffico generato dalla tua app (ad es. port 123 )

Il programma netbps è questo:

#!/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;
    }
  }
}

È solo un esempio, regolatevi a piacere.


Utilizzo come di seguito dalla stessa cartella:

Per controllare il packer per interfaccia:./netpps.sh eth0

Per controllare la velocità per interfaccia:./netspeed.sh eth0

Misura i pacchetti al secondo su un'interfaccia netpps.sh come nome file

#!/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

Misura la larghezza di banda della rete su un'interfaccia netspeed.sh come nome file

#!/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

Per ulteriori informazioni, fare riferimento a questo sito http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html


Più facile da usare e più facile da controllare l'output e reindirizzare al file per la registrazione continua:

ifstat

Probabilmente viene fornito con la maggior parte delle distribuzioni Linux e può essere installato con brew su Mac


Linux
  1. Inizia con NetworkManager su Linux

  2. Linux:come annullare la condivisione della rete per il processo corrente?

  3. Come ottenere solo l'utente, il pid e il comando eseguito per un processo specifico? (Ubuntu 11.10)

  4. come utilizzare netstat su una porta specifica in Linux

  5. Come vedere su Linux quale interfaccia di rete e indirizzo IP di origine vengono utilizzati per un percorso verso un host di destinazione specifico?

Scopri come rilevare le apparecchiature di rete con Scientific Linux 7.1 e Python

Come controllare le porte periferiche:Accesso e scrittura su Porta Parallela con C su Linux. Parte I

Come visualizzare le statistiche del sistema Linux con Saidar

Utilizzo di ifstat per le statistiche di rete Linux

Come rimuovere file con estensione specifica in Linux

Come iniziare con Arch Linux