PHP初心者が、PHPでWake On Lanをやってみたので、それについてまとめました。
Waek On Lanとは?
「マジックパケット」という特殊なネットワークパケットを、ネットワーク内にブロードキャスト送信し、特定のコンピュータを遠隔起動させる方法です。
マジックパケットの構造
先頭に、16進数で「FF:FF:FF:FF:FF:FF」、続けて、起動したいコンピュータのMACアドレスを16回繰り返したデータを付加した、102バイトのデータです。
このマジックパケットを、ネットワーク内にブロードキャスト送信します。マジックパケットを送信するコンピュータと、起動したいコンピュータが同一ネットワークに存在する場合、この方法で、起動したいコンピュータを遠隔起動させることができます。
詳しくはこちらの記事もご覧ください。
Wake On Lan
https://e-words.jp/w/WOL.html
マジックパケット
https://e-words.jp/w/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%91%E3%82%B1%E3%83%83%E3%83%88.html
マジックパケットを受け取るための設定
Windows
https://www.splashtop.co.jp/knowhow/30/
Linux
https://vild.hatenablog.com/entry/2019/09/14/154813
Mac
https://bootmacos.com/archives/12223
このWake On Lanを、PHPを使ってやってみました。
筆者の環境でのソースコードは以下になります。
※MACアドレスとブロードキャストアドレスは、適宜ご自身の環境に合わせて変更してください。
<?php
sendMagicPacket();
function sendMagicPacket()
{
// 対象PCのMACアドレス
$macAddress = 'F0-2F-74-D3-8E-C0';
// 現在いるネットワークのブロードキャストIPアドレス
// 255.255.255.255ではファイアウォールでブロックされる可能性が高いため、このように使う
$ipAddress = '192.168.10.255';
sendMagicPacket($macAddress, $ipAddress);
}
function sendMagicPacketHelper($macAddress, $ipAddress)
{
$macHex = str_replace([':', '-'], '', $macAddress);
$macBinary = pack('H12', $macHex);
$magicPacket = str_repeat(chr(0xFF), 6) . str_repeat($macBinary, 16);
// ブロードキャスト送信オプションを設定(Linuxではブロードキャスト送信したい場合必須)
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
// マジックパケット送信
socket_sendto($socket, $magicPacket, strlen($magicPacket), 0, $ipAddress, 9);
// ソケットを閉じる
socket_close($socket);
}
以上、PHP初心者が、PHPでWake On Lanをやってみた内容になります。
僭越ではございますが、みなさんのお役に立てれば幸いです。