DDNS自動更新(修正)
* バグがあったので取りました。ieserver.netのdip.jpでアカウントとってるんだけど、ルータ再起動したりしてipアドレスが変わったときに一々手動で更新するのが面倒かった。AOCやるときとかAOCやるときとかAOC(ryなんか適当にスクリプト作ればやれるっぽさげだったんでスクリプト作ってみた。#!/opt/csw/bin/ruby# ieserver.netのDDNS情報を更新する# postするurlの形式# https://ieserver.net/cgi-bin/dip.cgi?username=***&password=***&domain=dip.jp&updatehost=1require 'net/http'Net::HTTP.version_1_2 # おまじない# ディレクトリWORKDIR="データを保存するディレクトリ"# 以前のIPアドレスを保存するファイルSAVFILE=WORKDIR+"oldip.dat"# ログファイルLOGFILE=WORKDIR+"log.dat"# 各種データを入れるハッシュhash={}# 各種情報の設定hash["dst_url"]="https://ieserver.net/cgi-bin/dip.cgi"hash["username"]="your account"hash["password"]="your password"hash["domain"]="your domain"# hash["fqdn"]= hash["username"] + "." + hash["domain"]##### ipアドレス更新時の処理def renew( newip , hash) # 新しいipアドレスを保存 open( SAVFILE, "w" ){|f| f.puts newip } # DNS情報更新 data= "username=" + hash["username"] + "&password=" + hash["password"] + \ "&domain=" + hash["domain"] + "&updatehost=1"# wgetを使います。 1.10.2 では下記のようにすることで更新が可能。 system("wget -q --no-check-certificate - '#{hash["dst_url"]}?#{data}'")end##### 各種保存ファイルが無いときのために・・・begin open(SAVFILE){|f|} open(LOGFILE){|f|}rescue# 各種保存用ファイルを作る。# 作れないときの処理は省略 open(SAVFILE, "w"){|f| f.puts "0.0.0.0" } open(LOGFILE, "w"){|f| f.print "[" , Time.new.to_s, "] ", "Log file created. \n" }end# 現在のIPアドレスをチェックする# address chech url# http://info.ddo.jp/remote_addr.phpNet::HTTP.start( "info.ddo.jp" ,80){ |http| res = http.get("/remote_addr.php")# curipにipが入る res.body.scan(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){|curip| print "current ipaddress is " , curip , "\n" open( SAVFILE , "r"){|o| open( LOGFILE , "a"){|log| res_output="" # 前のipアドレスがoldipに入る oldip=o.gets.chomp # ipアドレスが変わっているとき if oldip != curip then renew(curip, hash) res_output = "[" ,Time.new.to_s, "] " ,\ "renewal IP : #{oldip} => #{curip}\n" else res_output = "[" , Time.new.to_s, "] " , "No update needed.\n" end print res_output log.print res_output } } }}-----------------------さて、作った後に公式のページ見てみると、なんかそれっぽいスクリプトが既に置いてあった件について。自分のIP調べるurlも変更したほうがよさげ。久しぶりにrubyで書いたんで、かなり時間掛かった。