Fritz!Box - Alle externen IP Adressen auslesen (IPv4 + IPv6 + IPv6 Prefix)

Hi!

So sieht das dann aus:
fritzbox_ipadressen_auslesen.png

Alles was ihr dazu braucht ist dieses Skript:

<?
/****** IPv4 + IPv6 Adresse + Prefix aus der Fritz!Box auslesen (per SOAP/UPnP) ******
/*
/* Das Skript muss nur einmal ausgeführt werden, dann werden der Timer und die
/* Variablen automatisch angelegt!
/*
/* Script v1.2 by Bayaro (for IP-Symcon) */
/* [Fritz!Box - Alle externen IP Adressen auslesen (IPv4 + IPv6 + IPv6 Prefix)](https://www.symcon.de/forum/threads/28598-Fritz%21Box-Alle-externen-IP-Adressen-auslesen-%28IPv4-IPv6-IPv6-Prefix%29) */

/**** Konfiguration *********************/
$IPv4auslesen = true;  // true/false
$IPv6auslesen = true;  // true/false
/****************************************/


// *** Timer erstellen *******************************************************************
IPS_SetScriptTimer($_IPS['SELF'], 600);  // Alle 600 Sekunden (10 Minuten) die IP-Adressen abfragen


// *** IPv4 Adresse auslesen *************************************************************
if ($IPv4auslesen == true) {
    $client = new SoapClient(
        null,
        array(
            'location'   => "http://fritz.box:49000/igdupnp/control/WANIPConn1",
            'uri'        => "urn:schemas-upnp-org:service:WANIPConnection:1",
            'noroot'     => True
        )
    );

    $IPv4 = $client->GetExternalIPAddress();
    //print_r($IPv4);

    $IPv4_Address_VarID = CreateVariableByName($_IPS['SELF'], "IPv4 Adresse", 3, "", "");
    if (GetValue($IPv4_Address_VarID) != $IPv4) {
        SetValue($IPv4_Address_VarID, $IPv4);
    }
}



// *** IPv6 Adresse auslesen *************************************************************
if ($IPv6auslesen == true) {
    $client1 = new SoapClient(
        null,
        array(
            'location'   => "http://fritz.box:49000/igdupnp/control/WANIPConn1",
            'uri'        => "urn:schemas-upnp-org:service:WANIPConnection:1",
            'noroot'     => True
        )
    );

    $IPv6 = $client1->X_AVM_DE_GetExternalIPv6Address();
    //print_r($IPv6);

    $IPv6_Address_VarID = CreateVariableByName($_IPS['SELF'], "IPv6 Adresse", 3, "", "");
    if (GetValue($IPv6_Address_VarID) != $IPv6['NewExternalIPv6Address']) {
        SetValue($IPv6_Address_VarID, $IPv6['NewExternalIPv6Address']);
    }



    // *** IPv6 Prefix auslesen **************************************************************
    $client2 = new SoapClient(
        null,
        array(
            'location'   => "http://fritz.box:49000/igdupnp/control/WANIPConn1",
            'uri'        => "urn:schemas-upnp-org:service:WANIPConnection:1",
            'noroot'     => True
        )
    );

    $IPv6pre = $client2->X_AVM_DE_GetIPv6Prefix();
    //print_r($IPv6pre);

    $IPv6_Prefix_VarID = CreateVariableByName($_IPS['SELF'], "IPv6 Prefix", 3, "", "");
    if (GetValue($IPv6_Prefix_VarID) != $IPv6pre['NewIPv6Prefix']) {
        SetValue($IPv6_Prefix_VarID, $IPv6pre['NewIPv6Prefix']);
    }
}


function CreateVariableByName($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarActionScript = "") {
    $VarID = @IPS_GetVariableIDByName($VarName, $ParentID);
   if($VarID === false) {
        $VarID = IPS_CreateVariable($VarTyp);
      IPS_SetParent($VarID, $ParentID);
      IPS_SetName($VarID, $VarName);
      IPS_SetInfo($VarID, "This variable was created by script #".$_IPS['SELF']);
      if($VarProfile !== "") {
            IPS_SetVariableCustomProfile($VarID, $VarProfile);
        }
        if($VarActionScript !== "") {
            IPS_SetVariableCustomAction($VarID, $VarActionScript);
        }
    }
   return $VarID;
}
?>

Sollte eure Fritz!Box nicht über „fritz.box“ erreichbar sein, dann müssen die entsprechenden Stellen im Skript gegen den korrekten DNS-Namen oder die entsprechende interne IP-Adresse ausgetauscht werden.

