マジックパケットとは、Wake-On-LANで電源を投入する際に使用される特殊なイーサネットフレームのこと。具体的には以下のUDPセグメントのことを指す。
- 宛先MACアドレスがブロードキャストアドレス
- UDPペイロード部に「FF:FF:FF:FF:FF:FF」+起動したいネットワークインターフェースのMACアドレスを16回記述
このパケットをPowerShellで作成できるとのことなので、メモ。
コード例
MACアドレス「C8-F7-50-F1-8C-9E」宛てにマジックパケットを送信する。PowerShellウィンドウに直接入力するのは大変なので、スクリプトとして保存して実行する。
#MACアドレスの指定
$mac_addr = "C8-F7-50-F1-8C-9E"
#ヘッダー部(FF:FF:FF:FF:FF:FF)を指定
$header=[byte[]](@(0xFF)*6)
Write-Host "マジックパケット送信 宛先:" $item
#MACアドレスの区切り文字を分割し10進数整数に変換
$addr = [byte[]]($item.split("-") | %{ [Convert]::ToInt32($_, 16)});
#ヘッダー部+MACアドレス16回
$magicpacket = $header + $addr * 16;
$target = [System.Net.IPAddress]::Broadcast;
$client = New-Object System.Net.Sockets.UdpClient;
$client.Connect($target, 2304);
$client.Send($magicpacket, $magicpacket.Length) | Out-Null
$client.Close();
Write-Host "マジックパケット送信完了 宛先:" $item
補足
宛先UDPポートの指定
$client.Connect($target, 2304);
宛先ポート番号は任意とのことだが、マジックパケットではUDP/2304がよく使われているとのことなのでそのように記述している。