Comment puis-je obtenir les statistiques de débit d'interface réseau actuelles sur Linux/UNIX? [fermé]

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

De préférence, ce serait sans installer autre chose que ce qui est disponible sur le système en standard.

84
demandé sur Bernard 2009-02-27 23:39:12

15 réponses

, Vous pouvez analyser la sortie de ifconfig

17
répondu Mehrdad Afshari 2009-02-27 20:45:30

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

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

149
répondu Philip Durbin 2014-01-20 19:01:33

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

Pas besoin de priv, binaires dorky, scripts hacky, libpcap, etc. Gagner.

$ 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
96
répondu filler 2010-10-27 19:04:44

J'ai écrit ce script stupide 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 à partir de /sys/class/net/$dev/statistics chaque seconde, et imprime 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 ---------^
42
répondu ephemient 2016-02-03 12:30:26

Nload est un excellent outil pour surveiller la bande passante en temps réel et facilement installé 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-geta'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!

24
répondu Jamieson Becker 2014-04-09 22:32:59

Vous pu analyser /proc/net/dev.

23
répondu codelogic 2009-02-27 20:54:57
  • dstat - combine les informations vmstat, iostat, ifstat, netstat et plus
  • iftop - incroyable utilitaire de bande passante réseau pour analyser ce qui se passe vraiment sur votre eth
  • netio - Mesure le débit net d'un réseau via TCP / IP
  • inq - utilitaire de dépannage CLI qui affiche des informations sur le stockage, généralement Symmetrix. Par défaut, INQ renvoie le nom du périphérique, L'ID Symmetrix, le LUN Symmetrix et la capacité.
  • send_arp - envoie une diffusion arp sur le périphérique réseau spécifié (eth0 par défaut), signalant un mappage d'adresse IP ancienne et nouvelle à une adresse MAC.
  • EtherApe - est un moniteur réseau graphique pour Unix inspiré d'etherman. Avec couche de liaison, IP et TCP modes, il affiche l'activité du réseau graphiquement.
  • iptraf - un moniteur de trafic IP qui affiche des informations sur le trafic IP passant sur votre réseau.

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

23
répondu Xoroz 2014-01-20 19:00:11

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 De Couleur)

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

15
répondu miguel 2014-01-20 19:00:41

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

Il considère que sleep 1 durera exactement une seconde, ce qui n'est pas vrai, mais assez bon pour une évaluation approximative de la bande passante.

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

14
répondu Matthieu 2013-06-14 06:45:53

J'aime iptraf mais vous avez probablement l'installer et qu'il semble ne pas être maintenu activement plus.

5
répondu Johannes Weiss 2009-02-27 20:44:32

Si vous voulez juste obtenir la valeur, vous pouvez utiliser un simple shell oneliner 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 des "octets reçus par seconde" pour une période de 10 secondes (vous pouvez changer de période en changeant le paramètre S=10, et vous pouvez mesurer les BPS transmis au lieu des bps reçus en utilisant tx_bytes au lieu de rx_bytes). N'oubliez pas de changer eth0 en 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 plus de lisibilité) exécutera le processus offlineimap uniquement lorsque la vitesse de transmission moyenne de 5 minutes tombe en dessous de 10kBPS (probablement lorsque d'autres processus consommant de la bande passante se terminent):

#!/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'expéditeur a choisi la balise linux), et a besoin non archaïque du noyau. Le code Shell lui-même est compatible/bin /sh (donc non seulement bash, mais dash et d'autres implémentations/bin /sh fonctionneront) et/bin / sh est quelque chose qui est vraiment toujours installé.

5
répondu Matija Nalis 2014-09-20 13:10:06

Je trouve dstat assez bon. Doit être installé cependant. Vous donne beaucoup plus d'informations que vous avez besoin. Netstat vous donnera des débits de paquets mais pas de bande passante aussi. netstat-s

2
répondu 2009-04-01 02:59:35

Vous pouvez utiliser iperf pour évaluer les performances du 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
répondu ssh 2014-07-28 20:02:12

Je n'ai pas pu faire fonctionner le script parse ifconfig pour moi sur un AMI, donc cela a fonctionné en mesurant le trafic reçu en moyenne sur 10 secondes

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 ça a marché!

0
répondu rolandw 2014-11-25 14:39:48
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 ce (python)

0
répondu Yahya Yahyaoui 2014-12-16 11:41:50