>> Update v1.2 >> IPv6 an einer anderen Stelle über SOAP abfragen, damit es auch bei älteren FritzOS Versionen funktionieren sollte

Grüße,
Chris

Hallo Chris,

ich habs mal mir IPS 4.0 und FB7390 versucht und erhalte folgenden Fehler, vermutlich, da IPv6 bei mir nicht verbunden ist:


Fatal error:  Uncaught SoapFault exception: [s:Client] UPnPError in C:\Program Files\IP-Symcon\scripts\55902.ips.php:45
Stack trace:
#0 C:\Program Files\IP-Symcon\scripts\55902.ips.php(45): SoapClient->__call('X_AVM_DE_GetExt...', Array)
#1 C:\Program Files\IP-Symcon\scripts\55902.ips.php(45): SoapClient->X_AVM_DE_GetExternalIPv6Address()
#2 {main}
  thrown in C:\Program Files\IP-Symcon\scripts\55902.ips.php on line 45
Abort Processing during Fatal-Error: Uncaught SoapFault exception: [s:Client] UPnPError in C:\Program Files\IP-Symcon\scripts\55902.ips.php:45
Stack trace:
#0 C:\Program Files\IP-Symcon\scripts\55902.ips.php(45): SoapClient->__call('X_AVM_DE_GetExt...', Array)
#1 C:\Program Files\IP-Symcon\scripts\55902.ips.php(45): SoapClient->X_AVM_DE_GetExternalIPv6Address()
#2 {main}
  thrown
   Error in Script C:\Program Files\IP-Symcon\scripts\55902.ips.php on Line 45

bei mir ebenfalls

Entweder, weil kein IPv6 aktiv ist, oder weil nicht die neuste Firmware drauf ist?

Habe das Skript mal angepasst und jetzt kann man IPv4 und IPv6 einzeln aktivieren/deaktivieren (true/false).

Grüße,
Chris

nur ip4
jetzt klappts, ip6 auf false

Geht das jetzt auch unter IPS 4.x? Da war noch in der Beta noch irgendwas mit „kein SOAP verfügbar“, oder bring ich da grad was durcheinander?

Grüße,
Chris

Ich habs bei mir auf meinem IPS 4.0 Testsystem (Windows 10) versucht und es geht für IP4 (IP6 ist bei mir nicht aktiviert).

Ergänzung: und auf einem Raspberry gehts genauso.

Sehr gut zu wissen :slight_smile: Danke für die Rückmeldung!

Grüße,
Chris

Hallo,

dnake für das Script, habs direkt mal ausprobiert an meiner FB6490.

Die IPv4-Adresse wird ausgelesen, IPv6 & Prefix alerdings nicht

Ich bekomem aber immer diese Fehlermeldung:



Fatal error:  Uncaught SoapFault exception: [HTTP] Could not connect to host in D:\IP-Symcon\scripts\58778.ips.php:31
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://THFritzB...', 'urn:schemas-upn...', 1, 0)
#1 D:\IP-Symcon\scripts\58778.ips.php(31): SoapClient->__call('GetExternalIPAd...', Array)
#2 D:\IP-Symcon\scripts\58778.ips.php(31): SoapClient->GetExternalIPAddress()
#3 {main}
  thrown in D:\IP-Symcon\scripts\58778.ips.php on line 31
Abort Processing during Fatal-Error: Uncaught SoapFault exception: [HTTP] Could not connect to host in D:\IP-Symcon\scripts\58778.ips.php:31
Stack trace:
#0 [internal function]: SoapClient->__doRequest('__call('GetExternalIPAd...', Array)
#2 D:\IP-Symcon\scripts\58778.ips.php(31): SoapClient->GetExternalIPAddress()
#3 {main}
  thrown
   Error in Script D:\IP-Symcon\scripts\58778.ips.php on Line 31

FritzBox-Firmware ist 6.24

Die Firmware der 6490 unterstützt die Abfrage von IPv6 nicht per Upnp… ist bei mir identisch. Habe mal alle XML-Beschreibungen der Schnittstelle durchgesehen, aktuell fehlt der dazugehörige Dienst für diese Funktion komplett.
Michael

Bei mir (Fritz!Box 7490 + aktuelle Firmware 113.06.36-31299 BETA) funktioniert es :smiley: Natürlich nur, wenn IPv6 auch genutzt wird. Ab welcher Firmware das funktioniert kann ich euch leider nicht sagen.

