DDNS更新するコードを書いた
自宅サーバーでDDNSを使っているのでIP変わったときのために更新するためのrubyでスクリプトでも書いてみようと思いました。
最初に始めるぐらいが練習でいいかと。
mechanizeというHTMLライブラリがあるらしいのでインストールしてみた。
参考サイト
http://mono.kmc.gr.jp/~yhara/d/?date=20070205
sudo gem install mechanize
Select which gem to install for your platform (i486-linux)
1. hpricot 0.6 (mswin32)
2. hpricot 0.6 (jruby)
3. hpricot 0.6 (ruby)
4. hpricot 0.5 (ruby)
5. hpricot 0.5 (mswin32)
6. Skip this gem
7. Cancel installation
> 3
ERROR: Failed to build gem native extension.
などエラーがでた
よくわからないが検索したら先にライブラリーを追加しておけばいいらしい。
sudo aptitude install libwww-mechanize-ruby1.8
そのごgem installすればいけました。
で、続き。
詳細方法は以下を参考にしました。
http://mono.kmc.gr.jp/~yhara/rubyscraping/?Mechanize
http://mechanize.rubyforge.org/mechanize/
agent = WWW::Mechanize.new
page = agent.get("url")
これで対象サイトのページ情報が取得できます。
うちの場合はddo.jp使っているので
url = http://ddo.jp/?free=on
ページ情報が取得できたらフォームの名前を探してパラメーターを渡してあげたい。
フォーム検索として
form = page.forms.with.name('dnsupdate').first
でdnsupdateという名前のフォーム情報を取得。
dnsupdateという名前の一番最初にあるフォームを取得してくれるようです。
あとはそれぞれのinputのnameを見てパラメーターを渡してsubmitすればいいだけ
その前に自分のIP確認しないといけない。
自分のIP返してくれるのがあったので
以下にアクセス
http://jk01.jamas.gr.jp/ipdisp.pl
アクセスするとと
あなたのIPアドレスは、[xxx.xxx.xxx.xxx] です。
とか返してくれます。
Net::HTTP.start('jk01.jamas.gr.jp', 80) { |http|
response = http.get('/ipdisp.pl')
IPADDRESS = response.body.scan(/\[([0-9\.]+)\]/m)[0][0];
}form.dn = DOMAIN
form.ip = IPADDRESS
form.pw = PASSWORD
これでフォームに値がセットで来たので
agent.submit(form)
これでOKっぽい。
まあ、今使ってるところはどうも、URL直打ちでも行けるみたいですが勉強がてらに使ってみました。
あとはIP変わったことをチェックしたりすればいいんだろうけど、とりあえず忘れないうちにということで更新。