Wake On Lan

なんかずっと昔に ruby で書いた Wake On Lan をやるスクリプトが発掘されたので張ってみる。
ダウンロード

Wake On Lan を使えば、出先で自宅で停止中のホストに入っているファイルを取り出したいときに、一旦自宅のサーバーに ssh し、そこから Wake On Lan で目的のホストを起動させ、ssh でファイルを取り出せるので、ある特定の状況で幸せになれます。


Mac アドレスを晒しても大丈夫かどうかは知らないけど晒してしまう。

#!/usr/bin/env ruby
Madoka3Mac = "00-0c-76-24-15-8c"

require 'socket'

def wol mac
  hs = mac.split(/[:-]/).inject(""){|i,j| i+j.hex.chr}
  data = 0xff.chr * 6 + hs * 16
  sock = UDPSocket.new()
  sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
  2.times { sock.send(data, 0, "<broadcast>", "discard") }
end

if $0 == __FILE__
  if (ARGV.empty?)
    wol Madoka3Mac
  else
    ARGV.each do |i|
      wol i
    end
  end
end

今みると、

  hs = mac.split(/[:-]/).inject(""){|i,j| i+j.hex.chr}

の行は、

  hs = [mac.tr(":-", "")].pack("H*")

と書けるなあと思います。pack を使わないにしても、少なくとも

  hs = mac.split(/[:-]/).map{|i| i.hex.chr}.join

だと思います :-]


そもそもこんなスクリプトを使わなくても、多分 Wake On Lan をやるコマンドってあると思うけど、知らない。 [:-]