kenanのブログ

闘病生活

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変わったことをチェックしたりすればいいんだろうけど、とりあえず忘れないうちにということで更新。