[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