Wake on LAN (WOL) nur mit PHP, auch über das Internet

Aus
Version vom 13. Juli 2011, 12:41 Uhr von Brandelh (Diskussion | Beiträge) (Wake on Lan (WOL) mit reinem PHP Skript. Rechner im LAN über NAS starten (auch aus dem Internet).)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Einleitung

Dieses PHP-Script ermöglichet es PCs über einen Button auf einer HTTP Seite, oder durch direkten PHP Aufruf zu starten. Es muss auf dem NAS außer diesem PHP Skript und eventuellen Aufrufe-HTML Seiten nichts installiert werden.
Das Beispiel HttpWakeUp_Wake-On-LAN_Pakete_per_Webinterface_verschicken [1] zeigt die Verwendung eines Programmes mit GUI-Oberfläche und Auswahl von LAN Rechnern, viele mögen das, aber für meinen speziellen Bedarf ist es nicht brauchbar.
Dieses Script hier muß auf genau einen Rechner angepaßt werden (MAC-Adresse) und startet auch nur genau diesen. Allerdings auch über das Internet durch einen Router, wenn die NAS eine HTTP Seite darstellen darf. Ich nutze es um z.B. von "außen" meinen Windowsserver und meinen Videoserver zu starten. Meinen eigenen Server könnte ich über die Verwaltungsoberfläche der Fritzbox starten, aber den Videoserver sollen mehrere Personen starten können, ohne dass ich irgendwelche Rechte freigebe. Natürlich könnte man den Aufruf auch in ein geschütztes Verzeichnis packen.

Voraussetzungen

  • Web-Station muss aktiviert sein oder ein anderer HTTP-Server im lokalen LAN !
  • Für Aufrufe aus dem Internet muss die die Web-Seite über z.B. dyndns von außen erreichbar sein.
  • Eintragung der gewünschten MAC-Adresse
  • PHP

Vorteile

  • Dieses WOL funktioniert auch aus einem Programm heraus, das eine Web-Seite aufrufen und einen POST auslösen kann.
  • Durch die strikte Vorbereitung muss man weder Kennwörter noch Zugänge bereitstellen, einfach ein Script über die HTML Seite aufrufen.

Nachteile

  • Man muss wissen was eine MAC-Adresse ist ...

Danksagung

Ich selbst kann kein PHP, ich habe eine grafische Oberfläche mit einem Script und GUI Oberfläche hier gefunden: wolviaphp.sourceforge.net [2]
Nun habe ich herauskopiert was nötig war um den Rechner zu starten und habe noch einen HTML Aufruf gebastelt.

Vielen Dank für die Vorlage !

Die Scripts und die HTML-Start-Seite

INDEX.HTML oder ein anderer Name ... ???.HTML

<!doctype html>
<html>
<head>
  ...
  <meta http-equiv="expires" content="0">
  <meta http-equiv="Pragma" content="no-cache">
  ...
  <title>Testseite für WOL über NAS</title>
</head>
<body text="#000000" bgcolor="#CCFFFF" link="#FF0000" vlink="#800080" alink="#0000FF">
  ... blendet einen Button ein mit "Starte Server" Aufschrift.
  ... nach dem Klicken wird im aktuellen WEB-Serververzeichnis das Script "StarteServer.php" ausgeführt. 
  <form method="POST" action="StarteServer.php" name="WOL_form.php">
     <input type="submit" name="submit" value="Starte Server"></input>
  </form>
  ...
</body>
</html>

Das eigentliche StarteServer.PHP Skript ist zu lang um es hier anzuzeigen, ich werde es hochladen müssen.

Nötige Anpassungen

mit IPCONFIG oder in den Eigenschaften der Netzwerkkarte die MAC-Adresse ermitteln und hier eintragen.

$mac_address = "00:00:00:00:00:00";  // dieser Rechner soll gestartet werden

Falls die eigene IP-Adresse nicht im Bereich 192.168.0 ist, muss auch diese Zeile geändert werden:

$addr = "192.168.0.37";              // Adresse aus dem eigenen Segment, Router oder aktueller Rechner sind OK.

Der Rest ist im Heimgebrauch immer richtig, ansonsten anpassen

$cidr = "24";                        // MASK: 255.255.255.0 ==> 24 (3 Byte * 8 Bit)
$port = "9";                         // Bei mir ging auch 1 und 7, weitere ?

Diese Funktion erledigt die ganze Arbeit, einige Prüfungen könnte man sich noch sparen, da ja per Vorgabe und nicht mit GUI gearbeitet wird, aber so geht es.

function WakeOnLan($mac_address, $addr, $cidr, $port)

ganz unten dann der Aufruf und die Anzeige der Rückgabe ... diese könnte besser aussehen ;-)

$Return_WakeOnLan = WakeOnLan($mac_address, $addr, $cidr, $port); // executes this function
...