バリケンのRuby日記 RSSフィード

2007-05-18

[][] Railsアプリ自宅サーバを利用してインターネットに公開(4)  Railsアプリを自宅サーバを利用してインターネットに公開(4) - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Railsアプリを自宅サーバを利用してインターネットに公開(4) - バリケンのRuby日記  Railsアプリを自宅サーバを利用してインターネットに公開(4) - バリケンのRuby日記 のブックマークコメント

このあいだの続き。せっかくだからIPアドレスが変わったら自動更新」のスクリプトを、やっぱり公開することにしたよ。

このあいだ「ネットワーク機器の状態を調べる」でも書いたけど、PA-WDR85FH/CECというADSLルータでの例になるから、ほかのルータを使っている人はそのままじゃ使えないから注意してね。あと、ファイル漢字コードEUCで保存しているよ。

#!/usr/bin/ruby

$KCODE = 'EUC'

WanIpDataFile = '/home/rails/wan_ip.txt'

DdnsUserName = '(DDNSサービスのユ-ザー名)'
DdnsPassword = '(DDNSサービスのパスワード)'

RouterUserName = '(ルータのユーザー名)'
RouterPassword = '(ルータのパスワード)'
RouterLanIp = '192.168.101.1'

require 'rubygems'
require 'mechanize'
require 'kconv'

agent = WWW::Mechanize.new

agent.basic_auth(RouterUserName, RouterPassword)

aterm_info_page = agent.get("http://#{RouterLanIp}/info_main.html")
aterm_info = aterm_info_page.search("table:nth-child(1) tr").map {|e|
  e.search("td").map {|f|
    f.inner_text.toeuc.gsub(/(?:\s| )+/, '')
  }
}

wan_ip = aterm_info.select {|i| i[0] == "WAN側IPアドレス" }[0][1]

old_wan_ip = open(WanIpDataFile) {|f| f.read }

unless wan_ip == old_wan_ip
  agent = WWW::Mechanize.new

  login_page = agent.get("http://dip.zenno.net/gnudip/cgi-bin/gnudip.cgi")

  login_form = login_page.forms.first
  login_form['username'] = DdnsUserName
  login_form['password'] = DdnsPassword

  service_page = agent.submit(login_form)

  service_form = service_page.forms.first

  service_form['updateaddr'] = wan_ip
  send_button = service_form.buttons.name('updatehost')

  agent.submit(service_form, send_button)
  open(WanIpDataFile, 'w') {|f| f.write(wan_ip) }
end

これを/home/rails/ddns.rbとして保存して、chmodで実行許可属性を与えたあとに、railsユーザーで「crontab -e」コマンド

RUBYLIB = /opt/local/lib/site_ruby/1.8/
GEM_HOME = /opt/rubygems/
PATH = /opt/bin:/opt/rubygems/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

*/5 * * * * /home/rails/ddns.rb

のように設定すれば、5分おきにこのスクリプトを起動してくれるよ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070518