Server status abfrage mal anders

Lan-Junky

Grünschnabel
Hi @all,

Ich wollte mal fragen ob mir jemand mit meinem Problem weiterhelfen kann.

Ich hab nen Webserver aufgesetzt der nicht immer Online ist. Wie bei ner server status abfrage zu erwarten ist. Nun ist aber das Problem das alle scripts die ich bis jetzt gefunden habe nur die verfügbarkeit von ports testet. Dummerweise hängt mein server aber hinter nem Router das heisst wenn der Server aus ist und der router an bekomme ich als Serverstatus trozdem Online ausgegeben.

Meine Idee war es jetzt mit php eine bestimmte datei auf dem server auf vorhandensein zu prüfen und wenn die verfügbar ist über online/offline Bilder das ganze auszugeben.

Hab nur leider keine ahnung wie das realisierbar ist.

Ihr könnt mir bestimmt helfen.

THX @ all
 
Also wenn Du die Verfuegbarkeit eines Ports auf einem anderen Rechner pruefst sollte es egal sein ob Du hinter einem Router haengst oder nicht. Denn wenn der Port geschlossen ist wird der Router ja nicht einfach eine entsprechende Antwort schicken und so tun als waere dieser Port erreichbar.
Entsprechend sollte ein TCP-Ping auf einen bestimmten Port vollkommen ausreichend sein.

Alternativ kannst Du, wie Du ja schon angesprochen hast, eine Datei abfragen. Das stellt nicht nur sicher dass der Port offen ist, sondern auch dass der dahinter laufende Dienst auch reagiert. Ich kann Dir hierfuer Klassen fuer HTTP und FTP zur Verfuegung stellen. Die meisten anderen Dienste haben ja eh recht wenig mit Dateien zu tun. Aber ich geh eh davon aus, dass es sich beim zu pruefenden Dienst um einen Webserver handelt.
 
Also erstmal Mega Dankeschön das du so schnell reagiert hast. Find ich riesig:)

Jetzt muss ich mich nur leider zugeben das ich noch ziemlich am anfang von php stehe.

Ich hab gedacht das könnte man einfach via if else abfrage oder sowas machen.
Dein link den du mir gegeben hast ist klasse. Ich werde ihn mir auf jeden fall merken wenn ich in meinem php Buch etwas weiter bin. aber momentan verstehe ich leider die hälfte davon nicht. (um ehrlich zu sein ich weiss noch nicht einmal was du mit klassen meinst)

Gibt es nicht eine einfachere Lösung?

Aber danke trotzdem

MFG
LJ
 
Zusammengekuerzt koennte der Ping ungefaehr so aussehen:
PHP:
$socket=@fsockopen($host,$port);
if ($socket!=false)
{
 fclose($socket);
 echo 'Port erreichbar.';
}
else
{
 echo 'Port nicht erreichbar.';
}
Dabei wird schlichtweg versucht mit dem Port $port auf dem Rechner $host eine Verbindung aufzubauen. Wenn dies klappt ($socket!=false) wird "Port erreichbar." ausgegeben, ansonsten "Port nicht erreichbar.".
 
Also habs jetzt mal in ne php datei gepackt und ausprobiert.

Problem1:

Egal was ich als host abgebe meldet er immer port nicht erreichbar. Also auch web.de, microsoft und co.

Problem2:

Wenn hinter dem router 2 oder mehr pc hängen woher weiss er dann bei welchem der port gehen muss?

Problem3:

kann es probleme geben wenn man ne dyndns dazwischen hat das er den weiterleitungsserver abfragt?

Naja n paar sachen über die ich mir so gedanken mache.

Danke schon mal für deine Hilfe

Vielleicht fällt dir ja noch was ein.
 
Frage 1:
PHP:
<?php
$host = "microsoft.de";
$port = "80";

$socket=@fsockopen($host,$port);
if ($socket!=false)
{
 fclose($socket);
 echo 'Port erreichbar.';
}
else
{
 echo 'Port nicht erreichbar.';
}  

?>
Funktioniert wunderbar. Man sollte natürlich auch nur Ports checken, die definitiv offen sind. Bei einem Webserver ist das i.d.R. 80 (HTTP), 21 (FTP). Alles andere ist dann zusätzlich Sachen wie SSH Zugänge, SMTP, etc.

Frage 2:
Das muss der Router durch ein Port Forwarding erledigen.

Frage 3:
Höchstens wenn der Weiterleitungsserver eine Antwort ausgibt, wenn dein PC nicht online ist. Aber dies ist bei DynDNS nicht der Fall, soweit ich weiß.

Gerade mal getestet, anscheinend zeigt DynDNS doch einige Ports automatisch als online an, auch wenn der PC dahinter nicht erreichbar ist. Getestet habe ich Port 80 und 21. Allerdings nur bei Adressen die auch existieren.
 
Coooooool:)

Also die abfrage funktioniert! *freu* hab keine variablen gesetzt sondern adresse direkt eingetragen *ups*

Jetzt hab ich nur noch ne letzte frage.

könnte man jetzt nicht zusätzlich zu der portabfrage noch ne sicherheitsabfrage machen wie z.b. ich hinterlege auf dem server ne onlinecheck.php oder so die mein script versucht zu erreichen und damit garaniert das es auch der richtige server ist der antwort gegeben hat?
 
Jap, ist es.

Ich verweise dich einmal auf das Tutorial von Dennis Wronka:

HTTP ohne cURL

Dort bietet er eine Klasse an, die alle Fähigkeiten bietet, die du suchst. Die Beispiele sind relativ selbsterklärend.
 
Naja ich glaube mit dem ding muss ich mich nochmal rumschlagen wenn ich n bissel besser php viele sachen die ich schon beim lesen nicht verstehe.

Aber ich danke euch mal für eure schnelle hilfe:)

Immerhin zeigt er mal was an

THX @ ALL
 
Also hab jetzt ne möglichkeit gefunden wie ich des testen kann

PHP:
<?php

$host = "host";
$port = "80";
$alive = "on.jpg";
$dead = "off.jpg";
$file = "online.html";

$socket=@fsockopen($host,$port);
if ($socket!=false)
{
 fclose($socket);
 if (fopen("http://server.de/$file", "r"))
   {
     header("Location: $alive");
  }
else echo "n";
}
else
{
 header("Location: $dead");
}
?>

Aber ich bekomm immer ne fehlermeldung an der sich das script aufhängt wenn die datei mal net da ist.
 
Zurück