@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でエラーがでる不具合修正 »


コメント