Het script upnp2mrtg.sh is verantwoordelijk voor de communicatie met de Fritzbox. Standaard gebruikt dit de hostnaam fritz.box voor toegang tot de router en worden SOAP-requests gebruikt om de gewenste data binnen te halen. Met de parameter -a gevolgd door het IP-adres of de hostnaam van de Fritzbox kun je het script omleiden naar andere doelen. Het uitwisselen van data verloopt daarbij via de UPnP-poort 49000, waarover applicaties een groot aantal statusgegevens kunnen oproepen. Via de webpagina van het script kun je zeer omvangrijke informatie vinden.
Je kunt de Fritzbox zelf echter ook met de browser benaderen via poort 49000. Je kunt daar met /fboxdesc.xml, /tr64desc.xml, /igddesc.xml en /usbdesc.xml meerdere XML-bestanden vinden die de functieomvang van de Fritzbox beschrijven. Daarin staan verwijzingen naar andere XML-bestanden, die bijvoorbeeld functienamen en parameters bevatten. Een lijst van alle op te vragen XML-bestanden die voor de betreffende Fritzbox van toepassing zijn, is er volgens AVM helaas niet. Niet bij alle Fritzbox-modellen zijn alle XML-bestanden voorhanden.
Het is van belang om van tevoren na te kijken of een bepaalde in de officiële documentatie van AVM genoemde functie ook geldt voor jouw Fritzbox. Als je bijvoorbeeld bij een Fritzbox 7490 of 7530 de url http://fritz.box:49000/igddesc.xml in de browser opent, krijg je daar het servicetype WANIPConnection te zien:
<service>
<serviceType>
urn:schemas-upnp-org:service:WANIPConnection:1
</serviceType>
…
<controlURL>
/igdupnp/control/WANIPConn1
</controlURL>
…
<SCPDURL>/igdconnSCPD.xml</SCPDURL>
</service>
Onder SCPDURL staat een verwijzing naar het bestand /igdconnSCPD.xml, dat gedetailleerde informatie bevat over de functies van die dienst. Als je dat XML-bestand oproept, dan staat daar onder meer de uptime van de internetverbinding in:
<action>
<name>GetStatusInfo</name>
<argumentList>
…
<name>NewUptime</name>
…
</argumentList>
</action>
Hoe lang de internetverbinding al bestaat, kun je dus achterhalen met de service urn:schemas-upnp-org:service:WANIPConnection:1 door bij de url http://fritz.box:49000/igdupnp/control/WANIPConn1 dan de actie GetStatusInfo uit te voeren met de parameter NewUptime. Die taak wordt overgenomen door het script upnpquery.sh – je hoeft daarmee alleen de genoemde taken aan te leveren:
./upnpquery.sh urn:schemas-upnp-org:service:WANIPConnection:1 /igdupnp/control/WANIPConn1 GetStatusInfo NewUptime
Met die kennis kun je in het vervolg niet alleen verklaren waarom die laatste update zo eeuwig lang duurde om binnen te halen, maar ook andere statusinformatie aan je Fritzbox ontfutselen voor veel andere projecten.
(Mirko Dölle en Noud van Kruysbergen, c’t magazine)
Hallo enig idee hoe ik bijvoorbeeld de totale ontvangen en uitgaande bytes kan monitoren via upnpquery.sh?
In het SOAP schema staan er meerdere parameters voor gedefinieerd:
http://fritz.box:49000/igdconnSCPD.xml
Maar wanneer ik deze op een vergelijkbare manier opvraag (zoals hierboven vwb de uptime):
./upnpquery.sh -V urn:schemas-upnp-org:service:WANIPConnection:1 /igdupnp/control/WANIPConn1 GetTotalBytesSent
Dan krijg ik een 500 Internal Server Error. Ik heb al meerdere namen/actions geprobeerd, maar geen enkele werkt om de GetTotalBytesSent of NewByteSendRate of ook maar iets uit deze XML op te vragen via upnpquery.sh.