Aber wenn Michael die gleiche Fritz!Box hat und er das so sagt, dann ist das so :slight_smile: Könnte mir vorstellen, dass das mit 6.30 oder 6.35 gekommen ist, da hat sich ja einiges geändert…

Grüße,
Chris

Wobei ich noch nicht nachgesehen habe, ob diese BETA nun auch IGD Version 2 kann.
Eigentlich ist erst dort IPv6 implementiert.

Quelle: Internet Gateway:1 » UPnP Forum

Deprecation Notice: As of March 30, 2015 the IGD:1 Device Control Protocol (DCP) was deprecated. The newer Internet Gateway Device V2.0 DCP is required for UPnP+ certification and provides numerous enhancements for security (e.g. DeviceProtection DCP) as well as IPv6 support.

AVM hat hier aber wieder mal eine eigene Erweiterung in der Box, welche Chris hier nutzt.
Leider aber nicht in der stable Firmware :frowning:
Und bei den Kabel-Fritten dauert das bestimmt noch Jahre… :frowning: :frowning:

Michael

@Michael: Magst du mal wieder eine XML Sammlung von mir haben? :slight_smile:

Hier mal ein Screenshot von dem Bereich mit den netten Sachen:

Grüße,
Chris

Mein Problem ist halt auch diese doofe Update-Politik der Kabelanbieter :frowning:

Mit der FW 6.26 bekomme ich nicht mal mehr den Anrufbeantworter ein/ausgeschaltet.
Auch Portfreigaben setzten geht nicht, löschen aber schon. :mad:

Sonst hätte ich auch diese Tage mein Projekt mal vorgestellt, aber ich kann gerade kaum was testen.
Diese Firmware kann noch weniger als die ‚defekte‘ 6.20.

Aber was mich gerade intressiert, mit welcher SW hast du die Box ausgelesen ?
Mit dem UPnP Inspector bin ich nie so weit gekommen.

Michael

In dem Fall sind mal nicht die Kabelprovider schuild, sonder AVM - die haben vor einiger Zeit bereits angekündigt, das Zugriffe externe Software auf die Fritzbox-Funktionen eingeschränkt werden sollen - u.a. um die Sicherheit zu erhöhen.

Dann erwarte ich aber eine entsprechende Fehlermeldung.
Immerhin bietet AVM da mehr Sicherheit durch eine Authentifizierung.
Aber ist nun glaube ich genug OT :wink:
Ich zeige demnächst mal was ich habe/meine.
Michael

Auch von mir ein Danke für eure tolle Arbeit mit Soap.

seit gestern habe ich auf der 7390 die 06.30 und den neuen IP-Telefon Tarif der Telekom mit IPv6 aktiv.

Nun bekomme ich mit dem obigen Script folgenden Fehler bei IPv6 auf „true“:

Fatal error: Uncaught SoapFault exception: [s:Client] UPnPError in C:\IP-Symcon\scripts\48899.ips.php:54
Stack trace:
#0 C:\IP-Symcon\scripts\48899.ips.php(54): SoapClient->__call(‚X_AVM_DE_GetExt…‘, Array)
#1 C:\IP-Symcon\scripts\48899.ips.php(54): SoapClient->X_AVM_DE_GetExternalIPv6Address()
#2 {main}
thrown in C:\IP-Symcon\scripts\48899.ips.php on line 54

UPnP ist aktiv und ich habe alle Einstellungen untersucht, leider nichts gefunden was falsch sein könnte.
Alle andern Soap Abfragen (Telefonbuch, Anrufliste, Reboot, IPv4) laufen problemlos mit der FW 06.30
Wo kann man nun noch stellen?

Danke schon mal

Tom

Hmmm…ich weiß nicht, ab welcher FritzOS Version das funktioniert hat. Ich war schon auf 6.35 oder so, als ich das Skript gebaut habe.

Aktuell kann ich leider auch gar nichts testen, da die Telekom ohne Vorankündigung meinen Anschluss vorzeitig gekündigt hat und ich erst in ~1 Monat wieder zu Hause Internet haben werde :frowning:

Aber selbst wenn ich jetzt, wo ich nur über USB LTE Stick online bin (IPv4 only), und IPv6 im Skript auf TRUE habe, dann bekomme ich auch keine Fehlermeldung, aber der IPv6 Eintrag ist halt einfach leer.

…ich vermute also, dass es erst ab einem neueren FritzOS (6.35?!) funktioniert. Kannst ja mal zum Test die aktuelle Beta installieren, wenn es damit funktioniert, dann wissen wir, dass es daran liegt. Und du kannst ja jederzeit wieder zurück auf die stable Firmware.

Grüße,
Chris