FritzBox neu verbinden

13/10/2010 - 15:13 von Robert Berghaus | Report spam
Hallo

Folgendes Problem:
Ein Büro muß übers Internet erreichbar sein. Über DynDNS wird die
tàglich wechselnde externe IP-Adresse an den festen Namen gebunden.
Eingesetzt wird eine einfache FritzBox 3170, die auch für VPN
gebraucht wird.
Alle paar Wochen klappt das Update bei DynDNS nicht; der Server ist
dann bis zu einem Reset der Box (oder bis zur nàchsten
Zwangstrennung) nicht erreichbar.

Ich wollte jetzt ein Skript schreiben, welches einmal morgens
gestartet wird, über den Internet Namen versucht die FritzBox zu
pingen und im Fehlerfall eine neue IP-Verbindung aufbauen làßt.

Mein erster Ansatz war, das alles per HTTP zu erledigen (Startseite
aufrufen, Paßwort übertragen, zur richtigen Seite navigieren und den
Button für "Verbindung neu aufbauen" drücken. Anschließend wieder
versuchen, die Adresse zu pingen.

Jetzt habe ich eine Erweiterung für den Firefox gefunden (Fox!Box),
mit welcher das per UPnP geht. Da wird auch kein Paßwort abgefragt.
Bei meinen ersten Versuchen mit "Net::UPnP::ControlPoint" bekomme
ich auch schon einige Informationen (Hersteller, Modellnummer und so
mittels getdevicetype()).

Jetzt geht es nur nicht mehr weiter.
Im Javascript Code steht zwar einiges drin, aber ich weiß nicht,
welchen Service ich wie ansprechen muß.

Weiß jemand, ob und wo das dokumentiert ist?

sonnigen Gruß aus dem Bergischen Land
Robert
 

Lesen sie die antworten

#1 Robert Berghaus
14/10/2010 - 17:09 | Warnen spam
Hier ist meine Lösung.
Was ich nicht verstehe ist, daß Content-Length bei den Beispielen,
von denen ich die Lösung habe fest auf 293 gesetzt ist. Ich komme
aber nur auf 283. Script funktioniert aber!

#!/usr/bin/perl -w

use strict;
use IO::Socket;
use URI;

my $url = "http://fritz.box";

my $uriurl = new URI( $url );
my $rechner = $uriurl->host;
my $port = 49000;
my $pfad = "/upnp/control/WANIPConn1";
my $CRLF = "\015\012";

my $xmldata = "<?xml version=\"1.0\" encoding=\"utf-8\"?>$CRLF".
"<s:Envelope
s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" ".
"xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">$CRLF".
"<s:Body>$CRLF".
"<u:ForceTermination
xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\" />$CRLF".
"</s:Body>$CRLF".
"</s:Envelope>$CRLF";

print "Laenge ist " . length($xmldata) . "";

my $socket = new IO::Socket::INET (PeerAddr => $rechner,
PeerPort => $port,
Proto => 'tcp')
or die "Keine Verbindung zum Server moeglich.";

$socket->autoflush(1);

print $socket "POST $pfad HTTP/1.0$CRLF",
"Host: $rechner:$port$CRLF",
"SOAPACTION:
\"urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination\"$CRLF",
"CONTENT-TYPE: text/xml ; charset=\"utf-8\"$CRLF",
"Content-Length: " . length($xmldata) . "$CRLF$CRLF",
"$xmldata$CRLF";


print while (<$socket>);

$socket->close;

print "und fertig";


Robert Berghaus schrieb:
Hallo

Folgendes Problem:
Ein Büro muß übers Internet erreichbar sein. Über DynDNS wird die
tàglich wechselnde externe IP-Adresse an den festen Namen gebunden.
Eingesetzt wird eine einfache FritzBox 3170, die auch für VPN gebraucht
wird.
Alle paar Wochen klappt das Update bei DynDNS nicht; der Server ist dann
bis zu einem Reset der Box (oder bis zur nàchsten Zwangstrennung) nicht
erreichbar.

Ich wollte jetzt ein Skript schreiben, welches einmal morgens gestartet
wird, über den Internet Namen versucht die FritzBox zu pingen und im
Fehlerfall eine neue IP-Verbindung aufbauen làßt.

Mein erster Ansatz war, das alles per HTTP zu erledigen (Startseite
aufrufen, Paßwort übertragen, zur richtigen Seite navigieren und den
Button für "Verbindung neu aufbauen" drücken. Anschließend wieder
versuchen, die Adresse zu pingen.

Jetzt habe ich eine Erweiterung für den Firefox gefunden (Fox!Box), mit
welcher das per UPnP geht. Da wird auch kein Paßwort abgefragt.
Bei meinen ersten Versuchen mit "Net::UPnP::ControlPoint" bekomme ich
auch schon einige Informationen (Hersteller, Modellnummer und so mittels
getdevicetype()).

Jetzt geht es nur nicht mehr weiter.
Im Javascript Code steht zwar einiges drin, aber ich weiß nicht, welchen
Service ich wie ansprechen muß.

Weiß jemand, ob und wo das dokumentiert ist?

sonnigen Gruß aus dem Bergischen Land
Robert

Ähnliche fragen