Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
it:linux:fritzbox_rufliste [2012/12/25 17:12]
berni
it:linux:fritzbox_rufliste [2015/12/24 15:26] (aktuell)
Zeile 1: Zeile 1:
 +====== 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 <​code>​http://​fritzbox/​cgi-bin/​webcm?​getpage=../​html/​de/​home/​foncallsdaten.xml&​sid=<​hier kommt die SID></​code>​ gibt ein XML von der Rufliste
 +  * Die Struktur des XML ist:<​code xml>
 +<​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>​
 +</​code>​ 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.: <​code> ​ ["​security:​status/​challenge"​] = "​1fe918cd",​ </​code>​
 +  - Die Challenge wird zusammen mit dem Passwort in einen String verwandelt, der folgendes Format hat:<​code><​Challenge>​-<​Passwort></​code>​
 +  - 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":​ <code python>
 +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()
 +</​code>​
 +  - Dieser Hash wird wieder zu einem String kombiniert: <​code><​Challenge>​-<​Hash></​code>​ und an die Adresse <​code>​http://​fritzbox/​login.lua</​code>​ 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
 +<​code>​http://​fritzbox/​home/​home.lua?​sid={0}&​comfort=0&​useajax=1&​xhr=1</​code>​
 +machen.
 +Hierbei ist "​{0}"​ mit der aktuellen sid zu ersetzen.
 +
 +
 +
 +
 +
 +