ピッシーのメモ帳

気になった情報の保管庫

PowerShellでマジックパケットを送信する方法

マジックパケットとは、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がよく使われているとのことなのでそのように記述している。