Fritz!Box Rufliste
Sinn und Zweck
Die Rufliste der Fritzbox soll auf einer Dedizierten HTML Seite dargestellt werden, die auch auf IPhone/IPad funktioniert und kein Passwortlogin erfordert.
Vorraussetzungen
- FRITZ!OS 05.21 oder höher
Nachforschungen
- Unter
http://fritzbox/cgi-bin/webcm?getpage=../html/de/home/foncallsdaten.xml&sid=<hier kommt die SID>
gibt ein XML von der Rufliste
- Die Struktur des XML ist:
<Foncalls> <Calls id="0"> <Type>2</Type> <Date>21.12.12 11:47</Date> <Number>0XXXXXX</Number> <Port/> <Duration>0:00</Duration> <Route>1</Route> <RouteType>1</RouteType> <Name></Name> <FonbookType/> <PortName></PortName> <Path></Path> </Calls> </Foncalls>
wobei:
Type | Bedeutung |
---|---|
1 | Ankommender Anruf |
2 | Anruf in Abwesenheit |
3 | Ausgehender Anruf |
Anmelden an der Fritzbox
Beim Anmelden an der Fritzbox will man nur den „sid“ Parameter herausknobeln, den man Url mitgeben muss, damit die Fritzbox akzeptiert, dass man angemeldet ist.
Die Anmeldung an der FritzBox läuft folgendermaßen ab:
- Fritzbox sendet eine „challenge“ beim anzeigen der Loginseite z.B.:
["security:status/challenge"] = "1fe918cd",
- Die Challenge wird zusammen mit dem Passwort in einen String verwandelt, der folgendes Format hat:
<Challenge>-<Passwort>
- Dieser String wird zu einem md5 hex hash verwandelt. Da der Hash-Algo der Fritzbox immer von Unicode-Zeichenketten (also 16 bit pro Zeichen) ausgeht, war dieser Schritt nicht sofort offensichtlich. Folgendes Pyhton Schnipsel berechnet den hash von „string“:
def digest(self, string): """Calculate the md5 digest like fritzbox does. """ d=[] for i in unicode(string): d.append(ord(i)) m = md5.new() m.update(struct.pack('h'*len(d), *d)) return m.hexdigest()
- Dieser Hash wird wieder zu einem String kombiniert:
<Challenge>-<Hash>
und an die Adresse
http://fritzbox/login.lua
als POST Parameter mit dem Namen „response“ gesendet.
- Von dieser Seite („/login.lua“) bekommt man im Erfolgsfall den HTML Statuscode 303 zurück und als Headereintrag „location“ bekommt man eine Url, welche den gesuchten Parameter „sid“ als GET Parameter enthält.
- Fertig!
Aktualisieren der Daten
Ruft man immer nur (wie oben angegeben) die foncallsdaten.xml ab, wird man feststellen, dass die Daten dort nicht aktualisiert werden.
Dies passiert nur, wenn man die FritzBox Seite besucht.
Man kann dies allerdings auch mit dem Aufruf der URL
http://fritzbox/home/home.lua?sid={0}&comfort=0&useajax=1&xhr=1
machen. Hierbei ist „{0}“ mit der aktuellen sid zu ersetzen.