Wake on Lan

id:cxx:20070727:wake_on_lanのスクリプトを少し改良して使わせて頂いてます。
改良点は00:00:00:00:00:00を0:0:0:0:0:0と書いてもOKにしました。
(OS Xの?) arpの出力が頭の0を省略するので、そのフォーマットへの対応。

#!/usr/bin/env ruby

require 'socket'

def wakeonlan(addr)
  packed = addr.split(/-|:/).map{|x| ('0'+x)[-2,2]}.join('').to_a.pack('H12')
  msg = "\xff" * 6 + packed * 16
  sock = UDPSocket.open()
  sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
  sock.send(msg, 0, '<broadcast>', 9)
end

if __FILE__ == $PROGRAM_NAME
  if ARGV.size == 1 && ARGV[0] =~ /\A([[:xdigit:]]{1,2}[-:]){5}[[:xdigit:]]{1,2}\z/
    wakeonlan(ARGV[0])
  else
    puts 'Usage: wakeonlan.rb MAC_address'
  end
end