öffentl. IP-Adresse der Fritzbox auslesen

Hallo,

aus akutem Grund würde ich gern die öffentl. IP-Adresse der Fritzbox auslesen wollen. Diese soll dann per Mail verschickt werden. Anfordern entweder mit einem Anruf auf eine MSN oder auch per Mail. Somit hätte ich dann die Chance, per VPN wieder auf die FB zu kommen.

Da in den letzten Tagen mein dyndns-Account scheinbar nicht sauber aktualisiert wird, hatte ich diese parallele Lösung in Betracht gezogen. Die IP-Adresse steht in einem <div>-Tag im Quelltext. Auf der Fritzbox ist die Firmware 84.05.05. Hierzu hatte ich mir schon einige von Rainers FB-Scripten angesehen, bis her nicht passendes gefunden.

Oder gibt es mit der 84.05.05 dahingehend Problem bzgl. VPN?

Ich habe das gleiche Problem mit dyndns. Nutze eine andere Lösung. Sende E Mail an IPS mit IP request. Mein Script fragt eine externe Seite ab (my ip oder so ähnlich) und IPS schickt mir die externe Ip per SMS und E Mail. ES GIBT IM FORUM EIN SCTIPT DAZU

Sent from my GT-I9100 using Tapatalk

http://www.whatismyip.org/

Büdde schön:

<?
$address = "Fritz.box";

$contentRecv = 'POST /upnp/control/WANCommonIFC1 HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress"
Content-Length: '.(291+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetExternalIPAddress xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

$data = SendPacket($contentRecv);
$wanIP = GetTextBetween($data, "<NewExternalIPAddress>", "<\/NewExternalIPAddress>");
SetValue(54003 /*[Program\FritzBox\FritzBox-Auslastung\WAN IP]*/, $wanIP);

function SendPacket($content)
{
    global $address;
   $port = 49000 /*[Objekt #49000 existiert nicht]*/;

   $fp = fsockopen ($address, $port, $errno, $errstr, 10);
   if (!$fp)
    {
       echo "$errstr ($errno)<br />
";
   }
    else
    {
        fputs ($fp, $content);
      $ret = "";
      while (!feof($fp))
        {
         $ret.= fgets($fp,128);
      }
      echo $ret;
      fclose($fp);
    }
   if(!(strpos($ret, "200 OK") === false))
    {
        return $ret;
   }
    else
    {
       die("Invalid Response: ".$ret);
   }
}

function GetTextBetween($string, $start, $end)
{
    preg_match_all("/$start(.*)$end/i", $string, $match);
   return $match[1][0];
}

?>

PS: Alles nur geklaut. Vermutlich von Rainer^^

Du bist nicht alleine… mehrere Fritzbox-User haben das selbe Problem aktuell! Ich nutze auch eine 2. Dyndns-Adresse als Fallback, die ich vom HomeServer aktualisieren lasse. Es kann doch nicht sein, dass das bei allen nicht mehr geht… garnicht ist ja auch nicht richtig, nur sehr unzuverlässig. Da muss doch was passiert sein, auch wenn die dyndns-Foren immer was anderes behaupten. Ich habe sogar Firmware Up- und Downgrade gemacht, hab jetzt sogar die Labor-Version drauf, nix hilft und dyndns tut ahnungslos…

Hab nochmal nen Thread im dyndns-Support-Forum aufgemacht, wäre schön wenn ihr euch beteiligt, damit die sehen das es mehrere betrifft.

Fritzbox -> Dyndns-Update - Dyn Community Forum

PS: Alles nur geklaut. Vermutlich von Rainer^^

Richtig. :slight_smile:

Hier noch eines welches den Log ausliest.

<?
$fritzbox_ip = 'fritz.box';
$fritzgui    = 'http://fritz.box/cgi-bin/webcm';
$fritzseite  = '../html/de/menus/menu2.html';
$password    = 'xxxxx';

$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);

if($session_status_simplexml->iswriteaccess == 1)
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
    curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/response={$response}&getpage=../html/de/menus/menu2.html");
    preg_match('/name="sid" value="([0-9a-f]*)"/', curl_exec($ch), $matches);
   if (isset($matches[1]) && $matches[1] != '0000000000000000')
   {
      $SID = $matches[1];
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}
curl_close($ch);
$logInet = file_get_contents("http://fritz.box/system/syslog.lua?tab=internet&sid=".$SID);

preg_match_all('((?:\d{1,3}\.){3}\d{1,3})i', strip_tags($logInet), $ip);
SetValue(16596 /*[Fritzbox\IP-Adressen\I-Net]*/, $ip[0][0]);
SetValue(22491 /*[Fritzbox\IP-Adressen\DNS-Server 1]*/, $ip[0][1]);
SetValue(56705 /*[Fritzbox\IP-Adressen\DNS-Server 2]*/, $ip[0][2]);
SetValue(58268 /*[Fritzbox\IP-Adressen\Gateway]*/, $ip[0][3]);
//print_r($ip);


?>

Bitte sagt mir, wenn ihr auch ein Buch veröffentlicht :cool:

Gruß
Bruno

…oder jemand ne Doktorarbeit schreibt …:smiley:

Hallo Rainer,

ich bin restlos begeistert. Hast Du sowas zu liegen, oder wird das spontan gebaut? Ist ja nicht gerade trivial wie mir scheint. Du gehst davon aus, dass die ersten IP-Adressen im Text immer in dieser Reihenfolgen vorkommt, richtig?

