@nifty ダイナミックDNSのIPアドレスを更新するPerlスクリプト
自宅サーバより@nifty ダイナミックDNSのIPアドレスを更新するためのPerlスクリプトを試作してみました。
#! /usr/bin/perl -w use strict; use Encode qw/from_to/; use Encode::Guess qw/euc-jp shiftjis 7bit-jis/; use URI::Escape; use FindBin; #============================== my $niftyid="(自分のニフティID)"; my $niftypassword="(自分のパスワード)"; #============================== my $syscode='euc-jp'; # 実行環境の文字コード my $wget='wget --secure-protocol=auto -O- -q'; my $path=$FindBin::Bin; my $lastipfile="$path/last_ipaddr"; my $logfile="$path/ddns_nifty.log"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); my $timestamp=sprintf("%04d/%02d/%02d %02d:%02d:%02d",1900+$year,1+$mon,$mday,$hour,$min,$sec); open LOG, ">>$logfile" or die "'$logfile' open error"; print LOG "------------------------------------------------------------\n"; print LOG "[$timestamp]\n"; my $last_ipaddr=""; if (-e $lastipfile) { open LASTIP, "<$lastipfile" or die "'$lastipfile' open error"; $last_ipaddr=<LASTIP>; close LASTIP; } my $inquiry=`$wget "http://domain.nifty.com/domain/DdnsIpChangeConfirm.do?DDNS_CHANGE_IP=IP%95%CF%8DX%83y%81%5B%83W%82%D6"`; my $dstcode=guess_encoding($inquiry); $dstcode='shiftjis' unless ref($dstcode); from_to($inquiry,$dstcode,$syscode); $inquiry=~/\d+(\.\d+){3}/ or exit 1; my $ipaddr=$&; if ($ipaddr eq $last_ipaddr) { print LOG "IP Address not changed. ($ipaddr)\n"; exit 0; } print LOG "New IP Address: $ipaddr ... "; $inquiry=~/<input.*? name="DDNS_UPDATE_IP_ADDRESS" .*?value="(.*?)"/ or exit 1; my $confirm_upip=$1; from_to($confirm_upip,$syscode,$dstcode); $confirm_upip=uri_escape($confirm_upip); $inquiry=~/<input.*? name="domain" .*?value="(.*?)"/ or exit 1; my $domain=$1; from_to($domain,$syscode,$dstcode); $domain=uri_escape($domain); my $postdata="DDNS_UPDATE_IP_ADDRESS=$confirm_upip&domain=$domain"; #print "$postdata\n"; $inquiry=~/<form.*? name="ddnsForm" .*?action="(.*?)"/ or exit 1; my $url=$1; $url='http://domain.nifty.com'.$url unless ($url=~/^https?:\/\//); my $result=`$wget --http-user=$niftyid --http-passwd=$niftypassword --post-data="$postdata" "$url"`; $dstcode=guess_encoding($result); $dstcode='shiftjis' unless ref($dstcode); from_to($result,$dstcode,$syscode); $inquiry=~/\d+(\.\d+){3}/ or exit 1; my $rsp_ipaddr=$&; if ($rsp_ipaddr eq $ipaddr) { print LOG "success.\n"; open LASTIP, ">$lastipfile" or die "'$lastipfile' open error"; print LASTIP "$ipaddr"; close LASTIP; } else { print LOG "failure.\n"; } close LOG; exit 0;
今のところ、cronで1時間間隔くらいで回しています。
それにしても、Dynamic DNS用の専用APIが用意されているわけじゃなくて、ベタにページ取得するしか方法ないのね…知らないだけかな?
それにしても、Dynamic DNS用の専用APIが用意されているわけじゃなくて、ベタにページ取得するしか方法ないのね…知らないだけかな?
以前は自動更新するためにDiCE DynamicDNS Client (for Linux)を使用していましたが、【重要】ダイナミックDNSサービスリニューアルのお知らせ - お知らせの関係か、動作しなくなっていたため、仕方なく手動更新になっていました。しかし、最近PCをまともに触れないことも多いため、この機会に簡単なスクリプトを書いてみた次第。
DiCEの方は、上記@niftyのお知らせ内の@nifty.plgに変えてみても、DiCEの設定変更: 物理おもしログを参考に試してみても、なぜかうまく行かなかったので、あんまり調べずに放置していた。
Perlの書き方なんて3光年の彼方にすっとんでいたので、@nifty の ddns を自動更新するなどを参考にさせていただきました。
当該ページ内のスクリプトはリニューアル前のものに対応していて現在は動かなそうですが。
« 【AutoPagerize】Google 画像検索対応スクリプト更新(ver.0.01h) | トップページ | 【LDRize】PictPop:Googleでエラーがでる不具合修正 »
「パソコン・インターネット」カテゴリの記事
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- BIGLOBE光ネクスト(大阪)の通信速度問題 - プロバイダ選びは難しい……(2015.08.13)
- BOOK☆WALKER さんに関して最近経験した不安と不満(2015.08.10)
- 『#鳥獣戯画制作キット』が楽しい(2015.07.01)
「おもいつき」カテゴリの記事
- ココログをTwitterカードに対応させてみる(2016.11.23)
- 神使の兎 ~宇治神社にて~(2016.07.10)
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- 【覚書】風柳亭(ココログプロ)をレスポンシブWebデザイン化(Bootstrap3使用)(2015.10.09)
「覚書」カテゴリの記事
- 鍛高譚 ~ カレイにまつわる物語(2018.05.25)
- ココログをTwitterカードに対応させてみる(2016.11.23)
- 神使の兎 ~宇治神社にて~(2016.07.10)
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
« 【AutoPagerize】Google 画像検索対応スクリプト更新(ver.0.01h) | トップページ | 【LDRize】PictPop:Googleでエラーがでる不具合修正 »
コメント