- Mitglied seit
- 7 Nov 2006
- Beiträge
- 2,927
- Punkte für Reaktionen
- 3
- Punkte
- 36
Seit Jahren habe ich mal wieder mit meiner Box herumgespielt - ausnahmsweise nicht mit Freetz, wie früher, sondern mit dem Ehrgeiz, einige Dinge mit Bordmitteln von der Konsole aus zu regeln. Dabei stieß ich nebenbei auf die (drei Jahre alte) Frage von nereux, wie man automatisiert das WLAN-Paßwort ändern könne. Das hatte ich zwar nicht vor, aber ich wurde neugierig und fand heraus, wie das grundsätzlich geht:
Man braucht dazu Stand heute (getestet auf einer 7270 v1 mit Firmware 54.04.88)
Die zu ändernden Werte der WLAN-Konfiguration befinden sich im TFFF (Flash-Konfigurationsspeicher) der Box unter /var/flash/wlan.cfg. Man kann sie mit dem cat-Befehl ausgeben bzw. z.B. nach /var/tmp oder auf ein USB-Medium in eine temporäre Datei kopieren, um dort die zu ändernden Werte mit einem Editor zu bearbeiten. Ich gehe im Folgenden davon aus, daß der Leser weiß, wie man Telnet auf der Box zum Laufen bekommt und wie man den vi-Editor bedient bzw. wie man alternativ vom PC oder Mac aus übers Netzwerk an einen freigegebenen USB-Speicher herankommt und dann Dateien mit UNIX-Zeilenenden editiert.
Spaßeshalber noch ein kleiner Trick: Mittels Kommandozeilenparameter -c kann man /bin/wlancfgconv dazu bewegen, nebenbei mal die verschlüsselt gespeicherten Paßwörter zu dechiffrieren:
Dieser Schritt ist nicht notwendig, aber er hilft dabei, durch einfaches Ändern der entsprechenden Parameter - die unveränderten Zeilen darf man einfach herauslöschen - gleich eine Datei im richtigen Format zu erhalten. Genauso gut könnte man eine Datei mit Änderungen "from scratch" schreiben. Nehmen wir weiter an, wir wollen genau zwei Parameter ändern: die SSID (also den Namen) des WLAN-Netzwerks sowie das Paßwort. Wir kürzen also die Datei aufs Notwendigste und erhalten:
Jetzt schreiben wir die Änderungen (quasi mittels Merge) zurück ins TFFS und rufen dann ein Skript auf, welches die Änderungen auch gleich in Betrieb nimmt:
In wenigen Sekunden sollte der neue Netzwerkname des WLAN zu sehen sein, und auch das neue Paßwort ist bereits aktiv. Man kann selbstverständlich auch nur das Paßwort ändern und die SSID gleich lassen. Das verkürzt obige Konfigurationsdatei sogar noch um eine Zeile (die mit "ssid" würden wir dann löschen).
Damit auch der Webserver der Box - er hält stur die alten Werte im Cache, selbst bei einem Refresh - auf den Konfigurationsseiten gleich die aktualisierten Werte anzeigt, halten wir ihn an und starten ihn einfach neu:
Das Ganze jetzt in ein einziges, automatisiertes Skript umzuwandeln, welches z.B. mittels sed einfach den "pskvalue" verändert - Achtung, es gibt auch einen fürs Gäste-WLAN - sollte trivial sein.
Anmerkungen:
Man braucht dazu Stand heute (getestet auf einer 7270 v1 mit Firmware 54.04.88)
- eine temporäre Datei mit den zu ändernden Werten (s.u.),
- /bin/wlancfgconv,
- /bin/wlancfgchanged,
- /usr/bin/ctlmgr.
Die zu ändernden Werte der WLAN-Konfiguration befinden sich im TFFF (Flash-Konfigurationsspeicher) der Box unter /var/flash/wlan.cfg. Man kann sie mit dem cat-Befehl ausgeben bzw. z.B. nach /var/tmp oder auf ein USB-Medium in eine temporäre Datei kopieren, um dort die zu ändernden Werte mit einem Editor zu bearbeiten. Ich gehe im Folgenden davon aus, daß der Leser weiß, wie man Telnet auf der Box zum Laufen bekommt und wie man den vi-Editor bedient bzw. wie man alternativ vom PC oder Mac aus übers Netzwerk an einen freigegebenen USB-Speicher herankommt und dann Dateien mit UNIX-Zeilenenden editiert.
Spaßeshalber noch ein kleiner Trick: Mittels Kommandozeilenparameter -c kann man /bin/wlancfgconv dazu bewegen, nebenbei mal die verschlüsselt gespeicherten Paßwörter zu dechiffrieren:
Code:
wlancfgconv -c -o /var/tmp/wlan_decrypted.cfg
# Dort findet man dann sowas wie:
# pskvalue = "WLAN_PW_im_Klartext";
Dieser Schritt ist nicht notwendig, aber er hilft dabei, durch einfaches Ändern der entsprechenden Parameter - die unveränderten Zeilen darf man einfach herauslöschen - gleich eine Datei im richtigen Format zu erhalten. Genauso gut könnte man eine Datei mit Änderungen "from scratch" schreiben. Nehmen wir weiter an, wir wollen genau zwei Parameter ändern: die SSID (also den Namen) des WLAN-Netzwerks sowie das Paßwort. Wir kürzen also die Datei aufs Notwendigste und erhalten:
Code:
wlancfg {
ssid = "Mein_WLAN_Name";
pskvalue = "Mein_neues_PW";
}
Jetzt schreiben wir die Änderungen (quasi mittels Merge) zurück ins TFFS und rufen dann ein Skript auf, welches die Änderungen auch gleich in Betrieb nimmt:
Code:
wlancfgconv -M /var/tmp/wlan_decrypted.cfg
wlancfgchanged
In wenigen Sekunden sollte der neue Netzwerkname des WLAN zu sehen sein, und auch das neue Paßwort ist bereits aktiv. Man kann selbstverständlich auch nur das Paßwort ändern und die SSID gleich lassen. Das verkürzt obige Konfigurationsdatei sogar noch um eine Zeile (die mit "ssid" würden wir dann löschen).
Damit auch der Webserver der Box - er hält stur die alten Werte im Cache, selbst bei einem Refresh - auf den Konfigurationsseiten gleich die aktualisierten Werte anzeigt, halten wir ihn an und starten ihn einfach neu:
Code:
ctlmgr -s
ctlmgr
Das Ganze jetzt in ein einziges, automatisiertes Skript umzuwandeln, welches z.B. mittels sed einfach den "pskvalue" verändert - Achtung, es gibt auch einen fürs Gäste-WLAN - sollte trivial sein.
Anmerkungen:
- In älteren Firmwares gab es kein wlancfgconv, da ging das Ganze noch mittels
Code:allcfgconv -C wlan ...
- Wenn man auf der Box mal nach *cfgconv-Skripten sucht, findet man, je nach Firmware-Version, unterschiedliche, z.B.
Code:find / -name '*cfgconv' /bin/allcfgconv # in alten FW oft der einzige Treffer /bin/usbcfgconv # USB-Konfiguration /bin/wlancfgconv # WLAN-Konfiguration, wie gezeigt
- Auch wenn man nach *cfgchanged-Skripten sucht, findet man mehrere Treffer, die man dann analog nach durchgeführten Änderungen aufrufen sollte:
Code:find / -name '*cfgchanged' /bin/voipcfgchanged # VoIP nach Konfigurationsänderung neu starten /bin/wlancfgchanged # WLAN nach Konfigurationsänderung neu starten /bin/ar7cfgchanged # sonstige Dienste nach Konfigurationsänderung neu starten
- TODO: Wenn jetzt noch jemand weiß, wie man Werte interaktiv oder mittels Stdin-Übergabe in den *cfgctl-Anwendungen ändert - wie man sie ausgibt mit oder ohne Variablennamen, weiß ich - wäre es schön, wenn er es hier im Thema berichten würde.
Code:find / -name '*cfgctl' /bin/ar7cfgctl /bin/usbcfgctl /bin/wlancfgctl
Zuletzt bearbeitet: