2009-02-27 8 views

risposta

17

È possibile analizzare l'output di ifconfig

+0

Questo presuppone che l'accesso root sia disponibile – Lionel

+20

(in genere) Non è necessario essere root per eseguire questo ... – confiq

+2

/sbin/ifconfig? – russoue

4

Mi piace iptraf ma probabilmente è necessario installarlo e sembra che non venga mantenuto più attivamente.

+1

C'è un iptraf-ng, qualche suggerimento su differenze tra di loro? –

+1

iptraf-ng è un fork del progetto originale. Dovrebbe avere tutte le caratteristiche originali con più. –

23

Si potrebbe analizzare /proc/net/dev.

+3

/proc non esiste su ogni UNIX. –

+28

È vero, supponevo solo a causa del tag Linux, che all'OP interessava solo Linux. – codelogic

+0

non esiste un file simile sul kernel 3.17 – SummerBreeze

40

Ho scritto questo script muto molto tempo fa, dipende da nulla, ma Perl e Linux ≥ 2.6:

#!/usr/bin/perl 

use strict; 
use warnings; 

use POSIX qw(strftime); 
use Time::HiRes qw(gettimeofday usleep); 

my $dev = @ARGV ? shift : 'eth0'; 
my $dir = "/sys/class/net/$dev/statistics"; 
my %stats = do { 
    opendir +(my $dh), $dir; 
    local @_ = readdir $dh; 
    closedir $dh; 
    map +($_, []), grep !/^\.\.?$/, @_; 
}; 

if (-t STDOUT) { 
    while (1) { 
     print "\033[H\033[J", run(); 
     my ($time, $us) = gettimeofday(); 
     my ($sec, $min, $hour) = localtime $time; 
     { 
      local $| = 1; 
      printf '%-31.31s: %02d:%02d:%02d.%06d%8s%8s%8s%8s', 
      $dev, $hour, $min, $sec, $us, qw(1s 5s 15s 60s) 
     } 
     usleep($us ? 1000000 - $us : 1000000); 
    } 
} 
else {print run()} 

sub run { 
    map { 
     chomp (my ($stat) = slurp("$dir/$_")); 
     my $line = sprintf '%-31.31s:%16.16s', $_, $stat; 
     $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[0])/1) 
      if @{$stats{$_}} > 0; 
     $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[4])/5) 
      if @{$stats{$_}} > 4; 
     $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[14])/15) 
      if @{$stats{$_}} > 14; 
     $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[59])/60) 
      if @{$stats{$_}} > 59; 
     unshift @{$stats{$_}}, $stat; 
     pop @{$stats{$_}} if @{$stats{$_}} > 60; 
     "$line\n"; 
    } sort keys %stats; 
} 

sub slurp { 
    local @ARGV = @_; 
    local @_ = <>; 
    @_; 
} 

Si legge solo dal /sys/class/net/$dev/statistics ogni secondo, e stampa i numeri attuali e il tasso medio di cambiamento:

$ ./net_stats.pl eth0 
rx_bytes      : 74457040115259 4369093 4797875 4206554 364088 
rx_packets      :  91215713193 23120 23502 23234 17616 
... 
tx_bytes      : 90798990376725 8117924 7047762 7472650 319330 
tx_packets      :  93139479736 23401 22953 23216 23171 
... 
eth0       : 15:22:09.002216  1s  5s  15s  60s 

           ^current reading ^-------- averages ---------^ 
+5

È una sceneggiatura fantastica, grazie amico! – Gui13

+0

Ho dovuto sostituire "8s" e "8.8s" con "16s" e "16.16s" per i numeri adatti. – Nickolay

146

iftop does for network usage what top(1) does for CPU usage - http://www.ex-parrot.com/~pdw/iftop/

io non so come "standard" iftop è, ma sono stato in grado di installarlo con yum install iftop su Fedora.

+0

WOW! Eeeek !!! Questo strumento produce un grafico a barre dal vivo degli host principali. Puoi guardare tutti i tuoi clienti OpenVPN in lotta per esso in tempo reale. Molto bello Thx – artfulrobot

+13

'iftop' può essere installato su una pulita installazione di Ubuntu facilmente:' apt-get install iftop'. –

+1

e su Arch Linux con 'pacman -S iftop' –

2

Trovo che dstat sia abbastanza buono. Deve essere installato però. Ti dà più informazioni di quelle che ti servono. Netstat ti fornirà tariffe per pacchetti ma non anche larghezza di banda. netstat -s

15

Oltre iftop e iptraf, controllare anche:

  • bwm-ng (Bandwidth Monitor Next Generation)

e/o

  • cbm (colori Bandwidth Meter)

rif: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html

+2

bwm-ng rocks: non ha bisogno di alcun permesso speciale per essere eseguito. –

+0

Lo uso da anni e nella maggior parte dei casi di utilizzo trovo la sua interfaccia molto più chiara di quella di iftop. –

96

Hai ottenuto? Probabilmente sì se stai usando RHEL/CentOS.

Non c'è bisogno di file binari privati, dorky, script hacky, libpcap, ecc. Win.

$ sar -n DEV 1 3 
Linux 2.6.18-194.el5 (localhost.localdomain) 10/27/2010 

02:40:56 PM  IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 
02:40:57 PM  lo  0.00  0.00  0.00  0.00  0.00  0.00  0.00 
02:40:57 PM  eth0 10700.00 1705.05 15860765.66 124250.51  0.00  0.00  0.00 
02:40:57 PM  eth1  0.00  0.00  0.00  0.00  0.00  0.00  0.00 

02:40:57 PM  IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 
02:40:58 PM  lo  0.00  0.00  0.00  0.00  0.00  0.00  0.00 
02:40:58 PM  eth0 8051.00 1438.00 11849206.00 105356.00  0.00  0.00  0.00 
02:40:58 PM  eth1  0.00  0.00  0.00  0.00  0.00  0.00  0.00 

02:40:58 PM  IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 
02:40:59 PM  lo  0.00  0.00  0.00  0.00  0.00  0.00  0.00 
02:40:59 PM  eth0 6093.00 1135.00 8970988.00 82942.00  0.00  0.00  0.00 
02:40:59 PM  eth1  0.00  0.00  0.00  0.00  0.00  0.00  0.00 

Average:  IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 
Average:   lo  0.00  0.00  0.00  0.00  0.00  0.00  0.00 
Average:   eth0 8273.24 1425.08 12214833.44 104115.72  0.00  0.00  0.00 
Average:   eth1  0.00  0.00  0.00  0.00  0.00  0.00  0.00 
+10

Per kB/s Trasmissione e ricezione: sar -n DEV 1 3 | grep $ IFACE | coda -n1 | awk '{print $ 5, $ 6}' – Lionel

+2

@Lionel - Nitidezza minore: intendevi ricevere e trasmettere, in questo ordine. :-) – lacinato

+0

Sar è un bel vecchio strumento.Si tratta di un altro binario o di quattro cronjobs assortiti per la raccolta, però :) – XTL

14

ho avuto un altro script bash quick'n'dirty per questo:

#!/bin/bash 
IF=$1 
if [ -z "$IF" ]; then 
     IF=`ls -1 /sys/class/net/ | head -1` 
fi 
RXPREV=-1 
TXPREV=-1 
echo "Listening $IF..." 
while [ 1 == 1 ] ; do 
     RX=`cat /sys/class/net/${IF}/statistics/rx_bytes` 
     TX=`cat /sys/class/net/${IF}/statistics/tx_bytes` 
     if [ $RXPREV -ne -1 ] ; then 
       let BWRX=$RX-$RXPREV 
       let BWTX=$TX-$TXPREV 
       echo "Received: $BWRX B/s Sent: $BWTX B/s" 
     fi 
     RXPREV=$RX 
     TXPREV=$TX 
     sleep 1 
done 

Si considera che sleep 1 sarà effettivamente durare esattamente un secondo, che non è vero, ma abbastanza buono per una larghezza di banda di massima valutazione.

Grazie a @ephemient per lo /sys/class/net/<interface>!:)

+2

Se si desidera formattare i numeri come MB/s, scambiare la riga "echo" con: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; stampa "Ricevuto" rx "MB/s, Inviato" tx "MB/s"} " –

+1

@BuddyCasino Sono sicuro che potreste farlo direttamente in" lasciare BWRX = ($ RX- $ RXPREV)/1024' (sebbene Non ho nulla da testare ora) – Matthieu

+0

Sembra che tu abbia ragione, non ha funzionato per qualche motivo quando ho provato a farlo in quel modo, quindi mi sono accontentato di awk, ma immagino fosse solo un refuso. –

23
  • dstat - Combina vmstat, iostat, ifstat, informazioni netstat e più
  • iftop - Amazing utilità di banda di rete per analizzare ciò che sta realmente accadendo sul vostro ETH
  • netio - Misure il throughput netto di un rete via TCP/IP
  • inq - Utilità di risoluzione dei problemi CLI che visualizza informazioni sullo storage, in genere Symmetrix. Per impostazione predefinita, INQ restituisce il nome del dispositivo, l'ID Symmetrix, il LUN Symmetrix e la capacità.
  • send_arp - Invia una trasmissione arp sul dispositivo di rete specificato (predefinito su eth0), riportando un vecchio e nuovo mapping dell'indirizzo IP su un indirizzo MAC.
  • EtherApe - è un monitor di rete grafico per Unix modellato dopo etherman. Dotato di modalità link layer, IP e TCP, visualizza graficamente l'attività di rete.
  • iptraf - Un monitor di traffico IP che mostra informazioni sul traffico IP che passa sulla rete.

Maggiori dettagli: http://felipeferreira.net/?p=1194

+1

Grazie per la semplice lista e queste sono per lo più utilità di default. In particolare, sono riuscito a ottenere una larghezza di banda di picco molto buona da iftop senza installare nulla. – Foliovision

19

