Der heutige Artikel befasst sich mit der Steuerung der FritzBox über UPnP. UPnP ist ein Standard zur Ansteuerung von verschiedenen Geräten – darunter auch Router. Ich werde hier Beispiele zeigen, was man damit machen kann und wie man dies umsetzt.
Welche Methoden die FritzBox zur Verfügung stellt ist in XML-Dateien beschrieben, welche folgender Maßen abgerufen werden können:
- http://fritz.box:49000/igddesc.xml
- http://fritz.box:49000/any.xml
- http://fritz.box:49000/igdicfgSCPD.xml
- http://fritz.box:49000/igddslSCPD.xml
- http://fritz.box:49000/igdconnSCPD.xml
Weitere Informationen kann man auch auf der AVM-Hompage und unter UPnP.org finden.
Die Kommunikation erfolgt letztendlich über so genannte SOAP-Messages. Ich werde hier zwei Beispiele zeigen, die ich auch in meinem Tool FritzBoxReconnect verwendet habe. Das Abfragen der aktuellen IP und das zurücksetzen der Internet-Verbindung.
IP abfragen
Hier das Beispiel, um die aktuelle IP abzufragen.
// Verbindung zur FritzBox aufbauen
QTcpSocket *socket = new QTcpSocket();
socket->connectToHost(?fritz.box?, 49000);
// SOAP Nachricht vorbereiten
QString xmldata = "<?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:GetExternalIPAddress xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\" />"
"</s:Body>"
"</s:Envelope>";
// SOAP Nachricht senden
QTextStream send(socket);
send << "POST /upnp/control/WANIPConn1 HTTP/1.1";
send << "Host: fritz.box:49000" << "\r\n";
send << "SOAPACTION: \"urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress\"" << "\r\n";
send << "Content-Type: text/xml; charset=\"utf-8\"" << "\r\n";
send << "Content-Length: " << xmldata.size() << "\r\n";
send << "\r\n";
send << xmldata;
Als Antwort erhält man logischer Weise auch seine SOAP-Message, diese enthält dann die aktuelle externe IP-Adresse der FritzBox.
Die Antwort könnte folgendermaßen aussehen:
HTTP/1.1 200 OK DATE: Sun, 06 Mar 2006 02:27:09 GMT SERVER: FRITZ!Box Fon WLAN 7170 UPnP/1.0 AVM FRITZ!Box Fon WLAN 7170 (UI) 29.04.99 CONNECTION: keep-alive CONTENT-LENGTH: 339 CONTENT-TYPE: text/xml; charset="utf-8" EXT: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body> <u:GetExternalIPAddressResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"> <NewExternalIPAddress>84.162.167.65</NewExternalIPAddress> </u:GetExternalIPAddressResponse> </s:Body> </s:Envelope>
Internet-Verbindung beenden
Hier noch das zweite Beispiel zum beenden der Internet-Verbindung. Dies läuft auf die gleiche Weise ab, wie das Erste.
// Verbindung zur FritzBox aufbauen
QTcpSocket *socket = new QTcpSocket();
socket->connectToHost("fritz.box", 49000);
// SOAP Nachricht vorbereiten
QString xmldata = "<?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:ForceTermination xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\" />"
"</s:Body>"
"</s:Envelope>";
// SOAP Nachricht senden
QTextStream send(socket);
send << "POST /upnp/control/WANIPConn1 HTTP/1.1";
send << "Host: fritz.box:49000" << "\r\n";
send << "SOAPACTION: \"urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination\"" << "\r\n";
send << "Content-Type: text/xml; charset=\"utf-8\"" << "\r\n";
send << "Content-Length: " << xmldata.size() << "\r\n";
send << "\r\n";
send << xmldata;




Hey, ich bin mal so frech und poste mal was in deinen Blog. Sieht super aus! Ich benutze auch seit kurzem WordPress verstehe aber noch nicht alle Funktionen. Dein Blog ist mir da immer eine gute Anregung. Weiter so!
Danke. Ich freue mich immer über positives Feedback
Hast du auch ne Version für nen kompletten Neustadt der Box?
Bei mir ändert sich nämlich nach ein paar Versuchen die IP nicht mehr -.-.
Gruß m1LLo