FritzBox DECT-Monitor in Webgadget
FritzBox DECT-Monitor in Webgadget
Hallo Forum,
ich würde gerne die Ansicht "DECT-Monitor" von der FritzBox in einem Webgadget anzeigen lassen.
Meine FritzBox-7270 ist mit einem Kennwort geschützt.
Wie geh ich da vor?
Hat das schon jemand umgesetzt?
Hintergedanke:
Ich möchte einen Statusmonitor haben, der mir die Verbindungen der DECT-Telefone anzeigt
und diese alle x-Sekunden aktuallisiert.
Gruß
gnaps
ich würde gerne die Ansicht "DECT-Monitor" von der FritzBox in einem Webgadget anzeigen lassen.
Meine FritzBox-7270 ist mit einem Kennwort geschützt.
Wie geh ich da vor?
Hat das schon jemand umgesetzt?
Hintergedanke:
Ich möchte einen Statusmonitor haben, der mir die Verbindungen der DECT-Telefone anzeigt
und diese alle x-Sekunden aktuallisiert.
Gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Re: FritzBox DECT-Monitor in Webgadget
Das ist ab den neueren Fritzboxversionen um einiges komplizierter.
Ich selbst habe das noch nicht probiert, wobei damals mit dem Speedport,
konnte man mit curl was machen. Hier mal eine Beschreibung von AVM
zum Interface mit der neuen Technologie, wo SessionIDs benutzt werden,
die man nun braucht.
http://www.avm.de/de/Extern/files/sessi ... ion_ID.pdf
Vielleicht hilft Dir das einen kleinen Schritt weiter.
Dazu noch ein Link: http://www.purebasic.fr/german/viewtopi ... TPFile.pbi
Das man dazu bräuchte. Ist aber OOP und dazu können hier bestimmt einige ein passendes Beispiel daraus stricken.
Ich kanns leider nicht.
Gruß,
Falko
Ich selbst habe das noch nicht probiert, wobei damals mit dem Speedport,
konnte man mit curl was machen. Hier mal eine Beschreibung von AVM
zum Interface mit der neuen Technologie, wo SessionIDs benutzt werden,
die man nun braucht.
http://www.avm.de/de/Extern/files/sessi ... ion_ID.pdf
Vielleicht hilft Dir das einen kleinen Schritt weiter.
Dazu noch ein Link: http://www.purebasic.fr/german/viewtopi ... TPFile.pbi
Das man dazu bräuchte. Ist aber OOP und dazu können hier bestimmt einige ein passendes Beispiel daraus stricken.
Ich kanns leider nicht.
Gruß,
Falko
Re: FritzBox DECT-Monitor in Webgadget
Das mit der SID hat mich auch ein paar graue Haare gekostet, ich hab es dann so gemacht, mit Zwischenspeicherung der Seite auf der Platte ging es für mich einfacher als diese in den Speicher zu laden. Es geht zweifellos sicher eleganter, aber es funktioniert auch so bestens.
FBIP ist die Box-IP
uiPass ist das Box-PW
FBIP ist die Box-IP
uiPass ist das Box-PW
- SeiteLaden() liest die angeforderte Seite über den Umweg der Festplatte in die Variable gSeite
- FindeDaten() sucht einen String in gSeite
- fbSID() gibt unter Zuhilfenahme der anderen Proceduren die SID zurück.
Code: Alles auswählen
Global FBIP.s, uiPass.s, gSeite.s, SessionID.s
Global Zeilenumbuch.s = Chr(13)+Chr(10)
Procedure SeiteLaden(Seite.s)
gSeite = ""
If ReceiveHTTPFile("http://" + FBIP + Seite,"td.fritz")
If ReadFile(0, "td.fritz")
While Eof(0) = 0
gSeite = gSeite + ReadString(0)
Wend
CloseFile(0)
Else
MessageRequester("Fehler", "Fehler beim Lesen der Daten!")
EndIf
Else
MessageRequester("Fehler", "Fehler beim Laden der Seite" + Zeilenumbuch + Seite)
EndIf
EndProcedure
Procedure.s FindeDaten(Suche.s, Stelle = 1, eSuche.s = "")
aSuche.s = "<" + Suche + ">"
If eSuche = "" : eSuche.s = "</" + Suche + ">" : EndIf
PzWertA.s = StringField(gSeite, Stelle + 1, aSuche)
ProcedureReturn StringField(PzWertA, 1, eSuche)
EndProcedure
Procedure.s fbSID()
SeiteLaden("/login_sid.lua")
*Buffer = AllocateMemory(200)
PzWertC.s = FindeDaten("Challenge")
PzWertA.s = PzWertC + "-" + uiPass
For a = 1 To Len(PzWertA)
PokeC(*Buffer + a + a - 2, Asc(Mid(PzWertA,a,1)))
PokeC(*Buffer + a + a - 1, 0)
Next
PzWertB.s = MD5Fingerprint(*Buffer, Len(PzWertA) + Len(PzWertA))
FreeMemory(*Buffer)
SeiteLaden("/login_sid.lua?response=" + PzWertC + "-" + PzWertB)
ProcedureReturn FindeDaten("SID")
EndProcedure
SessionID = fbSID()
O_o
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Re: FritzBox DECT-Monitor in Webgadget
Ist dieser Source komplett lauffähig, oder fehlt da noch was mit Network...?
Habe nur mal kurz getestet und kann mir nicht vorstellen ohne Benutzer und Passwort,
wie man die Fritzbox einstellen kann, das es so funktioniert.
Gruß,
Falko
Habe nur mal kurz getestet und kann mir nicht vorstellen ohne Benutzer und Passwort,
wie man die Fritzbox einstellen kann, das es so funktioniert.
Gruß,
Falko
Re: FritzBox DECT-Monitor in Webgadget
Wenn ich den Code richtig verstanden habe, nutzt er für den Login direkt in der "Adresszeile" ein Script per PHP/Lua.Falko hat geschrieben:Ist dieser Source komplett lauffähig, oder fehlt da noch was mit Network...?
Habe nur mal kurz getestet und kann mir nicht vorstellen ohne Benutzer und Passwort,
wie man die Fritzbox einstellen kann, das es so funktioniert.
PB 4.00 | Windows XP Home SP3
Re: FritzBox DECT-Monitor in Webgadget
Mit den 3 Zeilen zusätzlich läuft der Code:
FBIP kann natürlich auch als IP eingegeben weden, falls man mehrere Fritten im Netzwerk hat.
Der Code macht genau das, was in dem AVM-PDF steht. Er holt sich vom Script "login_sid.lua" der Fritzbox die Challenge und erzeugt aus dem Frittenpasswort "uiPass" und der Challenge den Response, sendet den erneut zur Box und bekommt die SID, mit der kann man dann jede Seite der Box direkt per Link aufrufen, z.B. Für die Rufumleitungen oder Für den DECT-Monitor.
Code: Alles auswählen
FBIP = "fritz.box"
uiPass = "Passwort"
InitNetwork()
Der Code macht genau das, was in dem AVM-PDF steht. Er holt sich vom Script "login_sid.lua" der Fritzbox die Challenge und erzeugt aus dem Frittenpasswort "uiPass" und der Challenge den Response, sendet den erneut zur Box und bekommt die SID, mit der kann man dann jede Seite der Box direkt per Link aufrufen, z.B.
Code: Alles auswählen
"/fon_num/rul_edit.lua?sid=" + SessionID
Code: Alles auswählen
"/dect/dect_moni.lua?sid=" + SessionID
O_o
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Re: FritzBox DECT-Monitor in Webgadget
Für eine normale Anmeldung bei der Fritzbox reicht ja das Passwort alleine.
Aber wie muss man das nun mit dem Benutzernamen machen, wenn man diesen in
der Fritzbox aktiviert hat?
Aber wie muss man das nun mit dem Benutzernamen machen, wenn man diesen in
der Fritzbox aktiviert hat?
AVM hat geschrieben:Ermittlung des Response-Wertes
Beim neuen Login-Verfahren wird also das Klartextpasswort
login:command/password=<klartextpassword>
ersetzt durch
login:command/response=<response>
Der Response-Wert wird wie folgt gebildet:
<response> = <challenge>-<md5>
Der Wert <challenge> kann aus der Datei login_sid.xml bzw. login_sid.lua ausgelesen werden
und <md5> ist der MD5 (32 Hexzeichen mit Kleinbuchstaben) von
<challenge>-<klartextpassword>
.© AVM GmbH • 17.12.2012 • Seite 3 von 6
avm.de
Der MD5-Hash wird über die Bytefolge der UTF-16LE-Codierung dieses
Strings gebildet (ohne BOM und ohne abschließende 0-Bytes).
Aus Kompatibilitätsgründen muss für jedes Zeichen, dessen Unicode Codepoint > 255 ist, die
Codierung des "."-Zeichens benutzt werden (0x2e 0x00 in UTF-16LE). Dies betrifft also alle
Zeichen, die nicht in ISO-8859-1 dargestelltwerden können, z. B. das Euro-Zeichen.
Abschließend ein Beispiel mit deutschem Umlaut:
Die Challenge
<challenge> = "1234567z"
kombiniert mit dem Kennwort
<klartextpassword> = "äbc"
ergibt den Wert
<response> = "1234567z-9e224a41eeefa284df7bb0f26c2913e2"
Re: FritzBox DECT-Monitor in Webgadget
Gute Frage, nächste Frage.
Also wenn ich extern auf die Box zugreife, hab ich ja auch Benutzer und PW einzugeben, komme dann aber auch auf die Seite wo ich nochmal das Frittenpasswort eingeben muß.
Vielleicht geht das nur mit dem "Standart"-User, oder man hängt noch ein username=wasauchimmer mit in den Request.
Also wenn ich extern auf die Box zugreife, hab ich ja auch Benutzer und PW einzugeben, komme dann aber auch auf die Seite wo ich nochmal das Frittenpasswort eingeben muß.
Vielleicht geht das nur mit dem "Standart"-User, oder man hängt noch ein username=wasauchimmer mit in den Request.
O_o
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Re: FritzBox DECT-Monitor in Webgadget
Irgendwo ein Passwort vor dem "-" einfügen in UTF16 sowie auch MD5 zu verschlüsseln um
damit die richtige SSID herauszubekommen ist mir leider noch nicht gelungen. Wegen dem Verständnis wir
es wohl bei mir etwas länger dauern .
Bei der Firmwareversion 6.03 sollte auch von ausserhalb ein Zugriff nur über Benutzer und Passwort möglich sein,
soweit man die Rechte für diesen Benutzer vorgegeben hat. Eigentlich dürfte dann kein Fritzpasswort extra abgefragt
werden, wie es in den älteren Firmwareversionen war. Aber vielleicht ist das auch ganz was anderes als
der Zugriff im Heimnetz um nur die Telefonlisten aufzulisten, wie es ein Programm JAnrufmonitor schon macht.
Ich habe schon einige Versuche gemacht in deinem Code das Passwort an geeignete Stelle einzusetzen, bin aber
aus Verständinsgründen nicht sehr weit gekommen.
Zwar konnte ich mit Debug die xml-Ausgabe anzeigen lassen, nur nützt mir das leider sehr wenig
MfG,
Falko
damit die richtige SSID herauszubekommen ist mir leider noch nicht gelungen. Wegen dem Verständnis wir
es wohl bei mir etwas länger dauern .
Bei der Firmwareversion 6.03 sollte auch von ausserhalb ein Zugriff nur über Benutzer und Passwort möglich sein,
soweit man die Rechte für diesen Benutzer vorgegeben hat. Eigentlich dürfte dann kein Fritzpasswort extra abgefragt
werden, wie es in den älteren Firmwareversionen war. Aber vielleicht ist das auch ganz was anderes als
der Zugriff im Heimnetz um nur die Telefonlisten aufzulisten, wie es ein Programm JAnrufmonitor schon macht.
Ich habe schon einige Versuche gemacht in deinem Code das Passwort an geeignete Stelle einzusetzen, bin aber
aus Verständinsgründen nicht sehr weit gekommen.
Zwar konnte ich mit Debug die xml-Ausgabe anzeigen lassen, nur nützt mir das leider sehr wenig
MfG,
Falko
Re: FritzBox DECT-Monitor in Webgadget
Verstehe ich zwar nicht ganz, aber um hier den Code nicht so zu zerstückeln, nochmal zusammen mit User:Falko hat geschrieben: Ich habe schon einige Versuche gemacht in deinem Code das Passwort an geeignete Stelle einzusetzen, bin aber
aus Verständinsgründen nicht sehr weit gekommen.
Code: Alles auswählen
InitNetwork()
Global FBIP.s, uiPass.s, gSeite.s, SessionID.s
Global Zeilenumbuch.s = Chr(13)+Chr(10)
;die 3Zeilen entsprechend anpassen
FBIP = "fritz.box"
uiPass = "Passwort"
user = "Benutzer"
Procedure SeiteLaden(Seite.s)
gSeite = ""
If ReceiveHTTPFile("http://" + FBIP + Seite,"td.fritz")
If ReadFile(0, "td.fritz")
While Eof(0) = 0
gSeite = gSeite + ReadString(0)
Wend
CloseFile(0)
Else
MessageRequester("Fehler", "Fehler beim Lesen der Daten!")
EndIf
Else
MessageRequester("Fehler", "Fehler beim Laden der Seite" + Zeilenumbuch + Seite)
EndIf
EndProcedure
Procedure.s FindeDaten(Suche.s, Stelle = 1, eSuche.s = "")
aSuche.s = "<" + Suche + ">"
If eSuche = "" : eSuche.s = "</" + Suche + ">" : EndIf
PzWertA.s = StringField(gSeite, Stelle + 1, aSuche)
ProcedureReturn StringField(PzWertA, 1, eSuche)
EndProcedure
Procedure.s fbSID()
SeiteLaden("/login_sid.lua")
*Buffer = AllocateMemory(200)
PzWertC.s = FindeDaten("Challenge")
PzWertA.s = PzWertC + "-" + uiPass
For a = 1 To Len(PzWertA)
PokeC(*Buffer + a + a - 2, Asc(Mid(PzWertA,a,1)))
PokeC(*Buffer + a + a - 1, 0)
Next
PzWertB.s = MD5Fingerprint(*Buffer, Len(PzWertA) + Len(PzWertA))
FreeMemory(*Buffer)
SeiteLaden("/login_sid.lua?response=" + PzWertC + "-" + PzWertB + "&username=" + user)
ProcedureReturn FindeDaten("SID")
EndProcedure
SessionID = fbSID
O_o