Wake On LANでスリープ中のマシンを起こす

はてなダイアリーのバージョンアップしましたね。ブログの投稿にsimple-hatena-modeを使用しているのですが、ちゃんと動くか確認も兼ねての投稿です(^ ^

Wake On LAN



宛先アドレスがFF:FF:FF:FF:FF:FFすなわちブロードキャストアドレスに続けて起動したい装置のMACアドレスを16回繰り返した物
UDPでブロードキャストアドレス宛に送信するだけと意外に簡単な代物です。

# -*- coding: utf-8 -*-
require "socket"

module WakeOnLan
  def wake(mac_addr)
    sock = UDPSocket.open
    sock.setsockopt(Socket::SOL_SOCKET,Socket::SO_BROADCAST, 1)

    mac = mac_addr.split(":").map{|x| sprintf("%02x", x.hex)}

    msg = 0xff.chr * 6
    msg = msg + mac.pack("H*H*H*H*H*H*") * 16

    sock.send(msg, 0, "255.255.255.255", "discard")
    sock.close
  end
  module_function :wake
end

if $0 == __FILE__
  WakeOnLan.wake("0:1b:63:96:5:e9")
end

スリープの解除に必要なMACアドレスは、スリープ前に

$ arp -a                                        
? (192.168.1.2) at 0:1b:63:96:5:e9 on en1 [ethernet]

ARPテーブルを参照するなどしてください。

あとWake On LANでスリープを解除するMacで、「システム環境設定→省エネルギー」の"ネットワークアクセスによってスリープを解除"にチェックを入れておきます。