11.01.2013

Daten aus dem LTE-Router von Huawei mit Skript auslesen

Von meinem alten DSL-Router war ich eine halbwegs informative Webansicht mit den relevanten Verbindungsdaten gewöhnt, dort konnte ich meine öffentliche IP-Adresse, meine Up- und Download-Geschwindigkeit und einige andere nette Daten abfragen und mitprotokollieren.

Der neue LTE-Router hingegen (Huawei B390s aka Telekom LTE 1) hat ein gar schreckliches Webinterface, und ohne Authentisierung rückt er gar keine Infos heraus. Nicht mal die Statusseite bekommt man mit einem harmlosen wget-Aufruf ;(, sondern nur eine Fehlerseite mit Javascript.

Aber wget ist schlau genug; man muss zwei Aufrufe durchführen und beim Aufruf der Login-Funktion (erster Aufruf) die Logindaten als "POST data" mitschicken und beim Beenden alle Cookies inklusive Sessions-Cookies speichern. Dann klappt's auch mit dem Huawei ;)

Hier ist ein Shellscript, das das Transfervolumen (in+out) und IP-Adresse zeigen und protokollieren kann. Das Passwort steht hartkodiert im wget-Aufruf nach --post-data. Das Skript sollte also mit chmod 700 behandelt werden, damit das keiner nachgucken kann. Falls im Passwort Sonderzeichen vorkommen, müssen die in der %-Schreibweise escape'd werden (+ ist %2B, # ist %23, ? ist %3F usw.).

Ohne Parameter aufgerufen werden alle Infos auf die Konsole ausgegeben.
Mit -f dateiname landen die Infos zusätzlich in einer Statusdatei (die IP nur, wenn sie sich von der vorher gespeicherten unterscheidet).
Mit -i, -o, -I kann man einschränken, dass man nur Volumen-In, Volumen-Out, IP sehen will.

#!/bin/sh

showin=0
showout=0
showip=0
status=

while getopts "ioIf:" opt
do
    case "$opt" in
    i) showin=1;;
    o) showout=1;;
    I) showip=1;;
    f) status="$OPTARG";;
    esac
done
shift $(expr $OPTIND - 1)

if [ "$showin$showout$showip" = "000" ]
then
    showin=1
    showout=1
    showip=1
fi

PATH=/opt/bin:/opt/sbin${PATH:+:$PATH}

C=/tmp/cookies.txt
U1="http://vodafonemobile.cpe/login.cgi"
U2="http://vodafonemobile.cpe/basic_status.asp"

wget --save-cookies "$C" \
     --keep-session-cookies \
     -q --tries=1 \
     -O /dev/null \
     --post-data 'Username=admin&Password=PASSWORT_ESCAPED' \
     "$U1"

wget --load-cookies "$C" \
     -q --tries=1 \
     -O - \
     "$U2" | \
awk -F, '
/total_volum_array = /{printf"%d %d ",$3,$4}
/WanIp = /            {gsub(/[(")]/,"",$2);printf"%s\n",$2}
' > /var/log/status-lte.txt
read in out ip < /var/log/status-lte.txt

if [ "$showin$showout" != "00" ]
then
    test $showin  -eq 1 && echo $in
    test $showout -eq 1 && echo $out
    if [ -n "$status" ]
    then
        date +"%Y%m%d-%T $in $out" >> "$status"
    fi
fi

if [ $showip -eq 1 ]
then
    echo $ip
# want echo to file?
    if [ -n "$status" ]
    then
# file exists?
        if [ -f "$status" ]
        then
            lastip=$(tail -1 "$status" | awk '{print$NF}')
            test "$lastip" != "$ip" && date +"%Y%m%d-%T $ip" >> "$status"
        else
# create new
            date +"%Y%m%d-%T $ip" >> "$status"
        fi
    fi
fi

rm -f "$C"