Dies ist eine alte Version des Dokuments!
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
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!