So was ähnliches wie DynDNS

Status
Für weitere Antworten geschlossen.

Martin.S

Benutzer
Mitglied seit
23. Jul 2008
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Erst mal danke für all die vielen Infos in diesem Forum, besonders @itari

Die idee mit dem Chronjob hat es mir angetan. Aber sogar nach 7 Tassen Kaffee (also 3 Stunden Realzeit) kriege ich es nicht ganz auf die Reihe.

Also: Geklappt hat folgendes:
Ich habe mit telnet open 192.nnn.nnn.nnn als "root" die PHP-Ini durch cp /usr/syno/etc/php.ini /volume1/public ins public geladen.
Dann "safe_mode_exec_dir = /usr/syno/bin" zu
"safe_mode_exec_dir = ; /usr/syno/bin" gemacht
nun mit cp /volume1/public/php.ini /usr/syno/etc/php.ini zurückkopiert. Hatte bis jetzt kaum mit Telnet zu tun, und bin um so mehr erstaunt, das die Kiste noch läuft :)

Dann wollte ich per Chronjob jede Minute ein Script aufrufen:
Habe in das Webinterface von itari folgendes geschrieben:

/01 * * * * root -f /volume1/web/synologyip.php

nun müsste doch jede min. die synologyip.php gestartet werden, oder?
oder wie rufe ich die Datei sonst auf? Kann ich gar eine Datei auf einer Webseite so aufrufen?

Sorry für die vielleicht banale Frage. Bin sonst nur mit Windows per Du.
Und danke fürs Lesen :p
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
@Martin.S,

die /etc/crontab ist als Idee eigentlich nur für Programme oder Skripte gedacht, die keine Interaktion mit dem Benutzer haben. Wenn du nun versuchst ein php-Skript zu starten, dann musst du ersten das Kommandozeilenprogramm php installieren und für den Aufruf benutzen und zweitens darauf achten, dass auch ja keine Ausgaben für den Browser drin sind :)

Umgekehrt geht es mit wget, also ein Download quasi.

Wenn ich mir deinen Beitrag so anschau, dann würde ich gerne wissen wollen, was du eigentlich vorhast. Vielleicht gibt es ja ein Lösung auf eine ganz andere Art. Bei den CronJobs muss man sich immer vorstellen, dass kein Benutzer mehr am System sitzt und dass etwas vollautomatisch im Hintergrund ablaufen soll (wie eine Datensicherung oder ein Download). Erzähl doch einfach mal, was du vor hattest.

itari
 

Martin.S

Benutzer
Mitglied seit
23. Jul 2008
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Also: ich Will...

Erst mal danke für die schnelle Antwort!

Was ich eigentlich will:
Was ich will ist (neben etwas dazulernen) mir mein eigenes "DynDNS" basteln.
Eine DynDNS -Adresse hab ich bereits und die funktioniert ja auch. Doch auf den eigenen Webseiten könnte ich noch diverse andere Dinge vorschalten. Beispielsweise bestimmte IP's von Anfang an nicht auf die DS umleiten, die DS in ein Frame einbinden und die Mailfunktionen aus der Hauptseite nutzen, ect.


Was ich habe
Ich hab ein paar kleine, PHP-fähige Webseiten ausserhalb der DS.
Eine PHP-Datei auf einer von denen soll in Zukunft regelmässig von der DS besucht werden, im meine IP Zuhause zu ermitteln.

Das wird mit dem Code hier auf dem Zielrechner klappen:
Rich (BBCode):
function get_ip() 
{ 
    $ip = "UNBEKANNT"; 
    if ($_SERVER["HTTP_CLIENT_IP"])                $ip = $_SERVER["HTTP_CLIENT_IP"]; 
       else if($_SERVER["HTTP_X_FORWARDED_FOR"])   $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
          else if($_SERVER["REMOTE_ADDR"])         $ip = $_SERVER["REMOTE_ADDR"]; 
    return $ip; 
}


Und Dein Script scheint dazu perfekt zu sein! (Chronjob soll die PHP-Datei aufrufen).

Bitte richtige Antwort ankreuzen: (Mehrfachauswahl möglich)
[ ] "Das geht leider nicht"
[ ] "Das geht mit folgender Zeile [________________]"
[ ] "Trink weniger Kaffee und bleib gefälligst bei DynDNS"
[ ] "Mensch Martin, bist Du doof, das geht mit [________________] viel einfacher!"

:D ... Nun bin ich auf Deine Antwort gespannt ...

Herzlichen Dank,
Martin
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
ganz ehrlisch, habs net ganz verstanden, was du willst :D. Ich versuch es mal mir zu erklären:

