http://witworks.blogspot.jp/2010/06/ruby-wake-on-lan.html ままですが、取り急ぎ、メモ。
※ コード整理は後程…
ip_messenger.rb
# coding: utf-8
require "socket"
class IPMessenger
def initialize(host, user = nil, group = nil)
@port, @version, @command = 2425, 1, 32
@sock = UDPSocket.new
@host = host
@user = user
@group = group
@num = $$ || 0
end
def sendmsg(host, msg)
@num += 1
str = sprintf("%d:%d:%s:%s:%d:%s", @version, @num, @user, host, @command, msg).encode('Shift_JIS')
@sock.send(str, 0, host, @port)
end
def login
@num += 1
command = 6291713
msg = "#{@user}\00#{@group}"
str = sprintf("%d:%d:%s:%s:%d:%s", @version, @num, @user, @host, command, msg).encode('Shift_JIS')
@sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
@sock.send(str, 0, '255.255.255.255', @port)
end
def logout
@num += 1
command = 861706453
msg = ''
str = sprintf("%d:%d:%s:%s:%d:%s", @version, @num, @user, @host, command, msg).encode('Shift_JIS')
@sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
@sock.send(str, 0, '255.255.255.255', @port)
end
end