Resource icon

TR064.pl

lano

Well-Known Member
c-b Experte
#1
lano hat eine neue Ressource erstellt:

TR064.pl - TR064 konfigurations Tool

TR-064 ist ein vom DSL-Forum entwickeltes Protokoll, um DSL-Internetzugangsgeräte aus dem lokalen Netz zu
konfigurieren. Es basiert auf dem UPnP-Standard (Universal Plug and Play), der allgemein zur herstellerübergreifenden Ansteuerung von Geräten in IP-basierten Netzwerken dient.

Hier hab ich mal ein Perl Modul begonnen um Informationen aus einer Fritz!Box auszulesen und Einstellungen per TR-064 zu ändern.

Das Modul:
Perl:
#!/usr/bin/perl

package TR064;

#use strict;
use Exporter;
use...
Weitere Informationen zu dieser Ressource...
 
#2
Hallo lano
Ich benutze statt Deiner Perl-Library einfaches bash; funktioniert für meine einfachen Abfragen eigentlich gut. Aber GetHostNumberOfEntries (siehe Subroutine ab Zeile 782 in Deiner Library) gibt bei mir nie mehr als 16 zurück, obwohl ich mehr Geräte im Netzwerk habe. Bist Du auf eine solche Limitierung gestossen bei Deinen Tests?
Grüsse
Al_
 

lano

Well-Known Member
c-b Experte
#3
gibt bei mir nie mehr als 16 zurück, obwohl ich mehr Geräte im Netzwerk habe. Bist Du auf eine solche Limitierung gestossen bei Deinen Tests?
Ne, das nicht. Bei mir funktioniert GetHostNumberOfEntries korrekt. Wie sieht das denn bei dir in bash aus? Vllt irgendwas übersehen?
Gibt aber nen paar Punkte in der Doku die nicht funktionieren.
 
Gefällt mir: Al_
#4
Hier die relevante Funktion aus meinem bash Skript.

