- Mitglied seit
- 6 Nov 2005
- Beiträge
- 3,727
- Punkte für Reaktionen
- 16
- Punkte
- 38
Ich bin seit mehreren Tagen dran, den DNS/DHCP-Server von AVM (multid) mit dem dnsmasq soweit es geht zu "verheiraten", damit man z.B. auch die Wirkung von dnsmasq in AVM-WebIF sehen kann. Die eigentliche Problematik mit dnsmasq und multid wird in einem separaten Thread behandelt, ich will hier vielmehr die allgemeine Thematik der AVM-Datenbank für diverse Einstellungen zur Diskussion stellen und eine (oder vielleicht mehrere) geeignete Methoden dazu finden, wie wir aus FREETZ heraus diese Datenbank ansprechen können.
Zunächst mal zur Vorgeschichte und zum aktuellen Stand der Dinge:
a) Früher hat man normalerweise ar7.cfg und Co. direkt editiert und mit diversen Tricks die Änderungen wirksam gemacht. Manchmal musste man dafür die Box rebooten.
b) Die Zeiten sind nun vorbei. AVM verwaltet alles über eine interne Datenbank, die von closed-source Binaries von AVM angesteuert wird. Ein direktes Editieren in ar7.cfg un Co. führt heutzutage oft dazu, dass die Datenbank und ar7.cfg "auseinander laufen". Das ist also nicht mehr der "sicherste" Weg, wie früher. Außerdem bekommt man solche Änderungen nicht mehr direkt in AVM-WebIF dargestellt, weil AVM-WebIF mit der Datenbank und nicht mit ar7.cfg "verbunden" ist.
c) Es gibt das Tool "ctlmgr_ctl" mit dem man diverse Parameter einzeln auslesen und verändern kann. Das Problem dabei ist allerdings, dass nicht alle Befehle "durchgehen". Manchmal muss man eine bestimmte Reihenfolge an den abgegebenen Befehlen einhalten, um gewünschte Ergebnisse zu erzielen.
d) Die Seite http://www.wehavemorefun.de/fritzbox/AVM_Wiki gibt eine relativ gute Auskunft über mehrere "versteckte" Commandos, die man mit "ctlmgr_ctl" ansteuern kann. Die klassischen Sachen sind dort gut dokumentiert und funktionieren sofort, will man aber etwas tiefer graben (wie in meinem Fall mit DNS/DHCP), so kommt man an die Grenzen der Seite. Die Informationen werden nicht mehr vollständig, nicht mehr aktuell oder fehlen einfach, weil es noch keiner ausprobiert hat.
e) Also, bleibt es nur selbst zu forschen und nach weiteren Informationen in Tiefen von AVM-Binaries zu suchen, was ich auch aktiv letzte Zeit getan hatte. Wenn man nämlich die Binaries von multid, ctlmgr und Co. nach bekannten Zeichenketten durchsucht, wird man relativ schnell fündig, und findet die versteckten Befehle. So habe ich z.B. herausgefunden, wie man über ctlmgr_ctl die Hosts aus der AVM-Liste löschen kann.
Soweit so gut. Oben hatte ich aber schon eingedeutet, dass es mir eigentlich nicht ausreicht. Über ctlmgr_ctl sind sehr viele Dinge gesperrt und können nicht verändert werden. Zunächst dachte ich, dass dies prinzipbedingt ist und dass man sich damit abfinden müsste, bis ich gestern mir die LUA-Skripte von AVM angeschaut hatte. Und dort arbeitet AVM sehr oft mit den ganzen Sektionen, anstatt mit einzelnen Variablen, wie es unter ctlmgr_ctl üblich ist. Ich habe dort schon eine Passage gesehen, wo die komplette Sektion aus der Datenbank eingelesen wird, einige Teile davon bearbeitet werden und dann wieder als Sektion zurückgespielt, wenn sogar nicht direkt "Operation am offenen Herzen". Also, grundsätzlich sind solche "uneingeschränkte" Manipulationen an der AVM-Datenbank möglich. Die Frage ist nur, wie wir dran kommen könnten, um sie zu verwenden. Leider stecken diese Funktionen, die AVM dafür in LUA verwendet, in der geschlossenen LUA-Bibliothek und man kommt nicht an die Quellen dran (AVM hat nicht umsonst LUA gewählt, alleine schon wegen BSD/MIT-Lizenz). Man weiß aber, wie man die Funktionen ansteuern muss, weil alle Aufrufe ja in den LUA-Skripten zu sehen sind.
Nun meine Fragen / Ideen:
1. Ob der Weg wirklich über LUA gehen muss, weiß ich nicht. Der LUA-Interpreter von AVM ist erstmal mit dem AVM-WebIF und multid "fest verdrahtet". Ich kenne leider nicht den Weg, wie man LUA-Programme außerhalb von AVM-WebIF laufen lassen könnte und zwar so, dass sie auch die AVM-Bibliothek verwenden.
2. Vielleicht muss man gar nicht komplett über LUA gehen, und es reicht nur die LUA-Bibliothek von AVM in ein C-Programm von uns einzubinden. Würde sowas prinzipiell gehen?
3. Vielleicht lassen wir uns zwar von LUA insperieren, gehen aber komplett andere Wege, um die Datenbank anzusprechen. Z.B. über "Message Endpoints":
http://www.wehavemorefun.de/fritzbox/Message_Endpoint
Ich habe leider dort aus den Beispielen nicht so ganz verstanden, wie man sein C-Programm gestalten soll, um so ein "Message Endpoint" anzusprechen. Auf der Webseite gab es irgendwo ein Beispiel (finde ich gerade nicht mehr), wo so eine xml-artige Kommunikation dargestellt wurde. Also rein theoretisch wäre es zumindest möglich, wenn man genau weiß, was man senden muss und in welchem Format.
Was ist eure Meinung dazu? Ich brauche ein Paar Tipps, damit ich an der Baustelle noch tiefer graben könnte.
Wenn wir das Problem mit dem Ansprechen der AVM-Datenbank generell lösen könnten, hätten wir uns das Leben an sehr vielen weiteren Stellen deutlich einfacher gemacht, wo es darum geht, auf die AVM-Sachen von FREETZ aus zuzugreifen.
MfG
Zunächst mal zur Vorgeschichte und zum aktuellen Stand der Dinge:
a) Früher hat man normalerweise ar7.cfg und Co. direkt editiert und mit diversen Tricks die Änderungen wirksam gemacht. Manchmal musste man dafür die Box rebooten.
b) Die Zeiten sind nun vorbei. AVM verwaltet alles über eine interne Datenbank, die von closed-source Binaries von AVM angesteuert wird. Ein direktes Editieren in ar7.cfg un Co. führt heutzutage oft dazu, dass die Datenbank und ar7.cfg "auseinander laufen". Das ist also nicht mehr der "sicherste" Weg, wie früher. Außerdem bekommt man solche Änderungen nicht mehr direkt in AVM-WebIF dargestellt, weil AVM-WebIF mit der Datenbank und nicht mit ar7.cfg "verbunden" ist.
c) Es gibt das Tool "ctlmgr_ctl" mit dem man diverse Parameter einzeln auslesen und verändern kann. Das Problem dabei ist allerdings, dass nicht alle Befehle "durchgehen". Manchmal muss man eine bestimmte Reihenfolge an den abgegebenen Befehlen einhalten, um gewünschte Ergebnisse zu erzielen.
d) Die Seite http://www.wehavemorefun.de/fritzbox/AVM_Wiki gibt eine relativ gute Auskunft über mehrere "versteckte" Commandos, die man mit "ctlmgr_ctl" ansteuern kann. Die klassischen Sachen sind dort gut dokumentiert und funktionieren sofort, will man aber etwas tiefer graben (wie in meinem Fall mit DNS/DHCP), so kommt man an die Grenzen der Seite. Die Informationen werden nicht mehr vollständig, nicht mehr aktuell oder fehlen einfach, weil es noch keiner ausprobiert hat.
e) Also, bleibt es nur selbst zu forschen und nach weiteren Informationen in Tiefen von AVM-Binaries zu suchen, was ich auch aktiv letzte Zeit getan hatte. Wenn man nämlich die Binaries von multid, ctlmgr und Co. nach bekannten Zeichenketten durchsucht, wird man relativ schnell fündig, und findet die versteckten Befehle. So habe ich z.B. herausgefunden, wie man über ctlmgr_ctl die Hosts aus der AVM-Liste löschen kann.
Soweit so gut. Oben hatte ich aber schon eingedeutet, dass es mir eigentlich nicht ausreicht. Über ctlmgr_ctl sind sehr viele Dinge gesperrt und können nicht verändert werden. Zunächst dachte ich, dass dies prinzipbedingt ist und dass man sich damit abfinden müsste, bis ich gestern mir die LUA-Skripte von AVM angeschaut hatte. Und dort arbeitet AVM sehr oft mit den ganzen Sektionen, anstatt mit einzelnen Variablen, wie es unter ctlmgr_ctl üblich ist. Ich habe dort schon eine Passage gesehen, wo die komplette Sektion aus der Datenbank eingelesen wird, einige Teile davon bearbeitet werden und dann wieder als Sektion zurückgespielt, wenn sogar nicht direkt "Operation am offenen Herzen". Also, grundsätzlich sind solche "uneingeschränkte" Manipulationen an der AVM-Datenbank möglich. Die Frage ist nur, wie wir dran kommen könnten, um sie zu verwenden. Leider stecken diese Funktionen, die AVM dafür in LUA verwendet, in der geschlossenen LUA-Bibliothek und man kommt nicht an die Quellen dran (AVM hat nicht umsonst LUA gewählt, alleine schon wegen BSD/MIT-Lizenz). Man weiß aber, wie man die Funktionen ansteuern muss, weil alle Aufrufe ja in den LUA-Skripten zu sehen sind.
Nun meine Fragen / Ideen:
1. Ob der Weg wirklich über LUA gehen muss, weiß ich nicht. Der LUA-Interpreter von AVM ist erstmal mit dem AVM-WebIF und multid "fest verdrahtet". Ich kenne leider nicht den Weg, wie man LUA-Programme außerhalb von AVM-WebIF laufen lassen könnte und zwar so, dass sie auch die AVM-Bibliothek verwenden.
2. Vielleicht muss man gar nicht komplett über LUA gehen, und es reicht nur die LUA-Bibliothek von AVM in ein C-Programm von uns einzubinden. Würde sowas prinzipiell gehen?
3. Vielleicht lassen wir uns zwar von LUA insperieren, gehen aber komplett andere Wege, um die Datenbank anzusprechen. Z.B. über "Message Endpoints":
http://www.wehavemorefun.de/fritzbox/Message_Endpoint
Ich habe leider dort aus den Beispielen nicht so ganz verstanden, wie man sein C-Programm gestalten soll, um so ein "Message Endpoint" anzusprechen. Auf der Webseite gab es irgendwo ein Beispiel (finde ich gerade nicht mehr), wo so eine xml-artige Kommunikation dargestellt wurde. Also rein theoretisch wäre es zumindest möglich, wenn man genau weiß, was man senden muss und in welchem Format.
Was ist eure Meinung dazu? Ich brauche ein Paar Tipps, damit ich an der Baustelle noch tiefer graben könnte.
Wenn wir das Problem mit dem Ansprechen der AVM-Datenbank generell lösen könnten, hätten wir uns das Leben an sehr vielen weiteren Stellen deutlich einfacher gemacht, wo es darum geht, auf die AVM-Sachen von FREETZ aus zuzugreifen.
MfG