@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;
それにしても、Dynamic DNS用の専用APIが用意されているわけじゃなくて、ベタにページ取得するしか方法ないのね…知らないだけかな?
2010/05/03(月) 23:52 | 固定リンク
| 記事の編集(管理者用)
「おもいつき」カテゴリの記事
- 這い寄る混沌(2012.05.26)
- ブックカバーかけの自動化ってできるのかな?(2012.05.25)
- ISBNとかキーワードをメールで送ると、リリース日を含む書籍情報が返るサービスを試作(2012.03.17)
- 明日できるなら、今日でもできるかも。うん。(2012.03.10)
- 気をつけよう、通信料の無駄遣い(2012.03.07)
「パソコン・インターネット」カテゴリの記事
- 最近ツイートしていないけど(2012.03.07)
- 気をつけよう、通信料の無駄遣い(2012.03.07)
- いつもと環境が違うと戸惑う<Firefoxのキャプチャ用アドオン(2012.03.05)
- 意味も無くツイートボタンを付けてみる(2012.03.05)
- いまごろ、ひかり電話に加入(2012.03.03)
「覚書」カテゴリの記事
- ISBNとかキーワードをメールで送ると、リリース日を含む書籍情報が返るサービスを試作(2012.03.17)
- ココログのツイッターへのクロスポスト、デフォルトにはできない…?(2012.03.15)
- 春といっても、夜外に出ると寒いですねぇ。(2012.03.13)
- 明日できるなら、今日でもできるかも。うん。(2012.03.10)
- 最近ツイートしていないけど(2012.03.07)

