Wake on LAN benötigt eine Netzwerkkarte, sowie eine Hauptplatine, die WOL unterstützen. Die Netzwerkkarte muss über Standby mit Strom versorg sein. Ist dies der Fall, kann man der Netzwerkkarte ein sog. Magic Paket senden, was dann zum starten des Rechners führt.
Dieses Magic Paket enthält sechs mal hintereinander den Wert FF, danach folgt 16 mal die MAC-Adresse der Netzwerkkarte. Für den Versand von so einem Datenpaket gibt es jede Menge Windows-Tools.
Manchmal möchte man aber das WOL automatisieren, z. B. für das regelmässige sichern von Desktop-Rechnern. An dieser Stelle bräuchte man dann ein Script, das man zeitgesteuert ausführen lassen kann. Genau so ein Problem hatte ich kürzlich zu lösen. Meist bietet sich hier eine Scriptsprache wie Perl oder Windows Power Shell an. Da ich aber am liebsten in PHP programmiere, hab ich das WOL-Script eben mit PHP geschrieben.
Hier mal meine Lösung:
//#!/usr/bin/php -q
#!C:\Program Files\php\php.exe -q
// -------------------------------------------------------------------------------------------------------------------------
// Main Script
// -------------------------------------------------------------------------------------------------------------------------
// Hosts mit IP und Mac
$hosts = array(
array('mac' => '00-11-22-FF-EE-AA', 'host' => '192.168.0.55', 'port' => '7')
);
//
// WOL ausführen
//
try
{
foreach($hosts as $host)
{
pingPC($host);
if ( $return == 0 )
{
echo "Rechner laeuft";
}
else
{
echo "Rechner aus";
}
wakeOnLAN($host['mac'], $host['host'], $host['port']);
}
}
catch(Exception $e)
{
echo $e->getMessage();
exit();
}
// -------------------------------------------------------------------------------------------------------------------------
// WOL Funktion
// -------------------------------------------------------------------------------------------------------------------------
function wakeOnLAN( $macAdress, $host, $port )
{
$magicPacket = ''; // Magisches Packet für WOL (entsprechend AMD Spec)
$ff = chr(0xFF); // notwendiger Hexwert
$host = 'udp://' . $host;
//
// Verbindung aufbauen
//
if( !$fp = fsockopen($host, $port, $errno, $errstr, 2) )
{
fclose($fp);
throw new Exception("NetworkException: Es konnte keine Verbindung mit $host [$macAdress] hergestellt werden. Error Message: " . $errstr );
}
//
// Überflüssige Zeichen aus der Mac-Adresse filtern und in Binär-Zeichenkette konvertieren
//
$macAdress = preg_replace('/[^a-f0-9]/i', '', $macAdress);
$macAdressBin = pack('H12', $macAdress);
//
// Magic Packet aufbauen
//
$magicPacket = str_repeat($ff, 6); // 6 x FF
$magicPacket .= str_repeat($macAdressBin, 16); // 16 x Mac-Adresse der Netzwerkkarte
//
// Magic Packet senden
//
fwrite($fp, $magicPacket);
fclose($fp);
return true;
}
function pingPC( $host )
{
exec("ping $host -n 1", $array, $returnCode);
return $returnCode;
}