[fli4l] Fritzbox als VOIP-Client hinter fli4l nach dem IP-UP rebooten
Thomas Grunenberg
tho_gru at gmx.de
Fr Sep 16 22:52:27 CEST 2016
Am 15.09.2016 um 20:42 schrieb Erwin Lottermann:
> So war das nicht gemeint.
> Von den SOAP/TR-064-Schnittstellen halte ich schon viel.
> Wie der gleiche Autor unter dem Link, den Thomas gepostet hatte,
> schrieb, sind Skripte, die die Weboberfläche der Fritzboxen
> automatisieren, auf Dauer nicht verlässlich genug.
> https://www.administrator.de/wissen/powershell-fritzbox-tr-064-netzwerk-
> %20konfigurieren-auslesen-303474.html
>
> Es ist nur so, dass ich von Shellprogrammierung viel zu wenig Ahnung
> habe, um die hier geposteten Skripte nachvollziehen oder in den fli4l
> einbauen zu können.
>
Moin, moin,
Anbei ein Script, mit dem ich meine Fritz!Box vom fli4l aus, neu
gestartet habe. Im Script müssen ein paar Einstellungen vorgenommen werden:
1) Adresse der Fritz!Box den lokalen Gegebenheiten anpassen (FBaddr)
2) Name des Accounts auf der Fritz!Box (FBuser)
3) Passwort des Accounts auf der Fritz!Box (FBpass)
Wichtig: In der fli4l Konfiguration (ich nutze Version 3.10.7) habe ich
das Paket dyndns aktiviert (OPT_DYNDNS='yes' und DYNDNS_N='0'), damit
der crul Befehl zur Verfügung steht.
Damit das funktioniert müssen auf der Fritz!Box folgende Einstellungen
vorgenommen werden:
1) User anlegen
System/Fritz!Box-Benutzer:
- neues Konto mit *langem und sicheren* Passwort
- FRITZ!Box Einstellungen: *erlauben*
- Sprachnachrichten, Faxnachrichten, FRITZ!App Fon und Anrufliste:
*erlauben*
- Smart Home: *erlauben*
2) UPnP aktivieren
Heimnetz/Heimnetzübersicht/Reiter Netzwerkeinstellungen
- Zugriff für Anwendungen zulassen: *erlauben*
Damit das Script mit mkfli4l.bat eingebaut wird fehlen folgende
(wahrscheinlich) Schritte:
1) Das Opt usercmd aktivieren und das Script eintragen
2) Das Script aus ip-up "irgendwie" starten. Gibt es dafür Hooks, wo so
ein Aufruf eingehängt werden kann?
Gruß
Thomas
-------------- nächster Teil --------------
#!/bin/sh
set -u
# IP-Adresse oder Name der Fritz!Box
FBaddr="fritz"
FBport="49000"
FBuser="user"
FBpass="password"
get_control_url() {
curl -s "http://${FBaddr}:${FBport}/tr64desc.xml" |
sed -e '/'"${1}"'<\/controlURL\>/!d' -e 's/^<controlURL>//' -e 's/<\/controlURL>.*$//'
}
get_urn() {
curl -s "http://${FBaddr}:${FBport}/tr64desc.xml" |
sed -e '/'"${1}"'<\/serviceType\>/!d' -e 's/^<serviceType>//' -e 's/<\/serviceType>.*$//'
}
control_url="$(get_control_url deviceinfo)"
urn="$(get_urn DeviceInfo:1)"
FBportSSL=$(curl -s -m 5 -X POST "http://${FBaddr}:${FBport}${control_url}" \
-H "Content-Type: text/xml; charset=\"utf-8\"" \
-H "SoapAction:${urn}#GetSecurityPort" \
-d "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"
s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">
<s:Body>
<u:GetSecurityPort xmlns:u=\"${urn}\">
</u:GetSecurityPort>
</s:Body>
</s:Envelope>" | \
grep 'NewSecurityPort' | sed 's#^.*<NewSecurityPort>\(.*\)<.*$#\1#')
echo SSL port for TR-064 is ${FBportSSL}
control_url="$(get_control_url deviceconfig)"
urn="$(get_urn DeviceConfig:1)"
curl -s --anyauth -u "${FBuser}:${FBpass}" --insecure \
-X POST "https://${FBaddr}:${FBportSSL}${control_url}" \
-H 'Content-Type: text/xml; charset=\"utf-8\"' \
-H "SoapAction:${urn}#Reboot" \
-d "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"
s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">
<s:Body>
<u:Reboot xmlns:u=\"${urn}\">
</u:Reboot>
</s:Body>
</s:Envelope>"
Mehr Informationen über die Mailingliste Fli4L