nload è un grande strumento per la larghezza di banda di monitoraggio in tempo reale e facilmente installato in Ubuntu o Debian con sudo apt-get install nload.

Device eth0 [10.10.10.5] (1/2): 
===================================================================================== 
Incoming: 


           .   ...|  
           #   ####| 
          .. |#| ... #####.   ..   Curr: 2.07 MBit/s 
          ###.### #### #######|.  . ##  | Avg: 1.41 MBit/s 
         ########|#########################. ### Min: 1.12 kBit/s 
      ........ ################################### .### Max: 4.49 MBit/s 
      .##########. |###################################|##### Ttl: 1.94 GByte 
Outgoing: 
      ########## ########### ########################### 
      ########## ########### ########################### 
      ##########. ########### .########################### 
      ########### ########### ############################# 
      ########### ###########..############################# 
      ############ ########################################## 
      ############ ########################################## 
      ############ ########################################## Curr: 63.88 MBit/s 
      ############ ########################################## Avg: 32.04 MBit/s 
      ############ ########################################## Min: 0.00 Bit/s 
      ############ ########################################## Max: 93.23 MBit/s 
     ############## ########################################## Ttl: 2.49 GByte 

Un altro ottimo strumento è iftop, facilmente apt-get'able:

   191Mb  381Mb     572Mb  763Mb    954Mb  
└────────────┴──────────┴─────────────────────┴───────────┴────────────────────── 
box4.local   => box-2.local      91.0Mb 27.0Mb 15.1Mb 
         <=         1.59Mb 761kb 452kb 
box4.local   => box.local       560b 26.8kb 27.7kb 
         <=         880b 31.3kb 32.1kb 
box4.local   => userify.com       0b 11.4kb 8.01kb 
         <=         1.17kb 2.39kb 1.75kb 
box4.local   => b.resolvers.Level3.net    0b  58b 168b 
         <=          0b  83b 288b 
box4.local   => stackoverflow.com     0b  42b  21b 
         <=          0b  42b  21b 
box4.local   => 224.0.0.251       0b  0b 179b 
         <=          0b  0b  0b 
224.0.0.251   => box-2.local       0b  0b  0b 
         <=          0b  0b  36b 
224.0.0.251   => box.local       0b  0b  0b 
         <=          0b  0b  35b 


───────────────────────────────────────────────────────────────────────────────── 
TX:   cum: 37.9MB peak: 91.0Mb  rates: 91.0Mb 27.1Mb 15.2Mb 
RX:     1.19MB   1.89Mb    1.59Mb 795kb 486kb 
TOTAL:    39.1MB   92.6Mb    92.6Mb 27.9Mb 15.6Mb 

Non dimenticare il classico e potente sar e utility netstat sul più antico * nix!

3

Se si desidera solo per ottenere il valore, è possibile utilizzare semplice shell oneliner come questo:

S=10; F=/sys/class/net/eth0/statistics/rx_bytes; X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; echo $BPS 

Ti mostrerà la media "byte ricevuti al secondo" per un periodo di 10 secondi (è possibile modificare il periodo modificando il parametro S=10 ed è possibile misurare BPS trasmessi anziché BPS ricevuti utilizzando tx_bytes anziché rx_bytes). Non dimenticare di cambiare eth0 sul dispositivo di rete che si desidera monitorare.

Ovviamente, non si è limitati a visualizzare la velocità media (come menzionato in altre risposte, ci sono altri strumenti che ti mostreranno un output molto più bello), ma questa soluzione è facilmente scrivibile per fare altre cose.

Ad esempio, questo script (raggruppati in più righe per facilitarne la lettura) eseguirà offlineimap processo solo quando 5 minuti a velocità media di trasmissione scende sotto 10Kbps (presumibilmente, quando qualche altro processo banda consumano conclude):

#!/bin/sh 
S=300; F=/sys/class/net/eth0/statistics/tx_bytes 
BPS=999999 
while [ $BPS -gt 10000 ] 
do 
    X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; 
    echo BPS is currently $BPS 
done 
offlineimap 

Si noti che /sys/class/... è specifico per Linux (che è corretto poiché il mittente ha scelto il tag linux) e ha bisogno di un kernel non arcaico. Il codice shell stesso è/bin/sh compatibile (quindi non solo bash, ma dash e altre implementazioni/bin/sh funzioneranno) e/bin/sh è qualcosa che è sempre installato.

0

non ho potuto ottenere lo script parse ifconfig a lavorare per me su un AMI così ottenuto questo al lavoro misurazione del traffico ricevuto in media su 10 secondi

date && rxstart=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && sleep 10 && rxend=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && difference=`expr $rxend - $rxstart` && echo "Received `expr $difference/10` bytes per sec" 

Ci dispiace ma è sempre così a buon mercato e brutto ma ha funzionato !

0
ifconfig -a 
ip -d link 
ls -l /sys/class/net/ (physical and virtual devices) 
route -n 

Se si desidera che l'uscita del (ifconfig -a) in formato JSON è possibile utilizzare this (python)

+0

Nessuna di queste statistiche sul throughput dei report? –