2011-04-14

rubyでWake On LAN

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
電源が入っていないPCに対してマジックパケットという特別なパケットを送るとPCを起動できる
Wake On LAN
という機能があります。
詳細はどこかで調べていただけたらと思います。

これをrubyで実装する方法です。

http://www.geocities.jp/protozoa0/softs_j.html#m-packet

を参考にさせていただきました。

以下のようなファイルを用意します。
module  Wol

  require 'socket'

  def self.send(mac,bcast="255.255.255.255",port=40000)
    macb = [mac.gsub(/[\-\:]/, '')].pack('H*')
    packet = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff].pack("C*")
    16.times {
      packet = packet + macb
    }
    sock = UDPSocket.open
    sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
    sock.connect(bcast,port)
    3.times {
      sock.send(packet, 0)
    }
    sock.close
    true
  end
end

railsの場合でしたら
lib/wol.rb
という名前で作成しておけば
Wol.send("00:11:22:33:44:55")
みたいな感じで利用できます。

コメントを投稿