[fli4l] Fritzbox als VOIP-Client hinter fli4l nach dem IP-UP rebooten

Thomas Grunenberg tho_gru at gmx.de
So Nov 13 13:28:22 CET 2016


Moin, moin,

Da beim Rebooten der Fritz!Box jeweils das Log gelöscht wird, habe ich 
ein Script geschrieben, welches die Log aus das Firtz!Box in einer Datei 
speichert.

Das interessante an dem Script ist, dass sowohl TR-064 Befehle als auch 
LUA-Kommandos genutzt werden. Die für das LUA-Kommando nötige SID 
liefert das TR-064-Kommando GetPhonebook.

Damit das Script funktioniert muss UPnP auf der Fritz!Box aktiv sein 
(siehe vorheriges Post).

In fli4l muss das Paket dyndns aktiviert (OPT_DYNDNS='yes' und 
DYNDNS_N='0'), damit der crul Befehl zur Verfügung steht.

Folgende Einstellungen im Script sollten geprüft und entsprechend 
angepasst werden:
1) Adresse der Fritz!Box - Variable *FBaddr*
2) Port der Fritz!Box - Variable *FBport*
3) UPnP-Account der Fritz!Box - Variable *FBuser*
4) Passwort für UPnP-Account - Variable *FBpass*
5) Verzeichnis für gespeicherte Log-Dateien - Variable *LOGdir*
6) Optional Name der Datei - Variable *LOGfile*

Gruß
Thomas
-------------- nächster Teil --------------
#!/bin/sh

set -u

FBaddr="fritz.box"
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 x_contact)"
urn="$(get_urn X_AVM-DE_OnTel:1)"

FBphoneBookURL=$(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}#GetPhonebook" \
    -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:GetPhonebook xmlns:u=\"${urn}\">
	<NewPhonebookID>0</NewPhonebookID>
        </u:GetPhonebook>
        </s:Body>
        </s:Envelope>" |
	grep "NewPhonebookURL" | sed -e 's/<NewPhonebookURL>//g' -e 's/<\/NewPhonebookURL>//g' )

SID=$(echo "${FBphoneBookURL}" | sed -n -e 's/.*\?sid=\([0-9a-f]*\)\&.*/\1/p')

filter_log() {
	echo "######## $(date -u) ########"
	sed -e 's/^ *"_node" *: *"//' -e 's/", *$//'
}

LOGdir=/var/lib/persistent/aaa
LOGfile=FB-log-$(date +"%Y%m%d").log
FILE="${LOGdir}/${LOGfile}"
curl -s --insecure "https://${FBaddr}/query.lua?mq_log=logger:status/log&sid=${SID}" |
grep -e '"_node" *: *' |
filter_log >> "${FILE}"


Mehr Informationen über die Mailingliste Fli4L