Fritzbox: Statusanfragen per UPnP: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(6 dazwischenliegende Versionen derselben Benutzerin werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
<div style="margin: 0; margin-top:10px; margin-right:10px; border: 1px solid #333333; padding: 0em 1em 1em 1em; background-color:#1B1C2D; align:right;"> | |||
<br><center>[[Datei:ZD-Logo.png]]</center> | |||
<div style="margin: 0; margin-top:10px; margin-right:10px; border: 1px solid # | <center><big><span style="color:#B5B5B5;">'''''Das Board mit Freiheiten'''''</span></big></center> | ||
<br> | <font color=white></font> | ||
<center | |||
< | |||
---- | ---- | ||
<div style="margin: | <br> | ||
< | <div style="margin: 0px 20px 15pt 15pt; border: 2px solid rgb(223, 223, 223); padding: 0em 1em 1em; background-color:#303140; border: 1px solid #000000;"> | ||
<br /> | |||
{{Navi-Tipps+Tricks}} | |||
== Statusanfragen per UPnP == | == Statusanfragen per UPnP == | ||
Zeile 14: | Zeile 14: | ||
Über Skripte wie das folgende können verschiedene Parameter der Fritz!Box per UPnP/SOAP ausgelesen werden. Hier wird der momentane Durchsatz abgefragt (Bytes in/out), bzw. mit der Option "-ip" erscheint die aktuelle externe IP-Adresse. Die Option "-a" gibt alle Informationen über die DSL-Schnittstelle aus. | Über Skripte wie das folgende können verschiedene Parameter der Fritz!Box per UPnP/SOAP ausgelesen werden. Hier wird der momentane Durchsatz abgefragt (Bytes in/out), bzw. mit der Option "-ip" erscheint die aktuelle externe IP-Adresse. Die Option "-a" gibt alle Informationen über die DSL-Schnittstelle aus. | ||
<pre> | <pre style="height: 300px; overflow: scroll;"> | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 54: | Zeile 54: | ||
Das oben aufgeführte Script funktioniert nicht mehr mit neueren Firmwareversionen, da diese das "Content-Lenght" Feld auswerten. Das folgende modifizierte Skript läuft auf neueren Frimwareversionen (getestet 29.04.40), auf älteren hingegen nicht. Diese scheinen den xml content nicht richtig zu interpretieren. | Das oben aufgeführte Script funktioniert nicht mehr mit neueren Firmwareversionen, da diese das "Content-Lenght" Feld auswerten. Das folgende modifizierte Skript läuft auf neueren Frimwareversionen (getestet 29.04.40), auf älteren hingegen nicht. Diese scheinen den xml content nicht richtig zu interpretieren. | ||
<pre> | <pre style="height: 300px; overflow: scroll;"> | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 126: | Zeile 126: | ||
done | done | ||
</pre> | </pre> | ||
== Quellenangaben == | |||
http://www.wehavemorefun.de/fritzbox/ | |||
== Wichtige Links == | |||
*[[Fritzbox Tipps & Tricks|Zurück zu Tipps & Tricks]] | |||
*[[Hauptseite|Zurück zu Hauptseite]] | |||
[[Category:Fritzbox]] |
Aktuelle Version vom 17. November 2013, 21:21 Uhr
Zebradem AVM Wiki >> Fritzbox Tipps & Tricks >> Fritzbox: Statusanfragen per UPnP | Magyar, Nederlands, Italiano, English |
Community | Modelle | Freetz | Fritzbox Tipps & Tricks |
Hardware-Tipps | System-Tipps | Netzwerk-Tipps | Telefonie-Tipps | Software-Tipps | Sonstige Tipps |
Statusanfragen per UPnP
Über Skripte wie das folgende können verschiedene Parameter der Fritz!Box per UPnP/SOAP ausgelesen werden. Hier wird der momentane Durchsatz abgefragt (Bytes in/out), bzw. mit der Option "-ip" erscheint die aktuelle externe IP-Adresse. Die Option "-a" gibt alle Informationen über die DSL-Schnittstelle aus.
#!/bin/bash NETCAT=`which netcat` [ -z "$NETCAT" ] && NETCAT=`which nc` [ -z "$NETCAT" ] && exit 1 INTERFACE_NS="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1" WANIP_NS="urn:schemas-upnp-org:service:WANIPConnection:1" if [ "$1" = "-ip" ]; then NS="$WANIP_NS" REQUEST="GetExternalIPAddress" SED='/^<NewExternalIP/ s,</\?NewExternalIPAddress>,,gp' else NS="$INTERFACE_NS" REQUEST="GetAddonInfos" if [ "$1" = "-a" ]; then SED='s,<New,<, ; /^<[a-zA-Z]*[ >]/ s,^<\([^> ]*\) *>\([^<]*\)</.*,\1\t\2,p' else SED='s/Send/OUT/ ; s/Receive/IN/ ; /^<NewByte/ s,^<NewByte\([^>]*\)Rate>\([^<]*\)<.*,\1\t\2,gp' fi fi ( $NETCAT 192.168.178.1 49000 | sed -ne "$SED" ) <<EOF POST /upnp/control/WANCommonIFC1 HTTP/1.1 Content-Type: text/xml; charset="utf-8" HOST: 192.168.178.1:49000 Content-Length: 0 SOAPACTION: "$NS#$REQUEST" <?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:$REQUEST xmlns:u=$NS /></s:Body> </s:Envelope> EOF
Das oben aufgeführte Script funktioniert nicht mehr mit neueren Firmwareversionen, da diese das "Content-Lenght" Feld auswerten. Das folgende modifizierte Skript läuft auf neueren Frimwareversionen (getestet 29.04.40), auf älteren hingegen nicht. Diese scheinen den xml content nicht richtig zu interpretieren.
#!/bin/bash FRITZ_IP=192.168.178.1 NETCAT=`which netcat` [ -z "$NETCAT" ] && NETCAT=`which nc` [ -z "$NETCAT" ] && exit 1 ( [ -n "$FRITZ_IP" ] && $NETCAT -z $FRITZ_IP 49000 ) || exit 1; INTERFACE_NS="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1" WANIP_NS="urn:schemas-upnp-org:service:WANIPConnection:1" if [ "$1" = "-ip" ]; then NS="$WANIP_NS" REQUEST="GetExternalIPAddress" SED='/^<NewExternalIP/ s,</\?NewExternalIPAddress>,,gp' else NS="$INTERFACE_NS" REQUEST="GetAddonInfos" if [ "$1" = "-a" ]; then SED='s,<New,<, ; /^<[a-zA-Z]*[ >]/ s,^<\([^> ]*\) *>\([^<]*\)</. *,\1\t\2,p' else SED='s/Send/OUT/ ; s/Receive/IN/ ; /^<NewByte/ s,^<NewByte\([^>] *\)Rate>\([^<]*\)<.*,\1\t\2,gp' fi fi body="<?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:$REQUEST xmlns:u=$NS /></s:Body>\ </s:Envelope>" ( $NETCAT $FRITZ_IP 49000 | sed -ne "$SED" ) <<EOF POST /upnp/control/WANCommonIFC1 HTTP/1.1 Content-Type: text/xml; charset="utf-8" HOST: $FRITZ_IP:49000 Content-Length: ${#body} SOAPACTION: "$NS#$REQUEST" $body EOF
UPnP-Anfrage aus Python heraus
Unter Verwendung einer High-Level-Skriptsprache und Rückgriff auf eine SOAP-Bibliothek geht es auch kompakter:
#!/usr/bin/env python from SOAPpy import SOAPProxy print SOAPProxy(proxy='http://192.168.178.1:49000/upnp/control/WANCommonIFC1', namespace='urn:schemas-upnp-org:service:WANIPConnection:1', soapaction='urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress', noroot=True).GetExternalIPAddress()
Getestet gegen eine FRITZ!Box 2170.
Anzumerken ist noch, dass die FRITZ!Box recht eigenwillige Vorstellungen von XML hat: ein entsprechendes Perl-Skript mit der Bibliothek SOAP::Lite bekommt immer eine Fehlermeldung der FRITZ!Box zurück, da es im Envelope-Element der XML-Nachricht neben dem soap-Namespace "http://schemas.xmlsoap.org/soap/envelope/" weitere Namespaces definiert (xsi, xsd) und diese Attribute vor das soap-Attribut stellt. Das mag die FRITZ!Box gar nicht; bearbeitet man eine SOAP::Lite-Nachricht manuell derart, dass das soap-Namespace-Attribut vor den anderen erscheint, klappt es...
Mögliche UPnP-Anfragen
Mögliche UPnP-Anfragen sind Beschreibungsdateien definiert, die sich wie folgt abrufen lassen ([1])
for i in igddesc.xml igdconnSCPD.xml igdicfgSCPD.xml igddslSCPD.xml ; do wget http://fritz.box:49000/$i done
Quellenangaben
http://www.wehavemorefun.de/fritzbox/