it:linux:fritzbox_rufliste

Fritz!Box Rufliste

Die Rufliste der Fritzbox soll auf einer Dedizierten HTML Seite dargestellt werden, die auch auf IPhone/IPad funktioniert und kein Passwortlogin erfordert.

  • FRITZ!OS 05.21 oder höher
  • 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

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:

  1. Fritzbox sendet eine „challenge“ beim anzeigen der Loginseite z.B.:
      ["security:status/challenge"] = "1fe918cd", 
  2. Die Challenge wird zusammen mit dem Passwort in einen String verwandelt, der folgendes Format hat:
    <Challenge>-<Passwort>
  3. 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()
  4. 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.

  5. 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.
  6. Fertig!

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.

  • it/linux/fritzbox_rufliste.txt
  • Zuletzt geändert: 2015/12/24 14:26
  • von 127.0.0.1