Anrufliste von der Box holen

From Fritz!Box
Jump to: navigation, search

AVM Wiki >> Tipps+Tricks >> Anrufliste von der Box holen @ whmf   -   IRC-Chat   -   hu nl it English
Community Modelle Zubehör Environment Konfiguration Shell-Befehle Software Freetz Lexikon Tipps+Tricks Bilder

Hardware-Tipps System-Tipps Netzwerk-Tipps Telefonie-Tipps Software-Tipps Sonstige Tipps Todo

Anrufliste von der Box holen (Beispiel für neues Loginverfahren mit SID)

Ab der Firmware .76 verwendet die Fritzbox ein neues Loginverfahren. Login mit FRITZ!Box-Kennwort geht per Script nicht mehr so einfach. Nach dem Login muss man immer eine SID im Request übergeben. Das FRITZ!Box-Kennwort wird auch nicht mehr im Klartext übermittelt. (http://www.avm.de/de/Extern/Technical_Note_Session_ID.pdf) Das Passwort (+Challenge) wird als MD5 Hash eines UTF16LE (!) Strings übergeben.

#!/bin/sh

# Challenge abholen
ChallengeXML=`wget -O - "http://fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml" 2>/dev/null| grep Challenge`
Challenge=`echo $ChallengeXML | awk '{match($0,/>[^<>]+</); print substr($0,RSTART+1,RLENGTH-2)}'`

Passwd="xxxxx"

# login aufbauen und hashen
CPSTR="$Challenge-$Passwd"
MD5=`echo -n $CPSTR | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}'`
RESPONSE="$Challenge-$MD5"
POSTDATA="login:command/response=$RESPONSE&getpage=../html/de/menus/menu2.html"

# login senden und SID herausfischen
SID=`wget -O - --post-data="$POSTDATA" "http://fritz.box/cgi-bin/webcm" 2>/dev/null| grep "name=\"sid\"" | head -1 | awk '{match($0,/value="[^"]+"/); print substr($0,RSTART+7,RLENGTH-8)}'`

# refresh der daten auslösen
wget -O /dev/null "http://fritz.box//cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&var%3Aactivtype=pppoe&var%3AtabInetstat=0&var%3Aweckernr=&logger%3Asettings%2Ffilter=2"

# CSV runterladen
wget -O ../fb_anrufliste.csv "http://fritz.box/cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv" 2>/dev/null

Um von Ferne auf die Fritzbox zuzugreifen um die Anrufliste abzurufen, ist eine weitere Autentifizierung notwendig. Diese wird in der aufgerufenen Adresse angegeben. Weiterhin ist es notwendig, die wget Aufrufe um das Ignorieren des SSL-Zertifikates zu erweitern. Hier eine erweiterte Version des obigen Skriptes zum Abruf der Anrufliste über das Internet:

#!/bin/sh

# Challenge abholen
ChallengeXML=`wget -O - --no-check-certificate "https://benutzername:passwort@IP.DER.FRITZ.BOX/cgi-bin/webcm?getpage=../html/login_sid.xml" 2>/dev/null| grep Challenge`
Challenge=`echo $ChallengeXML | awk '{match($0,/>[^<>]+</); print substr($0,RSTART+1,RLENGTH-2)}'`

Passwd="xxxxx"

# login aufbauen und hashen
CPSTR="$Challenge-$Passwd"
MD5=`echo -n $CPSTR | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}'`
RESPONSE="$Challenge-$MD5"
POSTDATA="login:command/response=$RESPONSE&getpage=../html/de/menus/menu2.html"

# login senden und SID herausfischen
SID=`wget -O - --no-check-certificate --post-data="$POSTDATA" "https://benutzername:passwort@IP.DER.FRITZ.BOX/cgi-bin/webcm" 2>/dev/null| grep "name=\"sid\"" | head -1 | awk '{match($0,/value="[^"]+"/); print substr($0,RSTART+7,RLENGTH-8)}'`

# refresh der daten auslösen
wget -O /dev/null --no-check-certificate "https://benutzername:passwort@IP.DER.FRITZ.BOX//cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&var%3Aactivtype=pppoe&var%3AtabInetstat=0&var%3Aweckernr=&logger%3Asettings%2Ffilter=2"

# CSV runterladen
wget -O ../fb_anrufliste.csv --no-check-certificate "https://benutzername:passwort@IP.DER.FRITZ.BOX/cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv" 2>/dev/null