Hallo miteinander,
ich hoffe, das mir hier jemand helfen kann. Ich habe aus dem Ip Phone Forum folgendes Script bei mir am testen, jedoch bekomme ich eine wichtige sache nicht zum laufen. Es wird hier von der Fritzbox quasi die aktuelle IP gesendet und auch dort erfolgreich angezeigt.
Link zum Thread
Der Code sieht folgendermaßen aus:
Gestartet wird das ganze über einen DynDNS Befehl der Fritzbox mit folgendem Zusatz:
http://sub.mydomain.de/RouterTool.php?myip=<ipaddr>&pw=test
Jetzt wäre es ideal, das genau dieses Script mir nur die IP des Internetanschlusses raus gibt (von mir aus auch an eine andere Subdomain, dann kann ich das Script für FTP Zugang oder ähnlichem bestehen lassen)
Kann mir jemand Unterstützung geben?
Gruss
ich hoffe, das mir hier jemand helfen kann. Ich habe aus dem Ip Phone Forum folgendes Script bei mir am testen, jedoch bekomme ich eine wichtige sache nicht zum laufen. Es wird hier von der Fritzbox quasi die aktuelle IP gesendet und auch dort erfolgreich angezeigt.
Link zum Thread
Der Code sieht folgendermaßen aus:
PHP:
<?php
/*
Version vom 04.10.2010 by Karl Loncarek
Dieses Skript dient als Hilfsmittel für den Einsatz mit mehreren
Routern. Es können z.B. die IP-Adressen übergeben werden (ähnlich
wie bei dyndns). Die Informationen werden über Parameter in der URL
übergeben. Hierzu muss ein benutzerdefinierter DNS-Anbieter
eingestellt werden.
Beispiel, das mit meiner Fitz!Box funktioniert (Update-URL):
...../RouterTool.php?myip=<ipaddr>&n=2
Diese Parameter können übergeben werden (mehrere mit "&" verknüpfen):
myip
für die Übergabe der dynamischen IP-Adresse gedacht
Beispiel: ...../RouterTool.php?myip=192.168.1.1
n
für Einträge mehrerer Router; "n" ist die Nummer des Eintrags
wenn "n" nicht angegeben wird, wird der erste Eintrag bearbeitet
Beispiel: ...../RouterTool.php?myip=192.168.1.1&n=2
comment
für zusätzlichen Kommentar, der zusammen mit Parametern
angezeigt wird
Beispiel: ...../RouterTool.php?comment=Router zu Hause
wakeip
für die Übergabe einer eigenen Wake-on-LAN IP-Adresse.
Mehr zu Wake-on-LAN weiter unten.
Beispiel: ...../RouterTool.php?wakeip=192.168.1.255
wake
die für Wake-on-LAN notwendige MAC-Adresse.
Mehr zu Wake-on-LAN weiter unten.
Beispiel: ...../RouterTool.php?wake=00-12-AB-34-CD-56
wird kein Wert übergeben, wird das Magic Paket zur
gespeicherten IP-Adresse verschickt, einziger erlaubter
zusätzlicher Parameter ist "n".
ftp
für die Übergabe einer IP zum FTP-Server (evtl. mit Port)
Beispiel: ...../RouterTool.php?ftp=192.168.1.5:40
wird kein Wert übergeben wird direkt zum FTP-Server weiter-
geleitet, einziger erlaubter zusätzlicher Parameter ist "n".
web
für die Übergabe einer IP zum Webserver (evtl. mit Port)
Beispiel: ...../RouterTool.php?web=192.168.1.5:8080
wird kein Wert übergeben wird direkt zum Web-Server weiter-
geleitet, einziger erlaubter zusätzlicher Parameter ist "n".
del
löscht existierende Einträge. Zu löschender Eintrag kann als
Wert oder mit "n" übergeben werden. Der Wert wiegt schwerer.
Beispiel: ...../RouterTool.php?del=3
pw
übergibt ein Passwort für das Schreiben bzw. Anzeigen des/der
Einträge. Die Passwörter werden im Klartext in den Variablen
$LESEPW und $SCHREIBPW gesetzt (siehe weiter unten).
Standardmäßig sind Sie leer. Ist einer von beiden leer,
muß kein Passwort angegeben werden.
Beispiel: ...../RouterTool.php?myip=192.168.1.1&pw=geheim
Um die gespeichertern Parameter anzuzeigen einfach Skript ohne
Parameter aufrufen:
...../RouterTool.php
Falls ein Passwort für die Anzeige gesetzt wurde, muss es so aussehen:
...../RouterTool.php?pw=geheim
Wake-on-LAN:
Damit Wake-on-LAN funktionieren kann, muss es im BIOS und unter Windows
aktiviert werden. Eventuell ist auch ein Verbindungskabel von der Netzwerk-
karte zum Mainboard notwendig. Das Wake-on-LAN Paket wird üblicherweise
an die Broadcast-Adresse, z.B. 192.168.1.255 geschickt. Bei einem Router ist
das normalerweise nicht möglich. Daher muss beim Router eine Portregel
erstellt werden, die den Port 9 zur internen Brodcast-Adresse umleitet.
(Derzeit bei der Fritz!Box nicht ohne weiteres möglich!)
Mit einer der letzten Firmwares unterstützt die Fritz!Box das Wake-on-LAN
direkt. Hierzu muss man sich aber in die Administartionsfläche per sicherem
Webzugriff einloggen.
Konfigurationsbeispiel:
Folgende Felder sind unter der DynDNS-Einstellung bei einer Fritz!Box 7170 verfügbar:
(zu finden unter: Erweiterte Einstellungen -> Freigaben -> Dynamic DNS)
1. Dynamic DNS-Anbieter
2. Update-URL (nur verfügbar, wenn unter 1 "Benutzerdefiniert" gewählt wurde)
3. Domain
4. Benutzername
5. Kennwort
6. Kennwortbestätigung
Es muss folgendes eingetragen werden:
Punkt 1: "Benutzerdefiniert"
Punkt 2: "deinedomain.de/deinpfad/RouterTool.php?myip=<ipaddr>&pw=<pass> (<ipaddr> und <pass> ist ein Feld, das von der Fritz!Box gefüllt wird)
Punkt 3: "deinedomain.de" (notwendig, wenn Du auch gleichzeitig Fernwartung machen willst, sonst funktioniert sie nicht)
Punkt 4: kann leer bleiben, da nicht verwendet.
Punkt 5: "Passwort" sofern hier im Script eines gesetzt ist (optional)
Punkt 6: "Passwort" (identisch zu Punkt 5)
*/
# ********************************************************************
# Hier können eigene Anpassungen erfolgen
$SCHREIBPW = "test"; //Passwort, das zum Speichern benötigt wird
$LESEPW = ""; //Passwort, das zum Anzeigen der gespeicherten Werte benötigt wird
$datei = "test.txt"; //Dateiname als Speicherort für die IP-Adressen
# ********************************************************************
$daten = array(); //enthällt alle Daten. Jeder Arrayeintrag ist wieder array
# gespeicherte Informationen pro Eintrag:
# Kommentar - Datum/Uhrzeit - IP-Adresse - FTP-Adresse - Webserver Adresse - Wake on LAN IP-Adresse - MAC-Adresse
$params = 7; //Anzahl der zu speichernden Parameter
# sendet magic packet für Wake on LAN über IP-Adresse $ip, Port $port an MAC-Adresse $mac
function wake($ip, $mac, $port)
{
$mac = str_replace("-", "", $mac); // "-" aus MAC-Adresse entfernen, falls vorhanden
if(strlen($mac)<12) return false; //MAC-Adresse ist zu kurz, abbrechen
$mac = chr(hexdec(substr($mac,0,2))).chr(hexdec(substr($mac,2,2))).chr(hexdec(substr($mac,4,2))).chr(hexdec(substr($mac,6,2))).chr(hexdec(substr($mac,8,2))).chr(hexdec(substr($mac,10,2))); //MAC-Adresse in Zeichn konvertieren
$nic = fsockopen("udp://" . $ip, $port); //UDP-Paket schicken
if($nic)
{
$packet = chr(0xFF).chr(0xFF).chr(0xFF).chr(0xFF).chr(0xFF).chr(0xFF); // 6x FF senden
$packet .= $mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac.$mac; //16x MAC-Adresse senden
}
$ret = fwrite($nic, $packet);
fclose($nic);
if($ret) return true; //hat alles geklappt
return false; //Fehler aufgetreten
}
# lädt IP_Adressen und weitere Informationen
function loaddata($file)
{
if (file_exists($file)) //existiert die Datei?
{
$fp = fopen($file, "r"); //Inhalt der Datei einlesen
$inhalt = fread ($fp, filesize($file));
fclose($fp);
$data=explode("\n",$inhalt); //Daten in array einlesen
return $data;
}
}
# speichert IP_Adressen und weitere Informationen
function savedata($file,$data,$password)
{
if (!((count($_GET) == 1) && isset($_GET['pw'])) && (count($_GET) > 0)) //folgendes nur ausführen, wenn nicht nur dass Passwort als Parameter übergeben wird
{
if (($password == "") || ($_GET['pw'] == $password)) //Passwort stimmt (und ist nicht einziger Parameter) oder Passwort ist nicht gesetzt
{
if ($fp = fopen($file, "w")) //Informationen abspeichern
{
fwrite($fp,implode("\n",$data));
fclose($fp);
return true;
}
else return false;
}
else //Passwort ist falsch
{
# Verhindern, dass Seite aus Cache geladen wird, HTML-Kopf anzeigen
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
print "<html>\n<head>\n<title>Externe IP-Adresse des DSL-Zugangs zuhause</title>\n</head>\n<body>\n";
print "<h1>Zugriff verweigert! Werte nicht gespeichert!</h1>\n";
print "</body>\n"; //HTML-Seite beenden
exit(); //Script beenden
}
}
}
# übernimmt übergebene Parameter aus der URL
function getparameters($data)
{
global $params;
if(isset($_GET['n'])) $counter = $_GET['n']; //Nummer des Eintrags übernehmen
if($counter == "") $counter = 1; //falls kein Parameter übergeben wird auf 1 setzen
if($_GET['del']) $counter = $_GET['del']; //Gibt an welcher Eintrag gelöscht werden soll
# Daten nur dannübernehmen, wenn Parameter mit URL übergeben wurden
for ($i = 0; $i <= ($params-1); $i++ ) //unbelegte Variablen setzen (wichtig fürs abspeichern)
{
if(!isset($data[(($counter-1)*$params)+$i])) $data[(($counter-1)*$params)+$i] = "";
}
if(isset($_GET['comment'])) //wurde Kommentar zu den aktuellen Einträgen übergeben
{
$data[(($counter-1)*$params)+0] = $_GET['comment'];
}
if (count($_GET) > 0) // aktuelle Zeit, wenn ein Parameter übergeben wurde
{
$data[(($counter-1)*$params)+1] = strftime('%d.%m.%Y, %H:%M Uhr',time());
}
if (isset($_GET['myip'])) //wurde parameter myip=... übergeben?
{
$data[(($counter-1)*$params)+2] = $_GET['myip']; //IP-Adresse aus parameter übernehmen
if ($data[(($counter-1)*$params)+2] == "") $data[(($counter-1)*$params)+2] = $_SERVER['REMOTE_ADDR']; //falls keine IP übergeben wurde, die Internet-IP ermitteln
}
# if($data[(($counter-1)*$params)+3] == "") $data[(($counter-1)*$params)+3] = $data[(($counter-1)*$params)+2]; //Haupt-IP-Adresse übernehmen
if(isset($_GET['ftp'])) //wurde Parameter ftp übergeben?
{
if($_GET['ftp']) $data[(($counter-1)*$params)+3] = $_GET['ftp'];
}
# if($data[(($counter-1)*$params)+4] == "") $data[(($counter-1)*$params)+4] = $data[(($counter-1)*$params)+2]; //Haupt-IP-Adresse übernehmen
if(isset($_GET['web'])) //wurde Parameter web übergeben?
{
if($_GET['web']) $data[(($counter-1)*$params)+4] = $_GET['web'];
}
if(isset($_GET['wake'])) //Wake on LAN durchführen
{
if($_GET['wake']) //MAC-Adresse für Wake on LAN aus parameter übernehmen
{
$data[(($counter-1)*$params)+5] = $_GET['wake'];
}
}
# if(($data[(($counter-1)*$params)+6] == "") && $data[(($counter-1)*$params)+5]) $data[(($counter-1)*$params)+6] = $data[(($counter-1)*$params)+2]; //Haupt-IP-Adresse übernehmen
if(isset($_GET['wakeip'])) //Wake on LAN IP-Adresse
{
if($_GET['wakeip']) $data[(($counter-1)*$params)+6] = $_GET['wakeip'];
}
ksort($data); //Daten sortieren
#Einträge löschen
if(isset($_GET['del']))
{
if($deleteentry) $counter = $deleteentry;
for ($i = ($params-1); $i >= 0; $i-- ) //Array-Einträge löschen
{
unset($data[(($counter-1)*$params)+$i]);
}
}
return explode("\n",implode("\n",$data));
}
# zeigt gespeicherte Daten an
function showdata($data,$rpass,$wpass)
{
global $params;
# Verhindern, dass Seite aus Cache geladen wird, HTML-Kopf anzeigen
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
print "<html>\n<head>\n<title>Externe IP-Adresse des DSL-Zugangs zuhause</title>\n<style type='text/css'>\n";
if (($rpass == "") || ($_GET['pw'] == $rpass)) //Lese-Passwort stimmt oder Passwort ist nicht gesetzt
# if (($rpass == "") || ($_GET['pw'] == $rpass) || ($_GET['pw'] == $wpass)) //Lese- bzw. Schreib-Passwort stimmt oder Passwort ist nicht gesetzt
{
print "th{text-align:left;padding:0 0 0 3em;color:#666;vertical-align:top;width:15em;}\n";
print "td{font-weight:bold;font-family:monospace;padding:0;}\n";
print "table{width:100%;}\n";
print "a{text-decoration: none;color:#000;display:block;}\na:hover{color:#00D;background-color:#DDD;}\n";
print "small a{color:#CCC;display:inline;}\nsmall a:hover{color:#F00;background-color:transparent;}\n";
print "\n</style></head>\n<body>\n"; //HTML-Kopf
if(isset($_GET['del'])) print "<h3>Status: Eintrag gelöscht!</h3><hr \>\n";
if(isset($_GET['wake']) && ($_GET['wake'] == "")) print "<h3>Status: Wake-on-LAN Paket verschickt!</h3><hr \>\n";
$i = 1;
do
{
$ipaddress = $data[(($i-1)*$params)+2]; //Haupt-IP-Adresse zwischenspeichern
$ftpaddress = $ipaddress;
$webaddress = $ipaddress;
$woladdress = $ipaddress;
print "<h2>Eintrag $i: <small><small><small><a href='RouterTool.php?del=$i&pw=$wpass'>LÖSCHEN</a></small></small></small></h2>\n";
print "<table cellspacing='0'>\n";
print "<tr><th>Kommentar:</th><td>".$data[(($i-1)*$params)+0]."</td></tr>\n";
print "<tr><th>Stand von:</th><td>".$data[(($i-1)*$params)+1]."</td></tr>\n";
print "<tr><th>WAN IP-Adresse:</th><td>".$ipaddress."</td></tr>\n";
if ($data[(($i-1)*$params)+3] != "") $ftpaddress = $data[(($i-1)*$params)+3]; //Wenn keine FTP-Adresse vorhanden, Haupt-IP-Adresse verwenden
print "<tr><th>FTP IP-Adresse:</th><td><a href='ftp://".$ftpaddress."' title='Mit FTP verbinden'>ftp://".$ftpaddress."</a></td></tr>\n";
if ($data[(($i-1)*$params)+4] != "") $webaddress = $data[(($i-1)*$params)+4]; //Wenn keine WEB-Adresse vorhanden, Haupt-IP-Adresse verwenden
print "<tr><th>Webserver IP-Adresse:</th><td><a href='http://".$webaddress."' title='Mit Webserver verbinden'>http://".$webaddress."</a></td></tr>\n";
print "<tr><th>Gesicherter Webserver:</th><td><a href='https://".$webaddress."' title='Mit gesichertem Webserver verbinden'>https://".$webaddress."</a></td></tr>\n";
if ($data[(($i-1)*$params)+6] != "") $woladdress = $data[(($i-1)*$params)+6]; //Wenn keine Wake-on-LAN-Adresse vorhanden, Haupt-IP-Adresse verwenden
if ($data[(($i-1)*$params)+5] == "") $woladdress = ""; //Wenn keine MAC angegeben ist, macht Wake-on-LAN IP-Adresse keinen Sinn
print "<tr><th>Wake-on-LAN MAC-Adresse:</th><td><a href='RouterTool.php?wake&n=$i' title='Wake-on-LAN Paket an ".$woladdress." senden'>".$data[(($i-1)*$params)+5]."</a></td></tr>\n";
print "<tr><th>Wake-on-LAN IP-Adresse:</th><td><a href='RouterTool.php?wake&n=$i' title='Wake-on-LAN Paket an ".$woladdress." senden'>".$woladdress."</a></td></tr>\n";
print "</table>\n";
$i++;
}
while (($i*$params)<= count($data));
}
else //Passwort ist falsch
{
print "\n</style></head>\n<body>\n"; //HTML-Kopf
print "<h1>Zugriff verweigert!</h1>\n";
}
print "\n</body>\n"; //HTML-Seite beenden
}
# führt Aktion gemäß Parameter in URL aus
function doaction($data)
{
global $params;
if(isset($_GET['n'])) $counter = $_GET['n']; //Nummer des Eintrags übernehmen
if($counter == "") $counter = 1; //falls kein Parameter übergeben wird auf 1 setzen
if(((isset($_GET['ftp']) && (count($_GET) == 1)) || (isset($_GET['ftp']) && isset($_GET['n']) && (count($_GET) == 2))) && ($_GET['ftp'] == "")) //direkt zu FTP-Adresse umleiten
{ //nur wenn "ftp" ohne parameter angegeben wird
header("Location: ftp://".$data[(($counter-1)*$params)+3]); //direkt zur FTP-Adresse umleiten
exit();
}
if(((isset($_GET['web']) && (count($_GET) == 1)) || (isset($_GET['web']) && isset($_GET['n']) && (count($_GET) == 2))) && ($_GET['web'] == "")) //direkt zu Webserver-Adresse umleiten
{ //nur wenn "web" ohne parameter angegeben wird
header("Location: http://".$data[(($counter-1)*$params)+4]); //direkt zur Web-Adresse umleiten
exit();
}
if((isset($_GET['wake']) && (count($_GET) == 1)) || (isset($_GET['wake']) && isset($_GET['n']) && (count($_GET) == 2)) && ($_GET['wake'] == "")) //Wake on LAN Paket senden
{
wake($data[(($counter-1)*$params)+6], $data[(($counter-1)*$params)+5], 9); //Paket über Port 9 schicken
}
}
##### Ab hier beginnt das eigentliche Programm
# Daten einlesen
$daten = loaddata($datei);
# Übergebene Parameter auslesen
$daten = getparameters($daten);
# Daten abspeichern
savedata($datei,$daten,$SCHREIBPW);
# Aktion durchführen
doaction($daten);
# Daten anzeigen
showdata($daten,$LESEPW,$SCHREIBPW);
?>
Gestartet wird das ganze über einen DynDNS Befehl der Fritzbox mit folgendem Zusatz:
http://sub.mydomain.de/RouterTool.php?myip=<ipaddr>&pw=test
Jetzt wäre es ideal, das genau dieses Script mir nur die IP des Internetanschlusses raus gibt (von mir aus auch an eine andere Subdomain, dann kann ich das Script für FTP Zugang oder ähnlichem bestehen lassen)
Kann mir jemand Unterstützung geben?
Gruss