Du hast ne eigene Seite beim Hoster und willst dort in einem Frame auf den Webserver der DS??? Weißt aber die IP nicht, weil dein Provider alle Tage lang dir eine neue für dein Home-Netz vergibt, in dem deine DS ist. Joa???

Nu willst keine DynDNS, weil die Namen immer so blöd aussehen, aber anschauen tuts die eh keiner, weil ist ja in deiner Webseite im Frame :rolleyes:

Also möchstest, dass die DS von sich aus aktiv wird, deine Webseite beim Provider besucht und dabei eine Spur hinterlässt :confused:, die du dann auswertest und für deinen Frame_Webseiten_Aufruf_deiner_DS nutzen kannst.

Also brauchst auf der DS was, was ins Web gehen kann und periodisch von sich aus aktiv wird. Dafür willst nu lernen, wie der cron geht. :p

Ähm, ein Motiv braucht jeder fürs Lernen :D

Hatte dir eigentlich den Tipps des Tages schon geben: wget --help und schau mal, was du damit hin bekommst. Der wget kann deinen Provider-Webserver besuchen und z.B. eine bestimmte Seite aufrufen. Dein Provider-Webserver kann nun den Header mit PHP auswerten ($_SERVER["REMOTE_ADDR"]) und das für deine Zwecken weiterverarbeiten.

X das geht leider doch irgendwie
X aber ohne Folgen
X schieb mal nen Kaffee rüber
X Mensch Martin, du hast ja Ideen

itari
 

Martin.S

Benutzer
Mitglied seit
23. Jul 2008
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Du hast ne eigene Seite beim Hoster und willst dort in einem Frame auf den Webserver der DS??? Weißt aber die IP nicht, weil dein Provider alle Tage lang dir eine neue für dein Home-Netz vergibt, in dem deine DS ist. Joa???
Bingo!

Nu willst keine DynDNS, weil die Namen immer so blöd aussehen, aber anschauen tuts die eh keiner, weil ist ja in deiner Webseite im Frame
Naja... Mal abgesehen davon, das DynDNS in der Firma nicht erreichbar ist schaut es tatsächlich blöd aus :) Jetzt wo Du es sagst stört es mich auch :D

Also möchstest, dass die DS von sich aus aktiv wird, deine Webseite beim Provider besucht und dabei eine Spur hinterlässt , die du dann auswertest und für deinen Frame_Webseiten_Aufruf_deiner_DS nutzen kannst.
Jep, exakt

Also brauchst auf der DS was, was ins Web gehen kann und periodisch von sich aus aktiv wird. Dafür willst nu lernen, wie der cron geht.
Jawohl, noch ein Volltreffer. Hey, daran sieht man, das wir nicht verheiratet sind. Du verstehst mich auf Anhieb :)

Habe mir
http://www.gnu.org/software/wget/manual/wget.html angesehen und Bruchteile davon glaube ich sogar verstanden.

Habe dann
PHP:
<?php
$fileURL = "http://MeinWeb.ch/MeineDatei.php";
$escape = escapeshellarg($fileURL);
exec("wget " . $escape);
?>
gebastelt und wenn ich es über den Browser aufrufe, macht es, was es soll... also stimmt schon mal die Theorie.
wget wäre die richtige Wahl. Und den Befehl kann ich bestimmt auch sonst mal brauchen.

Hochmotiviert (doch nichts kapiert) habe ich dann verschiedenste Schreibweisen nach trial and error duchprobiert.

Rich (BBCode):
[ #minute ] [ hour ]   [ mday ]   [ month ]  [ wday ]   [ who  ]  [ command ]
[ *       ] [ *    ]   [ *    ]   [ *     ]  [ *    ]   [ wget ]  [ wget.php]
[ */1     ] [ *    ]   [ *    ]   [ *     ]  [ *    ]   [ wget ]  [ wget.php]
[ *       ] [ *    ]   [ *    ]   [ *     ]  [ *    ]   [ root ]  [ wget.php]
[ *       ] [ *    ]   [ *    ]   [ *     ]  [ *    ]   [ root ]  [ http://MeinWeb.ch/MeineDatei.php]
Vergebens :confused:
Die Motivation ist verpufft, der Kaffee einem kühlen Bier gewichen,
aber Spass hat es trotzdem gemacht und ein bisschen gelernt über Telnet , Linux und wget hab ich auch dabei.
In diesem Sinne nochmals Danke für die Zeit die Du in mich investiert hast - sogesehen war es nicht ganz vergeblich für mich.
Vielleicht versuche ich es Morgen nochmal. Ich bin ja nicht nur begriffsstutzig sondern auch noch stur ;)

Gute Nacht
Martin
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Warum schaust dir eigentlich nicht mal ein Linux-Manual an???? Ich denke, dass wird dir am meisten helfen :D

Zu deiner crontab-Eintragung, die sich auf eine Zeile und auf das ganz Wesentliche beschränkt und vielleicht deshalb funktionieren wird:

*/1<TAB>*<TAB>*<TAB>*<TAB>*<TAB>root<TAB>wget [ev. Optionen] "http://MeinWeb.ch/MeineDatei.php"

Vergiss beim crond den Browser, es geht nicht. Vergiss das Web. Vergiss php. Vergiss das Bier nicht. Vergiss dein Weib nicht oder bist noch zu haben ??? :D

itari
 

Martin.S

Benutzer
Mitglied seit
23. Jul 2008
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hab was für euch

Warum schaust dir eigentlich nicht mal ein Linux-Manual an???? Ich denke, dass wird dir am meisten helfen.
Hab ich schon, glaub mir. Ist aber eher Neuland für mich.
Inzwischen weiss ich doch schon einiges... Nur begriffen hab ich wenig :)

