Externe IP Adresse einer Fritz!Box ermitteln
Einige Provider trennen die Verbindung zwischen ihnen und einem DSL-Router automatisch (z.B. einmal pro Tag), selbst wenn der jeweilige Kunde über eine Flatrate verfügt. Das führt normalerweise dazu, dass sich die IP Adresse , die dem DSL-Router vom Provider zugewiesen wird, ändert. Für ausgehende Verbindungen ist das von untergeordneter Bedeutung und wird von den meisten Anwendern wahrscheinlich gar nicht bemerkt. Möchte man sich jedoch von außen mit dem Router oder einem dahinter liegenden Computer verbinden (eingehende Verbindung), muss man die IP Adresse kennen. Soweit man hierzu nicht auf dynamic DNS zurückgreifen will oder kann, wird kaum ein Weg daran vorbei führen, die IP Adresse vom Router in regelmäßigen Abständen auszulesen und irgendwo zu hinterlegen.
Aktuelle Versionen der Skripte zum Auslesen der IP Adresse: 7170-0.0.2 und 0.0.3
Wie kann also die aktuelle, externe IP-Adresse (eine vom Provider zugewiesene, nicht private Internet-Adresse zur Kommunikation mit anderen Computern im Internet) eines DSL-Routers (z.B. eine FritzBox ) abfragt und angezeigt werden, damit bei Bedarf auch von außen auf einen Rechner, der an diesen Router angeschlossen ist, zugegriffen werden kann? Normalerweise haben derartige DSL-Router eine Benutzeroberfläche, auf die mit einem Webbrowser zugegriffen werden kann. Irgendwo innerhalb dieser Benutzeroberfläche kann typischerweise die aktuelle IP-Adresse abgefragt werden. Diese Abfrage muss nicht zwangsläufig mit einem Webbrowser gemacht werden, vielmehr kann diese Seite auch von einem Computerprogramm oder Skript aufgerufen und ausgewertet werden. Hierzu muss man lediglich das HTTP-Protkoll kennen und verwenden. Die Abfrage wir etwas schwieriger, falls die Benutzeroberfläche mit einem Passwort geschützt ist - unmöglich wird es dadurch allerdings nicht, schließlich kennt man das Passwort ja.
FRITZ!Box Fon WLAN 7170 - ab Firmware 29.04.76
Nachdem die Firmware der FRITZ!Box Fon WLAN 7170 auf Version 29.04.76 aktualisiert wurde, hat das Skript zum Auslesen der IP Adresse nicht mehr korrekt funktioniert. Der Grund dafür liegt darin, dass seit dieser Version das Passwort nicht mehr im Klartext, sondern verschlüsselt übertragen wird. Dadurch wird der Prozess zum Auslesen der IP Adresse ein wenig erschwert, da in dem Skript das Passwort auf die gleiche Art und Weise verschlüsselt werden muss, um eine erfolgreiche Anmeldung durchführen zu können. Eine weitere Hürde wird dadurch in den Weg gestellt, das für die Verschlüsselung des Passwortes zunächst ein Token erzeugt werden muss, welches nur für eine kurze Zeit gültig ist. Dieses Token wird direkt von der FRITZ!Box erstellt. In der neuen Version sind daher zwei Anfragen an die FRITZ!Box notwendig, um die IP Adresse auslesen zu können. In der Antwort der ersten Anfrage findet sich das Token zur Verschlüsselung des Passwortes. Das Token wird dann zur Verschlüsselung des Passwortes verwendet, um bei der zweiten Anfrage angemeldet zu werden und die Seite zu erhalten, in der sich die IP Adresse befindet.
Die FRITZ!Box greift für die Verschlüsselung des Passwortes auf JavaScript Funktionen zurück, die ein PHP Skript in der Form nicht ausführen kann. Es wird also eine JavaScript-Engine für PHP benötigt. Eine derartige Engine habe ich bisher nicht gefunden. Allerdings gibt es von Mozilla eine JavaScript Engine Rhino , die auf Java basiert. Und Java kann wiederum von PHP aus relativ einfach aufgerufen werden. Daher wurde das bisher allein lauffähige PHP-Skript um folgende Komponenten erweitert:
- Eine JavaScript Datei, die die JavaScript-Dateien der FRITZ!Box enthält
- Eine Java-Bibliothek, die eine JavaScript-Engine enthält, mit der eine Funktion aus der JavaScript-Datei aufgerufen werden kann
Um die neue Version (7170-0.0.2) des Skriptes nutzen zu können, benötigt man also neben einem PHP-Interpreter auch noch eine Java-Laufzeitumgebung . Der Pfad zu dem ausführbaren Java-Programm muss in dem PHP-Skript hinterlegt werden. An dem Aufruf des PHP-Skriptes selbst ändert sich hingegen nichts.
FRITZ!Box Fon WLAN 7170 - vor Firmware 29.04.76
Die alte Version (7170-0.0.2) des Skriptes kann ebenfalls noch von der zentralen Downloadseite heruntergeladen werden. In dem PHP -Script müssen noch einige Dinge angepasst werden: Der Text PASSWORT muss durch das Passwort ersetzt werden, durch welches der Router hoffentlich geschützt ist. Außerdem muss der Text ROUTERIP durch die interne (nicht die externe, denn die wollen wir ja heraus finden) IP-Adresse (diese sollte im Handbuch zu finden sein) des DSL-Routers ersetzt werden. Schließlich kann noch der Pfad und der Name der Datei verändert werden, in die die externe IP-Adresse (die vom Provider zugewiesene) geschrieben werden soll (anstelle von /tmp/ip.txt). Weiterhin ist es wichtig die Zahl anzupassen, die hinter Content-Length steht. Diese Zahl muss durch die Anzahl der Zeichen ersetzt werden, die die Zeile enthält, die mit getpage anfängt. Damit das Script funktioniert muss die Programmiersprache PHP auf dem Computer installiert sein, auf dem das Skript ausgeführt werden soll. Um heraus zu finden, wie der sogenannte HTTP Header aussieht, der an den DSL-Router gesendet wird, kann die Erweiterung Live HTTP Headers für den Webbrowser Firefox verwendet werden. Dazu muss man lediglich die Seite (über die Benutzerschnittstelle des DSL-Routers) aufrufen, auf der die IP-Adresse zu sehen ist.
FRITZ!Box Fon - ab Firmware 08.03.90
Für die alte Version der Fritz!Box Fon kann ebenfalls noch ein Skript (Version 0.0.3) von der zentralen Downloadseite heruntergeladen werden. In dem PHP -Script müssen noch einige Dinge angepasst werden: Der Text PASSWORT muss durch das Passwort ersetzt werden, durch welches der Router hoffentlich geschützt ist. Außerdem muss der Text ROUTERIP durch die interne (nicht die externe, denn die wollen wir ja heraus finden) IP-Adresse (diese sollte im Handbuch zu finden sein) des DSL-Routers ersetzt werden. Schließlich kann noch der Pfad und der Name der Datei verändert werden, in die die externe IP-Adresse (die vom Provider zugewiesene) geschrieben werden soll (anstelle von /tmp/ip.html). Alles weitere wird von dem Skript automatisch erledigt. Damit das Script funktioniert muss die Programmiersprache PHP auf dem Computer installiert sein, auf dem das Skript ausgeführt werden soll. Um heraus zu finden, wie der sogenannte HTTP Header aussieht, der an den DSL-Router gesendet wird, kann die Erweiterung Firebug für den Webbrowser Firefox verwendet werden. Dazu muss man lediglich die Seite (über die Benutzerschnittstelle des DSL-Routers) aufrufen, auf der die IP-Adresse zu sehen ist.
