システム開発 備忘録











システム開発備忘録 Visual Basic ネットワーク経由でのパソコンの起動と終了

*** *** *** *** ***


WOL(Wake up On Lan)
マジックパケットを送信して指定した端末を起動する
※受信側のNICがWOLに対応している必要がある。
※マジックパケットは、
最初にFF(255)を6回(6バイト)
次にIPアドレス(6バイト)を16回繰り返す
とういだけの単純なもの。これをUDPで送信するだけ。
※VB6あたりだと、WinSockAPIが必要だが.NET Frameworkだとあっけないほど簡単。

Dim strIP As String = "192.168.1.1" 'IPアドレス
Dim strMAC As String = "00-00-00-00-00-00" 'マックアドレス

'送信データを作成
Dim intCounter As Integer = 0
Dim sendBytes(0 To 101) As Byte

'最初に&hFFを6個付ける
For I = 1 To 6
    sendBytes(intCounter) = &HFF
    intCounter += 1
Next
'MACアドレスを16回繰り返す
For I = 1 To 16
    'MACアドレス読込み
    For J = 0 To 5
        '16進数を変換して読込み
        sendBytes(intCounter) = Byte.Parse(strMAC.Substring(J * 3, 2), Globalization.NumberStyles.HexNumber)
        intCounter += 1
    Next
Next

'データを送信するポート番号
Dim RemotePort As Integer = 2304 '何でも良い

'送信先IP指定(ブロードキャストとピンポイントの両方に送信してみる)
Dim BCIP As System.Net.IPAddress
Dim EP As System.Net.IPEndPoint
Dim UDP As New System.Net.Sockets.UdpClient'UDP接続

'ブロードキャストアドレス指定で送信するとき
BCIP = System.Net.IPAddress.Parse("255.255.255.255")
EP = New System.Net.IPEndPoint(BCIP, RemotePort)
'送信先を指定してデータを送信する
UDP.Send(sendBytes, sendBytes.Length, EP)

'ピンポイントのIPアドレス指定して送信するとき
BCIP = System.Net.IPAddress.Parse(strIP)
EP = New System.Net.IPEndPoint(BCIP, RemotePort)
'送信先を指定してデータを送信する
UDP.Send(sendBytes, sendBytes.Length, EP)

'UDP接続を終了
udp.Close()

*** *** *** *** ***
Shutdownコマンド(Windows XP から標準装備されている)
シャットダウンコマンドを送信する

'環境変数ComSpecからコマンドプロンプトのパスを取得する
PSI.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
'出力を読み取れるようにする
PSI.RedirectStandardInput = False
PSI.RedirectStandardOutput = True
PSI.UseShellExecute = False
'ウィンドウを表示しないようにする
PSI.CreateNoWindow = True

'コマンドラインを指定("/c"は実行後閉じるために必要)
PSI.Arguments = "/c shutdown -s -m " & strHostname & " -t 10" '10秒後にシャットダウン
'指定した端末にシャットダウンコマンドを送信する
Dim P As System.Diagnostics.Process = System.Diagnostics.Process.Start(PSI)

'コマンドラインを指定("/c"は実行後閉じるために必要)
PSI.Arguments = "/c shutdown -a -m " & strHostname 'シャットダウン中止
'待機中のシャットダウンを中止するコマンド送信
Dim P As System.Diagnostics.Process = System.Diagnostics.Process.Start(PSI)




Copyright (C) 2009- station-t.com All Rights Reserved , Link Free