Aktuellen Datendurchsatz eines Linux Interface periodisch via UDP versenden
Zugegeben, auch wenn ich Linux nicht sonderlich mag, manchmal sind Lösungen damit extrem einfach zu erreichen. In diesem Fall musste ich mir rasch (also wie immer) den aktuellen Datendurchsatz eines Linux Interface zu einem anderen Rechner senden lassen. Das musste weder supergenau sein noch besonders gesichert übertragen werden. Also entschied ich mich für ein Shellskript, dass mir jede Sekunde anhand der Interfacestatistiken den aktuellen Wert der gesendeten oder empfangenen Bytes ausliest, daraus die Bytes pro Sekunde errechnet und das Ganze per UDP zusendet. Herrlich, dass auch mal was unkompliziert ist.
#!/bin/bash if [ -z "$1" ]; then echo usage: $0 network-interface, IP, Port [, TX or RX [,Divider]] echo exit fi echo "Running...Press <CTRL-C> to close" while true do RX1=`cat /sys/class/net/$1/statistics/rx_bytes` TX1=`cat /sys/class/net/$1/statistics/tx_bytes` sleep 1 RX2=`cat /sys/class/net/$1/statistics/rx_bytes` TX2=`cat /sys/class/net/$1/statistics/tx_bytes` TXBPS=`expr $TX2 - $TX1` RXBPS=`expr $RX2 - $RX1` TXKBPS=`expr $TXBPS / ${5:-1024}` RXKBPS=`expr $RXBPS / ${5:-1024}` if [ "$4" == "tx" ]; then echo -n "$TXKBPS"| nc -u -q1 $2 $3 else echo -n "$RXKBPS"| nc -u -q1 $2 $3 fi done
Getestet habe ich das Ganze lediglich unter Mint und Ubuntu, keine Ahnung ob andere Linux Derivate die Interface Statistiken ebenso unter /sys/class/net/
bereitstellen.