Magic Packetを送信するPowerShellのスクリプト作りました。ついでにIPアドレスからMACアドレスを調べる関数、自分自身のIPアドレスからブロードキャストアドレスを調べる関数も作りました。
WakeOnLAN関数
WakeOnLAN “ターゲットのMACアドレス” “ブロードキャストアドレス”
指定されたMACアドレスを持つマシンをWake On LAN機能で起動します。
Ip2Mac関数
Ip2Mac “ターゲットのIPアドレス”
IPアドレスからMACアドレスを調べます。戻りは文字列値で、WakeOnLAN関数の引数として使えます
MyBCAddress関数
MyBCAddress “自分自身のIPアドレス”
自分が所属するネットワークのブロードキャストアドレスを調べます。戻りは文字列。自分のIPアドレスを指定しなければならないのは、複数のネットワークアダプタが存在する可能性があり、複数のIPアドレスを持っている可能性があるから。ネットワークアドレスの指定でもいいけど、この関数使うような人はそもそもネットワークアドレス求めることができないだろうから、一番わかりやすい自分のIPアドレスにした。
10 | function global:WakeOnLAN (` |
12 | [string]$BroadCastAddress) { |
13 | $MacPart=($MacAddress.Split("-") ` |
15 | [System.Convert]::ToByte($_,16) }) |
16 | $EndPoint=New-Object System.Net.IPEndPoint (` |
17 | [system.net.IPAddress]::Parse(($BroadCastAddress)),10000) |
18 | $Socket=New-Object System.Net.Sockets.Socket (` |
19 | [System.Net.Sockets.AddressFamily]::InterNetwork),` |
20 | ([System.Net.Sockets.SocketType]::Dgram),` |
21 | ([System.Net.Sockets.ProtocolType]::UDP) |
22 | $Socket.SetSocketOption(` |
23 | [System.Net.Sockets.SocketOptionLevel]::Socket,` |
24 | [System.Net.Sockets.SocketOptionName]::Broadcast,$true) |
25 | [void] $Socket.SendTo(([byte[]] (@(0xFF) *6))+($MacPart*16),$EndPoint) |
34 | function global:Ip2Mac([string]$IP){ |
35 | (Get-NetNeighbor -IPAddress $IP ` |
36 | -ErrorAction SilentlyContinue).LinkLayerAddress |
44 | function global:MyBCAddress([String]$MyIP) { |
47 | Get-CimInstance -Class Win32_NetworkAdapterConfiguration ` |
48 | -ErrorAction SilentlyContinue ` |
49 | | Where-Object {$_.IPaddress -contains $MyIP }` |
51 | $mask=-bnot [System.BitConverter]::ToInt32(($NetMask.Split(".") ` |
52 | | ForEach-Object{[System.Convert]::ToByte($_,10)}),0) |
53 | $Addr=[System.BitConverter]::ToInt32(($MyIP.Split(".")` |
54 | |ForEach-Object{[System.Convert]::ToByte($_,10)}),0) |
55 | return [System.BitConverter]::GetBytes($mask -bor $Addr) -join "." |
57 | Catch { Write-Host 'Bad IP Address' } |
0 件のコメント:
コメントを投稿