Zu deiner crontab-Eintragung, die sich auf eine Zeile und auf das ganz Wesentliche beschränkt und vielleicht deshalb funktionieren wird:
DANKE! Ich war wie Du oben siehst nahe am Ziel vorbeigeschossen.
Aber jetzt geht es tatsächlich!

Vergiss beim crond den Browser, es geht nicht. Vergiss das Web. Vergiss php. Vergiss das Bier nicht. Vergiss dein Weib nicht oder bist noch zu haben ???
Ich glaub, ich hab's begriffen :) Bier hab ich nicht vergessen und nein, ich bin seit 1/3 meines Lebens in festen Händen. Noch dazu in sehr guten. Meine Freundin mag Bier nämlich auch :D

So. Habe aus dem Ganzen was gebastelt und werde demnächst das Script Online geben für Andere, damit Deine Arbeit Früchte trägt.
Fortsetzung folgt gleich ...
 

Martin.S

Benutzer
Mitglied seit
23. Jul 2008
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Die folgenden Scripte sind sicher nicht perfekt, aber sie bieten genug Spielraum zum experimentieren.

Vorbereitung: Chronjob nach Art des Hauses auf der DS einrichten.
Deinen Webserver (nicht die DS, sondern Deine Homepage da draussen in den Weiten des WWW) mit 5 Dateien "beglücken".
4x PHP Dateien und eine beschreibbare Textdatei.


Irgendwaskompliziertes.php (Wähle den Namen so, das man ihn nicht gleich erraten wird.) Sonst ruft ein Scherzkeks die Datei selber auf und schreibt so ne jalsche IP zur Umleitung rein.
Denn das ist die Datei, die Du per Chronjob in Zukunft ansteuern sollst.
Zum Testen kannst Du sie auch direkt aufrufen. Dann aber setze in der Config den Debug-Wert auf TRUE.

PHP:
<?php
# Name der Datei: Irgendwaskompliziertes.php
# Zweck:          Nachführen der IP-Adresse

define ('_KENNUNG_',        $_SERVER['SERVER_ADDR']);  // Schutz-Konstante. 

require('synology_config.php');
require('synology_funktionen.php');

$MyIP = get_ip() ;  // Die aktuelle IP ermitteln
IPSyntax($MyIP) ;   // Traue keinen Werten von aussen

$Zugriffszahl = set_counter($MyDat, $MyIP) ;
   

if ( _DEBUG == TRUE )
{   
?>
<HTML>
<HEAD>
<TITLE>IP</TITLE>
</HEAD>
<BODY>
<BR>
<P ALIGN="Center">
<FONT FACE="Arial, helvetica" SIZE="+2" COLOR="#006600"><STRONG><em>IP-Updater</em></STRONG></FONT>
</P>
<BR>

<CENTER>
  <p><B>Kontrolle:  <?php echo $Zugriffszahl; ?> </B></p>
  <p><B>IP:  <?php echo $MyIP; ?> </B></p>
    </p>
</CENTER>
</BODY>
</HTML>
<?php } ?>

Nun eine simple Textdatei namens synology_textdata.txt
Achtung! Die braucht Schreibrechte!

Die wird übrigens so aufgerufen, das man unten jeweils eine Art Logtatei basteln könnte...
Ne Datenbanklösung wäre hier noch sinnvoller, aber hey, es sol ja ein verständliches Beispiel bleiben.

Inhalt:
PHP:
0
127.0.0.1

Dann noch die Datei, welche in Zukunft aus dem Web auf Deine DS Zuhause zielen soll, die
synology_umleitung.php
PHP:
<?php

define ('_KENNUNG_',        $_SERVER['SERVER_ADDR']);      // Schutz-Konstante

