在區域網路中,可以傳送 magic packet 給主機的網路卡,magic packet 內容開頭有6個 ff,再接 16 個網路卡 mac,當主機版有開啟支援 wake on lan 功能,網路卡接收到符合條件的 magic packet,就能開啟電腦。(每個主機版關於 wake on lan 的名稱不盡相同,例如 pme event wake up、power on by pci devices...)
另一個影響能否網路開機的設定,在作業系統裡面裝置管理員,網卡裝置內容裡的電源管理,需勾選「允許這個裝置喚醒電腦」。
假設網路卡 mac 為:01-02-03-04-05-06
magic packet 內容則為:
ffffffffffff010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506
然後以 udp 通訊協定傳送給電腦的 port 7、或 port 9
所以實現網路開機的方式,就是在區網內想辦法傳送給目標電腦網卡 magic packet,如果用來傳送 magic packet 的設備(server),平常也有對外連線,也可達成在外網開機的效果。
以下 php 傳送 magic packet 範例來源
wol: wake-on-lan tutorial with bonus php script
僅稍微修改後如下:
class wakeonlan { /** * 喚醒電腦 * @param type $addr ,目標ip 或 廣播位址(格式 01-02-03-04-05-06 或 01:02:03:04:05:06) * @param type $mac * @param type $port , 7 or 9 * @return boolean */ public function wake($addr, $mac, $port) { $mac = str_replace(-, :, $mac); $addr_byte = explode(':', $mac); $hw_addr = ''; for ($a = 0; $a wake('192.168.0.255', 01-02-03-04-05-06, 9); var_dump($res);} catch (exception $ex) { var_dump($ex->getmessage());}
將 magic packet 指定傳給 broadcast address(例如:192.168.0.255),可傳送給區網所有電腦,mac符合的才會開機。 有的電腦可能傳給 port 7 或 port 9 其中一個才會開機。 原範例 socket_set_option($skt, 1, 6, true),1、6 改成用常數取代,因不同環境 sol_socket、so_broadcast 的常數直似乎不同。查看所有 soket 常數 http://php.net/manual/en/sockets.constants.php#108291 $a = get_defined_constants(true);foreach ($a['sockets'] as $constant => $value) { printf(%-25s %d, $constant, $value);}
網路喚醒 - 維基百科,自由的百科全書
設定windows 8網路喚醒(wake on lan) - 黑暗執行緒
php: socket_create - manual
php: socket_set_option - manual
php: socket_get_option - manual
arduino - php : send an udp broadcast message , and wait the response - stack overflow
小信豬的原始部落: [tcp/ip illustrated] broadcasting & multicasting