Wake-on-LAN 用javaライブラリ
Tagged:  •  

はじめに

ちょっと思いついた事があったので、Wake-on-LAN用のJavaライブラリが欲しかったのですが、ざっと探した限りではコマンド実装は大量にあるものの、ライブラリになっているのは見つかりませんでした。

まあ実際は簡単なプロトコルなので、ちょっと書いてみました。もし同じ思いの人があれば、活用してみてください。
(まあ、ぱっと探して見つからないということは需要が無いんでしょうけど、そのあたりは気にしないということで)

Wake-on-LANで使用するMagic Packetに関する仕様

仕様について検索すると、概要を説明したサイトでは言ってることが違ったりするので、以下の情報を元にしました。

UDPで送信して、SecureOn対応はとりあえず無しで実装すれば簡単ですね。

実際のコード

検索した際に先頭にでてきたページ(Simple Java Implementation of Wake-on-LAN)のコマンドを元に、と思ったんですが、結局は0から書いてしまいました。

非常に短いコードなので、ダウンロードして見てもらうのが早いです。以下のようにして利用できます。(javadocは、ちゃんと書いてませんが見ればわかるので良いですよね。。。)

  try{
      // 送信先ネットワークのブロードキャストアドレスとポート番号を指定。
      // この例では、192.168.1.0/24のネットワークに対してポート番号 2304 で
      // 送信する。
      // ※ 引数無しのコンストラクタを使用すると、アドレスは255.255.255.255、
      //    ポート番号は9がデフォルトで使用される。
      WakeOnLan wol = new WakeOnLan("192.168.1.255", 2304);

      // Magic Packetの送信。
      // この例では、起動対象のMacアドレスは 00:01:02:03:04:05。
      wol.send("00:01:02:03:04:05");
  }
  catch(java.io.IOException){
      // エラー処理を記述
  }
利用方法

動作確認

動作確認用にmain()メソッドも付けときましたので、コマンドとして動作させることもできます。

$ javac WakeOnLan.java

$ java WakeOnLan -h
Usage: WakeOnLan [-h] [-v] [-p port] [-i broadcast-ip-address] mac-address ...
Ex.) WakeOnLan -i 192.168.1.255 00:01:02:03:04:05 00:0a:0b:0c:0d:0e

$ java WakeOnLan -v -i 192.168.1.255 00-01-02-03-04-05 00:0a:0b:0c:0d:0e
Sent Wake-on-LAN packet(00-01-02-03-04-05) to 192.168.1.255(9).
Sent Wake-on-LAN packet(00:0a:0b:0c:0d:0e) to 192.168.1.255(9).
動作確認

おことわり

ソースは末尾に添付しています。ライセンスとしては、特に制限も設けませんので、使えそうであれば用途にかかわらず自由に使ってください。
ただし、このソフトを利用した事によるいかなる損害についてもASCADEおよび筆者は一切の責任を負いません。あくまで自己の責任の上で使用して下さい。