web-dev-qa-db-fra.com

Comment puis-je obtenir les statistiques de débit de l'interface réseau actuelle sous Linux / UNIX?

Des outils tels que MRTG fournissent des graphiques de débit réseau/bande passante pour l'utilisation actuelle du réseau sur des interfaces spécifiques, telles que eth0. Comment puis-je renvoyer ces informations à la ligne de commande sous Linux/UNIX?

De préférence, cela se fera sans rien installer d'autre que ce qui est disponible en standard sur le système.

88
DavidM

Vous pouvez analyser la sortie de ifconfig

19
Mehrdad Afshari

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

Je ne sais pas comment "standard" iftop est, mais j'ai pu l'installer avec yum install iftop sur Fedora.

155
Philip Durbin

Vous avez sar? Probablement oui si vous utilisez RHEL/CentOS.

Pas besoin de priv, binaires dorky, scripts hacky, libpcap, etc. 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
101
filler

J'ai écrit ce script idiot il y a longtemps, cela ne dépend que de Perl et 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 @_ = <>;
    @_;
}

Il lit juste de /sys/class/net/$dev/statistics toutes les secondes et affiche les chiffres actuels et le taux de variation moyen:

$ ./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 ---------^
43
ephemient

Vous pouvez analyser / proc/net/dev .

28
codelogic

nload est un excellent outil pour surveiller la bande passante en temps réel et s’installer facilement dans Ubuntu ou Debian avec 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 autre excellent outil est iftop , aussi facilement 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

N'oubliez pas les utilitaires sar et netstat classiques et puissants sur les anciens * nix!

27
Jamieson Becker
  • dstat - Combine les informations vmstat, iostat, ifstat, netstat et plus
  • iftop - Incroyable utilitaire de bande passante réseau pour analyser ce qui se passe réellement sur votre eth
  • netio - Mesure le débit net d'un réseau via TCP/IP
  • inq - Utilitaire de dépannage de la CLI affichant des informations sur le stockage, généralement Symmetrix. Par défaut, INQ renvoie le nom du périphérique, l'identifiant Symmetrix, le numéro d'unité logique Symmetrix et la capacité.
  • send_arp - Envoie une diffusion arp sur le périphérique réseau spécifié (par défaut, eth0), en signalant le mappage d'une adresse IP ancienne et une nouvelle adresse MAC en une adresse MAC.
  • EtherApe - est un moniteur réseau graphique pour Unix modélisé d'après etherman. Comportant la couche de liaison, l’IP et les modes TCP), il affiche graphiquement l’activité du réseau.
  • iptraf - Moniteur de trafic IP qui affiche des informations sur le trafic IP transitant sur votre réseau.

Plus de détails: http://felipeferreira.net/?p=1194

25
Xoroz

J'ai un autre script quick'n'dirty bash pour ça:

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

C'est en considérant que sleep 1 durera en réalité exactement une seconde, ce qui est inexact, mais suffisant pour une évaluation approximative de la bande passante.

Merci à @ephemient pour le /sys/class/net/<interface>! :)

16
Matthieu

Outre iftop et iptraf, vérifiez également:

  • bwm-ng (Moniteur de bande passante nouvelle génération)

et/ou

  • cbm (mètre de bande passante couleur)

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

15
miguel

Si vous voulez juste obtenir la valeur, vous pouvez utiliser un simple shell Shell comme ceci:

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

Il vous montrera la moyenne "octets reçus par seconde" pour une période de 10 secondes (vous pouvez changer de période en changeant S=10 paramètre, et vous pouvez mesurer le BPS transmis au lieu du BPS reçu en utilisant tx_bytes au lieu de rx_bytes). N'oubliez pas de changer eth0 vers le périphérique réseau que vous souhaitez surveiller.

Bien sûr, vous n'êtes pas limité à afficher le taux moyen (comme mentionné dans d'autres réponses, il existe d'autres outils qui vous montreront une sortie beaucoup plus agréable), mais cette solution est facilement scriptable pour faire d'autres choses.

Par exemple, le script Shell suivant (divisé en plusieurs lignes pour la lisibilité) n'exécutera le processus offlineimap que lorsque la vitesse de transmission moyenne sur 5 minutes sera inférieure à 10kBPS (vraisemblablement, lorsqu'un autre processus consommateur de bande passante se terminera):

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

Notez que /sys/class/... est spécifique à Linux (ce qui est correct car l’émetteur a choisi la balise linux) et nécessite un noyau non archaïque. Le code shell lui-même est compatible avec/bin/sh (donc non seulement bash, mais dash et d'autres implémentations de/bin/sh fonctionneront) et/bin/sh est quelque chose qui est vraiment toujours installé.

6
Matija Nalis

J'aime iptraf mais vous devez probablement l’installer et il semble ne plus être maintenu activement.

5
Johannes Weiss

Vous pouvez utiliser iperf pour évaluer les performances réseau ( débit maximal possible ). Voir les liens suivants pour plus de détails:

http://en.wikipedia.org/wiki/Iperf

https://iperf.fr/

https://code.google.com/p/iperf/

2
ssh

Je trouve que dstat est plutôt bon. Doit être installé si. Vous donne plus d'informations que vous avez besoin. Netstat vous donnera des débits de paquets mais pas de bande passante également. netstat -s

2
Sav

Je ne pouvais pas faire en sorte que le script parse ifconfig fonctionne pour moi sur une AMI.

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"

Désolé, c'est toujours aussi bon marché et méchant, mais cela a fonctionné!

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

Si vous voulez la sortie de (ifconfig -a) au format json, vous pouvez utiliser this (python)

0
Yahya Yahyaoui