Comment puis-je traiter la sortie ifconfig pour déterminer ma vitesse de binding?

Voici le script que j'ai écrit sur l'ennui, pour le test de vitesse de téléchargement:

#!/bin/bash get_ispeed() { echo $(ifconfig eth0 | grep bytes | grep RX | cut -d ':' -f 2 | cut -d ' ' -f 1); } for((;;)); do s1=`get_ispeed`; sleep 1s; s2=`get_ispeed`; d=$(($s2-$s1)); echo $(($d / 1000))" kB/s"; done 

Je ne sais pas si c'est "faire le travail", même si je ne suis pas vrai bashist: p
Puisque ifconfig produit des octets RX, je le divise par 1000 pour get kB / s

vitesse de binding

Je ne pense pas que vous cherchez vraiment la vitesse de la binding, c'est la vitesse de connection dédiée de votre connection. Si vous avez installé ethtool (en repos), vous pouvez utiliser cette command pour get la vitesse de votre lien:

 $ sudo ethtool eth0 | grep -i speed Speed: 100Mb/s 

bande passante (kernel)

Vous voulez voir votre vitesse de bande passante. Quelle quantité de la vitesse totale que vous utilisez sur une période donnée. Il y a plusieurs façons d'get les octets lus par l'interface eth0 :

 $ cat /sys/class/net/eth0/statistics/rx_bytes 3431530366 

Il y a aussi /proc/net/dev , qui je crois est la structure du kernel qui fournit datatables pour ifconfig :

 $ cat /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo:629956414 572909 0 0 0 0 0 0 629956414 572909 0 0 0 0 0 0 eth0:3431888253 329701689 0 0 0 0 0 359127 831203319 353144288 0 0 0 0 0 0 sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

mesurer en utilisant des outils

Mieux encore serait d'utiliser un outil réel pour mesurer votre utilisation de la bande passante. Il y a beaucoup d'options ici:

  1. utiliser wget / curl

    Ce sont assez simples. Choisissez un grand file à download et voir les statistics rapscopes par l'un ou l'autre des outils une fois qu'il est terminé.

     $ wget --output-document=/dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip -or- $ curl -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip 
  2. utiliser un outil de surveillance cli

    Il existe de nombreux outils dans cette catégorie. Voici un couple pour vous aider à démarrer.

    • iptraf
    • nethog
  3. utilisez speedtest-cli

    Cela fait usage du site vénérable speedtest.net à partir de la command line.

     $ ./speedtest-cli Resortingeving speedtest.net configuration... Resortingeving speedtest.net server list... Testing from Comcast Cable (xxxx)... Selecting best server based on ping... Hosted by FiberCloud, Inc (Seattle, WA) [12.03 km]: 44.028 ms Testing download speed........................................ Download: 32.29 Mbit/s Testing upload speed.................................................. Upload: 5.18 Mbit/s 
  4. utiliser iperf

    Pour cela, vous allez configurer votre propre server et client, puis mesurer la performance de la bande passante entre deux de vos ordinateurs. C'est mieux dans le sens où vous obtiendrez une image plus précise de la performance de votre ordinateur / réseau que de la performance d'une cible Internet spécifique.

    sur le server:

     $ iperf -s 

    sur le client:

     $ iperf -c myserver.mydom ------------------------------------------------------------ Client connecting to 192.168.1.1, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.3 port 52143 connected with 192.168.1.1 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 113 MBytes 94.7 Mbits/sec 

Les references

  • Comment puis-je get les statistics actuelles sur le débit de l'interface réseau sous Linux / UNIX?
  • Comment vérifier la vitesse Internet via le terminal?

Je suis vraiment d'accord avec votre question et vos réponses, donc je peux vraiment le faire sur une seule ligne:

 m1=`cat /sys/class/net/eth0/statistics/tx_bytes` ; sleep 10s ; m2=`cat /sys/class/net/eth0/statistics/rx_bytes` ; echo $((($m2-$m1)/10240)) 

Et ça imprime plutôt bien.

D'une manière plus sophistiquée:

 #!/bin/bash intervalo=3 info="/sys/class/net/" cd $info for interface in eth* do rx1=`cat $info$interface/statistics/rx_bytes` tx1=`cat $info$interface/statistics/tx_bytes` `sleep $((intervalo))s` rx2=`cat $info$interface/statistics/rx_bytes` tx2=`cat $info$interface/statistics/tx_bytes` echo $interface echo ---- echo RX: $((($rx2-$rx1)/($intervalo*1024))) Kbps echo TX: $((($tx2-$tx1)/($intervalo*1024))) Kbps done 

Cela fonctionne très bien, mais peut être amélioré en utilisant des arrays pour save chaque résultat de l'interface, de sorte qu'il suffirait de faire un sumil pour toutes les interfaces, et pas un d'entre eux.