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.
