22.03.2013

Huawei-LTE-Router per Skript resetten

Mal wieder ein kleines Skript aus der Abteilung "Nützliches für Kommandozeilenbastler".
Der LTE-Router von Huawei hat ab und zu mal Schluckauf und muss neu gestartet werden. Das umfasst den Aufruf der Adminseite mit einem Browser, Anmelden und durch drei Webseiten durchklicken, bis der Router sich wirklich zu einem Reset bequemt.

Mit demselben Trick wie neulich (Statusabfrage des Transfervolumens) ist es möglich, das Problem mit dem zweimaligen Aufruf von wget zu erschlagen. Beim ersten wget-Aufruf wird eine Anmeldung mit User und Passwort durchgeführt und das Session-Cookie gespeichert. Mit dem zweiten Aufruf wird dann direkt die URL aufgerufen, die den Reboot erzwingt (und die ganzen "Sind Sie sicher?"-Abfragen überspringt).

An der rot markierten Stelle "YOURPASSWORD" muss das eigene Router-Passwort eingesetzt werden. Wenn es Sonderzeichen enthält, müssen die als Entities geschrieben werden (Plus als %2B, Minus %2D, @ als %40 usw.). Ebenso muss an der rot markierten Stelle der Hostname oder die IP-Adresse des LTE-Routers eingesetzt werden (Telekom: speedport.ip, Vodafone: vodafonemobile.cpe, oder schlicht die IP, wenn die fix ist).

#!/bin/sh
verbose=0

while getopts "v" opt
do
  case "$opt" in
  v) verbose=1;;
  esac
done
shift $(expr $OPTIND - 1)


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


C=/tmp/cookies.txt
U1="http://$LTE/login.cgi"
U2="http://$LTE/reboot.cgi"


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


c=1
echo -n "# waiting for ping "
until [ $c -gt 20 ]
do
  echo -n "."
  sleep 5
  c=$(expr $c + 1)
  ping -qc1 $LTE > /dev/null && break
done
echo " rc=$?"