Wake On LAN mit PHP

Mit der folgenden Funktion können WakeOnLAN-fähige Computer im lokalen Netzwerk gestartet werden.

[sourcecode language=’php‘]

* @param string $strMacAddress, e.g. ‚001111d35df8‘
* @param integer $iPort, e.g. 80
* @return boolean TRUE: packet send, FALSE: error
*/
function WakeUpComputer($strMacAddress,$iPort=2050) {

$strMAC=“;
$strMagicPaket=“;

if (strlen($strMacAddress) == 12) {
for ($x=0; $x<6; $x++) { $strMAC .= chr(hexdec(substr($strMacAddress,($x*2),2))); } // Part 1: MAC-Address - Bytes 1..6 $strMagicPaket = $strMAC; // Part 2: Bytes 7..8 $strMagicPaket .= chr(0x00); $strMagicPaket .= chr(0x74); // Part 3: 6 x 0xFF - Bytes 9..14 for ($x=0; $x<6; $x++) { $strMagicPaket .= chr(0xFF); } // Part 4: 16 x MAC-Address - Bytes 15..110 for ($x=0; $x<16; $x++) { $strMagicPaket .= $strMAC; } // Part 5: Bytes 111..116 $strMagicPaket .= chr(0x40); // 111 $strMagicPaket .= chr(0x00); // 112 $strMagicPaket .= chr(0x90); // 113 $strMagicPaket .= chr(0x90); // 114 $strMagicPaket .= chr(0x40); // 115 $strMagicPaket .= chr(0x00); // 116 // Send Paket $fudp = fsockopen('udp://255.255.255.255',$iPort,$errno,$errstr); if ($fudp) { fwrite($fudp, $strMagicPaket); fclose($fudp); } else { return FALSE; } } else { return FALSE; } return TRUE; } if WakeUpComputer('001111d35df8') { echo 'MagicPaket gesendet.'; } else { echo 'MagicPaket nicht gesendet'; } ?>
[/sourcecode]

Um unter Windows die MAC-Adressen der lokalen Computer herauszufinden, kann man sie einfach von der Konsole aus anpingen und anschließend ein ‚arp -a‘ ausführen.

In folgenden Beispiel, wollen wir die MAC-Adresse vom Rechner mit der lokalen IP-Adresse 192.168.0.47 herausfinden. Zunächst pingen wir den Rechner an: ‚ping 192.168.0.47‘. Anschließend rufen wir ‚arp -a‘ auf. Nun wird uns die MAC-Adresse angezeigt, die zu der IP-Adresse gehört.

Diesen Wert, in unserem Beispiel ’00-04-75-d7-e0-92′, verwenden wir nun mit unserer Funktion WakeUpComputer(). Allerdings müssen alle Bindestriche entfernt werden. Der Aufruf wäre also: WakeUpComuter(‚000475d7e092‘);