火星人襲来!

2007/12/11(火)22:55

DDNS自動更新(修正)

UNIX Linux(18)

* バグがあったので取りました。 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=1 require '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.php Net::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で書いたんで、かなり時間掛かった。

続きを読む

総合記事ランキング

もっと見る