require('synology_config.php');
require('synology_funktionen.php');

$MyIP= ReadIPText($MyDat) ; // IP aus Textdatei lesen
IPSyntax($MyIP) ;           // Traue keinen Werten von aussen. Auch nicht Textdateien mit Schreibrechten


$cs = @fsockopen($MyIP, $Port, $errno, $errstr, 1);

if ($cs && $errno == 0) 
	{
		$ServerErreichbar = TRUE;
	} 
	else 
	{
		$ServerErreichbar = FALSE;
	}

   @fclose($cs);


if ($ServerErreichbar == TRUE) 
	{
		header ('Location: http://' .$MyIP);	
	}
elseif ($ServerErreichbar == FALSE)
	{
		header ('Location: '.$AusserBetrieb);
	}

?>

und nun die vierteDatei mit den Funktionen, die
synology_funktionen.php

PHP:
<?php

function ReadIPText($MyDat) 
{ 
// Textdatei auslesen
	 $fp=fopen($MyDat,'r');
	   $temp=fgets($fp,1024);         //die erste Zeile will ich nicht... Ist ja nur der Counter
	   $MyIP=trim(fgets($fp,15));     //die zweite Zeile ist spannender. Dies ist die IP
	 fclose($fp);
  return $MyIP; 
}
  
  
function IPSyntax($MyIP) 
{ 
// Bin Paranoid. Ich traue keinen Werten von aussen :-)
  $CheckIPSyntyx = ereg("([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})", $MyIP );
  if ( $CheckIPSyntyx == FALSE) die('... Nö du, das ist keine IP ('.$MyIP.') die ich prüfen kann.');
  return TRUE; 
}
  
  
function set_counter($DieDatei, $AktuelleIP) 
{ 
// Textdatei aktualisieren
    $nl = chr(13) . chr(10);         // Zeilenumbruch-Zeichen

	$fp = fopen($DieDatei, 'r+');    // Öffnet die Datei 
	flock($fp, 1);                   // 1 - Verriegelung für Lesezugriff
	$counter = fgets($fp, 1024);     // Lies die erste Zeile ein
	$counter += 1;                   // Counter um 1 erhöhen
	$IP = fgets($fp, 1024);          // Lies die zweite Zeile ein	
	fseek($fp,0);                    // Dateizeiger zurücksetzen
	fputs($fp, $counter.$nl);        // Neuen Counter-Wert eingeben
	fputs($fp, $AktuelleIP);         // Aktuelle IP eintragen
	flock($fp, 3);                   // 3 - Verriegelung wieder freigeben
	fclose($fp);                     // Und Tschüss

  return $counter;
}


function get_ip() 
{ 
// IP ermitteln
    $ip = 'UNBEKANNT'; 
    if ($_SERVER['HTTP_CLIENT_IP'])                $ip = $_SERVER['HTTP_CLIENT_IP']; 
       else if($_SERVER['HTTP_X_FORWARDED_FOR'])   $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
          else if($_SERVER['REMOTE_ADDR'])         $ip = $_SERVER['REMOTE_ADDR']; 
    return $ip; 
}

 ?>

So... Passe die Config an und dann viel Spass.
synology_config.php

PHP:
<?php
# Name der Datei: synology_config.php
# Zweck: Config
 
  
  $MyDat = 'synology_textdata.txt';   // Zu beschreibende Datei
  $Port =  '80';                  // Gewünschte Port

  $AusserBetrieb = 'http://www.google.ch';    // Hierhin weiterleiten, wenn DS nich erreichbar sein sollte....

  define ('_DEBUG',   FALSE  );   // TRUE, zeigt IP und Counter an
							      // FALSE, aktualisiert lediglich die Textdatei

// -------------------------------------------------------------------------------------


// Einfacher Schutz um Direktaufruf zu verhindern
// Bei den Scripten kann $_SERVER['SERVER_ADDR'] auch durch eine eigene 
// Zeichenkette ersetzt werden.

  defined(              '_KENNUNG_' )  or  die( 'Kein Direktaufruf bitte!' );
  _KENNUNG_ == $_SERVER['SERVER_ADDR'] or  die ('Illegal Access');
  
// -------------------------------------------------------------------------------------
  
  
// Abbruch, wenn Datei fehlt
if (!file_exists($MyDat)) 
{
    echo "Datei $MyDat existiert nicht";
}

	// Abbruch, wenn Schreibrechte falsch sind.
	elseif (!is_writable($MyDat)) 
		{
			die ('Datei ist nicht beschreibbar. Bitte CHMODE anpassen.');
		} 
// -------------------------------------------------------------------------------------

 ?>

Viel Spass beim Umbauen und experimentieren.

Gruss
Martin
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat