Wake on LANのマジックパケットとは?

Wake on LANを使うと、スリープ中または電源がオフのコンピューターをネットワーク経由で起動できます。ネットワークカードは給電されたまま、マジックパケットを待ち受けます。マジックパケットは、6バイトのFFに続けてコンピューターのMACアドレスを16回繰り返した、合計102バイトのデータです。通常はUDPブロードキャストとしてポート9または7に送信されるため、ローカルネットワーク上のすべてのマシンが受信し、一致するマシンだけが起動します。まず、コンピューターのBIOSまたはUEFI設定でWake on LANを有効にする必要があります。

wakeonlanやetherwakeなどのツールで送信できますが、常にインストールされているとは限りません。また、サーバーやNASにそれらを追加したくない場合もあります。

ツールの説明

このツールは、Linuxに標準で用意されている機能を使ってパケットを送信する1行コマンドを作成します。起動するコンピューターのMACアドレスを、00:11:22:AA:BB:CC、00-11-22-AA-BB-CC、0011.22AA.BBCC、または区切りなしの16進数12桁の形式で入力し、「送信方法」で送信方法を選択します。

  • Python 3またはPerl。bashとzshで動作し、root権限は不要で、ブロードキャストも可能です
  • Bashの/dev/udp。インストール不要ですが、bashでのみ動作し、zshでは動作しません。また、ブロードキャストもできません

ブロードキャストまたはIPアドレスの初期値は255.255.255.255、UDPポートの初期値は9です。bashでブロードキャストアドレスに送信すると、Linuxは「アクセスが拒否されました」と応答します。そのため、.255で終わるアドレスを指定してBashを選ぶと、このツールは警告を表示します。代わりに、起動するコンピューター自体のIPアドレスを指定してください。

コマンドはブラウザー内で作成されます。コピーして、同じネットワーク内にある任意のLinuxマシンで実行してください。

使用例

00:11:22:AA:BB:CCの場合、Python 3でポート9にブロードキャストする例:

python3 -c 'import socket;s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM);s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1);s.sendto(bytes.fromhex("ff"*6+"001122aabbcc"*16),("255.255.255.255",9))'

Bashで、192.168.1.20のコンピューターに直接送信する例:

printf "$(printf '\\xff%.0s' {1..6})$(printf '\\x00\\x11\\x22\\xaa\\xbb\\xcc%.0s' {1..16})" > /dev/udp/192.168.1.20/9

機能

  • Python 3、Perl、bash版のコマンドを作成
  • コロン、ハイフン、ドットで区切った形式と、区切りなしのMACアドレスに対応
  • bash版でブロードキャストアドレスに送信できない場合に警告表示