Bash:
get_active_devices() {
   # used service: <service><serviceType>urn:dslforum-org:service:X_AVM-DE_Homeplug:1</serviceType><serviceId>urn:X_AVM-DE_Homeplug-com:serviceId:X_AVM-DE_Homeplug1</serviceId><controlURL>/upnp/control/x_homeplug</controlURL><eventSubURL>/upnp/control/x_homeplug</eventSubURL><SCPDURL>/x_homeplugSCPD.xml</SCPDURL></service>
   # seems to work without authentication, see
   # https://www.heise.de/forum/heise-Security/News-Kommentare/Fritzbox-Luecke-erlaubt-delikate-Einblicke-ins-lokale-Netz/GetGenericHostEntry/posting-30672030/show/
#   local hostcount=$( curl -4 -k --anyauth -u "${credentials}"                   \
   local hostcount=$( curl -4 -k                   \
        "http://${FB}:49000/upnp/control/hosts"                                        \
        -H 'Content-Type: text/xml; charset="utf-8"'                             \
        -H 'SoapAction: urn:dslforum-org:service:Hosts:1#GetHostNumberOfEntries' \
        -d '<?xml version="1.0" encoding="utf-8"?>
            <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                        xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
               <s:Body>
                  <u:GetHostNumberOfEntries xmlns:u="urn:dslforum-org:service:Hosts:1">
                  </u:GetHostNumberOfEntries>
               </s:Body>
            </s:Envelope>' )
   >&2 echo "Host count full line is ${hostcount}"
   hostcount=$( echo "${hostcount}" | grep --extended-regex --only-matching '<NewHostNumberOfEntries>.*<\/NewHostNumberOfEntries>' )
   >&2 echo "Host count (grep'ed) is ${hostcount}"
   if [ -z "${hostcount}" ] ; then
      >&2 echo "ERROR - hostcount could not be retrieved"
      return -1
   fi
   hostcount=${hostcount#<NewHostNumberOfEntries>}
   hostcount=${hostcount%<\/NewHostNumberOfEntries>}
   >&2 echo "Host count is ${hostcount}"
 

lano

Well-Known Member
c-b Experte
#5
Hmm. Also in deinem Skript seh ich so keinen Fehler. Bei mir funktioniert es auch wie es soll.

Bash:
lano@nemo:~/test/hostCount$ ./test.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   753  100   345  100   408    282    334  0:00:01  0:00:01 --:--:--   334
Host count full line is <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:GetHostNumberOfEntriesResponse xmlns:u="urn:dslforum-org:service:Hosts:1">
<NewHostNumberOfEntries>55</NewHostNumberOfEntries>
</u:GetHostNumberOfEntriesResponse>
</s:Body>
</s:Envelope>
Host count (grep'ed) is <NewHostNumberOfEntries>55</NewHostNumberOfEntries>
Host count is 55
Bash:
lano@nemo:~/test/hostCount$ cat test.sh
#!/bin/bash

FB=192.168.1.1

hostcount=""

get_active_devices() {
   # used service: <service><serviceType>urn:dslforum-org:service:X_AVM-DE_Homeplug:1</serviceType><serviceId>urn:X_AVM-DE_Homeplug-com:serviceId:X_AVM-DE_Homeplug1</serviceId><controlURL>/upnp/control/x_homeplug</controlURL><eventSubURL>/upnp/control/x_homeplug</eventSubURL><SCPDURL>/x_homeplugSCPD.xml</SCPDURL></service>
   # seems to work without authentication, see
   # https://www.heise.de/forum/heise-Security/News-Kommentare/Fritzbox-Luecke-erlaubt-delikate-Einblicke-ins-lokale-Netz/GetGenericHostEntry/posting-30672030/show/
#   local hostcount=$( curl -4 -k --anyauth -u "${credentials}"                   \
   local hostcount=$( curl -4 -k                   \
        "http://${FB}:49000/upnp/control/hosts"                                        \
        -H 'Content-Type: text/xml; charset="utf-8"'                             \
        -H 'SoapAction: urn:dslforum-org:service:Hosts:1#GetHostNumberOfEntries' \
        -d '<?xml version="1.0" encoding="utf-8"?>
            <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                        xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
               <s:Body>
                  <u:GetHostNumberOfEntries xmlns:u="urn:dslforum-org:service:Hosts:1">
                  </u:GetHostNumberOfEntries>
               </s:Body>
            </s:Envelope>' )
   >&2 echo "Host count full line is ${hostcount}"
   hostcount=$( echo "${hostcount}" | grep --extended-regex --only-matching '<NewHostNumberOfEntries>.*<\/NewHostNumberOfEntries>' )
   >&2 echo "Host count (grep'ed) is ${hostcount}"
   if [ -z "${hostcount}" ] ; then
      >&2 echo "ERROR - hostcount could not be retrieved"
      return -1
   fi
   hostcount=${hostcount#<NewHostNumberOfEntries>}
   hostcount=${hostcount%<\/NewHostNumberOfEntries>}
   >&2 echo "Host count is ${hostcount}"

}


get_active_devices
55 sagt mir mein Tool auch.

Code:
LANHostConfigManagement:
Hosts:
        NewHostNumberOfEntries: 55
Zeigt dir die Fritzbox denn mehr als 16 Geräte an?
 
Gefällt mir: Al_
#6
Meine FritzBox zeigte beim Test vor einer Woche im Webinterface 27 Einträge, GetHostNumberOfEntries meldete nur 16. Im Webinterface waren 12 Verbindungen aktiv; 7 davon wurden mit GetGenericHostEntry gefunden, alle korrekt als aktiv erkannt (also '<NewActive>1</NewActive>'). Von den 15 inaktiven Verbindungen wurden mit GetGenericHostEntry 9 gefunden, alle korrekt als inaktiv erkannt.

Die Geräte sind teils per Ethernet, teils per WLAN verbunden; entweder direkt oder über einen Router. Ich kann kein Muster erkennen, welche Geräte von GetGenericHostEntry gefunden werden und welche verpasst werden.

Aber nun zur guten Neuigkeit: nachdem ich mich bei meinem Telekomprovider (Sunrise) beschwert habe, wurde mir endlich das Update zu FritzOS 7.01 eingespielt (der Provider hat manuelle Updates unterdrückt und den Workaround mit Factory Reset machte ich nicht, da ich keine A/CH Version des neuen FritzOS fand). Und jetzt findet GetHostNumberOfEntries 29 Geräte, was der aktuell korrekten Zahl entspricht. Es scheint sich also um einen Bug im alten FritzOS 6.24 gehandelt zu haben.
 
#7
PS: ich bin neu in diesem Forum. Man kann sich offenbar nur mit 'Gefällt mir' bedanken. Auf jeden Fall: danke, dass Du mein Problem so gut angeschaut hast.
 
Gefällt mir: lano
#9
Das wäre auch eine Lösung gewesen. Danke. Muss ich mir fürs nächste mal merken. Manuelles einspielen einer nicht-CH Version (nach factory reset mit ausgestecktem Internetanschluss) war mir zu riskant, da ich nicht weiss, was Sunrise alles modifiziert hat.
 
Oben