Nun versuche ich, noch mehr statistische Daten herauszubekommen. Ber der Kindersicherung hatte ich vor einiger Zeit vorerst aufgegeben. Habe aber dadurch nun wieder neuen Mut bekommen.

Also, nochmals danke.

Das hab ich fertig hier liegen, nutz ich ja auch. :slight_smile:

Hier hast noch mal eins was Du in Verbindung mit dem Log nutzen kannst. Das ganze liest die Uptime der Box aus, sollte diese kleiner x min sein wird das Script gestartet und die IP ist wieder aktuell.

Dieses Script wird alle 10sek aufgerufen.

<?
if($IPS_SENDER == "WebFront") return;

$address = "Fritz.box";

$contentRecv = 'POST /upnp/control/WANIPConn1 HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo"
Content-Length: '.(287+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetStatusInfo xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

$data = SendPacket($contentRecv);
$connectionStatus = GetTextBetween($data, "<NewConnectionStatus>", "<\/NewConnectionStatus>");
if($connectionStatus == "Connected")
{
    SetValue(13384 /*[Fritzbox\DSL\DSL\Status]*/, true);
}
else
{
   SetValue(13384 /*[Fritzbox\DSL\DSL\Status]*/, false);
}
$lastConnectionError = GetTextBetween($data, "<NewLastConnectionError>", "<\/NewLastConnectionError>");
SetValue(20128 /*[Fritzbox\DSL\DSL\Verbindungsfehler]*/, $lastConnectionError);
$upTime = GetTextBetween($data, "<NewUptime>", "<\/NewUptime>");
SetValue(39161 /*[Fritzbox\DSL\DSL\UpTime]*/, gmstrftime('%H:%M:%S', $upTime));
if($upTime < 20)
{
    IPS_RunScript(29476 /*[Fritzbox\IP-Adressen\Log Internetverbindungen]*/);
}


function SendPacket($content)
{
    global $address;
   $port = 49000 /*[Objekt #49000 existiert nicht]*/;

   $fp = fsockopen ($address, $port, $errno, $errstr, 10);
   if (!$fp)
    {
       echo "$errstr ($errno)<br />
";
   }
    else
    {
        fputs ($fp, $content);
      $ret = "";
      while (!feof($fp))
        {
         $ret.= fgets($fp,128);
      }
      //echo $ret;
      fclose($fp);
    }
   if(!(strpos($ret, "200 OK") === false))
    {
        return $ret;
   }
    else
    {
       die("Invalid Response: ".$ret);
   }
}

function GetTextBetween($string, $start, $end)
{
    preg_match_all("/$start(.*)$end/i", $string, $match);
   return $match[1][0];
}

?>

Grundsätzlich funktioniert Rainer’s erstes Script auch auf meiner 7270. Aber was sind das alles für Adressen die man mit dem letzten „print_r($ip);“ sieht und wozu sind die zwei DNS Server?

…die anderen Adressen sind deine vorangegangen. Die beiden DNS-Server sind die deines ISP.

Hallo zusammen,

ich hätte da noch einen anderen Ansatz, sogar unabhängig von der Fritzbox, sollte mit jeder Art von Internetanbindung arbeiten. Leider muss man da einen externen Service abfragen (hier: What Is My IP Address - Shows Your IP Address), der auch nicht all zu oft belästigt werden sollte (min. 15 Minuten Pause). Funktioniert bei mir ganz gut. Ich schreibe die ermittelte IP alle 15 Minuten auf einen anderen externen Webspace. So eine Art DYNDNS des kleinen Mannes.

<?
// Abfrage ob der Server erreichbar ist. Timeout 3 Sekunden
if(fsockopen("www.whatismyip.com", 80, $errno, $errstr, 3))
   {
   $Array     = file("http://automation.whatismyip.com/n09230945.asp");
   $IPAdresse = $Array[0];

}else{
   $IPAdresse = "Keine Verbindung";
}

$datum = date("d.m.Y");
$uhrzeit = date("H:i");
$infotext = "IP = ".$IPAdresse.", Datum: ".$datum."/".$uhrzeit;
// jetzt $infotext extern irgend wohin schreiben
?>

Gruss
Bernd

P.S. cloud ist leider überall

Das ist keine schlechte Idee. Vielleicht als Backup, wenn die Fritzbox nicht mit sich sprechen lässt. Kann man nur hoffen, das die Verbindung zum Internet noch besteht:D

Wenn gar nichts mehr geht, vielleicht hat ja einer von euch das Glück eine Mail von „Zuhause“ zu bekommen, da kann man auch die IP draus ablesen. Hat mich letztens gerettet, dass meine „Batterie bald leer“-Mail von einem FHT kam :wink:

Hallo Leute,

ich verwende das Skript von mcbelly aus dem dritten Posting in diesem Thread - leider gibt es eine Fehlermeldung seit dem Update auf OS 6.0…

Gibt es zur Feststellung der externen IP schon eine „neuere Version“?

Joachim

Hallo Joachim,

nicht direkt,

wenn es aber nur um die Ermittlung der externen IP geht, Toni hat ´nen tolles Tool und das löst ein weiteres Problem:

Als Beiwerk wird eine Variable angelegt und deren Inhalt ist die externe IP
(funzt seit heute morgen wieder siehe post 207901).

mfg

BerndJ

Moin,

Das hier geht zumindest mit 5.50. Hab’s mit 6.0 noch nicht getestet…

Gruß
Walter

Hallo Bernd und Walter,

vielen Dank für die Verweise - es funktioniert jetzt wieder wie es soll…:slight_smile:

Joachim