Wake On LAN mit PHP

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

<?php

   Trallala
   
/**
 * WakeUpComputer()
 *
 * Sends a MagicPaket to wake up a computer
 *
 * MagicPaket (116 bytes)
 *
 *     byte   content
 * ---------------------------
 *     1..6   MAC-Address
 *        7   0x00
 *        8   0x74
 *        9   0xFF   
 *       10   0xFF   
 *       11   0xFF   
 *       12   0xFF   
 *       13   0xFF   
 *       14   0xFF   
 *  15..110   6 x MAC-Adress
 *      111   0x40
 *      112   0x00
 *      113   0x90
 *      114   0x90
 *      115   0x40
 *      116   0x00 
 *   
 *   
 * @author Christoph Steindorff, ECW GmbH <cst@ecw.de>
 * @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';
} 
?>

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‘);