« 2017年1月 | トップページ

2017年4月27日 (木)

atniftyのダイナミックDNSサービスの更新方法が変更された

@niftyのダイナミックDNSサービスhttp://domain.nifty.com/domain/ddns.htm ですが、4月途中から IP更新方法が内部的に変更されたようです。
見た目は変わらないので、手動で更新してた人は無関係です。スクリプト組んで自動更新してた人がNGです。
@nifty DDNS更新スクリプト さんのスクリプトではうまく動かなくなってしまいましたが、ちょっと追加して、うまく動くようになりました。

$conf_ipaddr の値を変えればよいようです。

----
#my $conf_ipaddr = "DDNS_CHANGE_IP"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
my $conf_ipaddr = "DDNS_CHANGE_IP=IP%95%CF%8DX%83y%81%5B%83W%82%D6"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
----

全体としては以下。


----
#!/usr/bin/perl -w
use strict;
use Encode;

#------------------------------------------------------------------------------#
# 2009.09.26 #
# @nifty DDNSサービスのIPアドレス更新を行うスクリプト(niftyddns.pl) #
# #
# このスクリプトには@niftyのユーザIDとパスワードをテキストで埋め込むため、スク #
# リプトファイルのパーミッションモードは0700としておく方が良い。 #
# このスクリプトを定期的に実行するためにクローンに登録する。なお、IPアドレスの #
# 更新が無い場合でも1週間(期間は以下の変数でカスタマイズ可能)に一度は更新処理 #
# をする(スクリプトが自動で判断して実行)。 #
# crontabの例) #
# 0,10,20,30,40,50 * * * * hogehoge /home/hogehoge/bin/niftyddns.pl #
# #
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# グローバル変数
## ユーザ毎にカスタマイズが必要な変数
my $niftyid = "hogehoge"; # @niftyのユーザID
my $niftypasswd = "mypassword"; # @niftyのパスワード
my $basedir = "/home/pi/niftyddns"; # このスクリプトをインストールするディレクトリ
my $datadir = "$basedir/atniftyddns"; # このスクリプトで使うファイル(IPアドレスの保存ファイル、wgetの出力結果等)を保存するディレクトリ
my $addrfile = "$datadir/prev_ip.txt"; # 前回のIPアドレスを保存するファイル名
my $updatetime = "$datadir/update.txt"; # 前回、IPアドレス更新を実行した時間(time関数値)を保存するファイル名
my $resultfile = "$datadir/result.txt"; # スクリプトの結果(IPアドレスに変更が無かったか、あるいはIPアドレス更新処理をしたか)を記録するファイル名
my $interval = 7; # IPアドレス変更が無い場合でもこの変数で指定された日にち(デフォルト7日)が経過したら更新処理を行う

## カスタマイズ不要な変数
my $atniftyddns = "http://domain.nifty.com/domain/DdnsIpChangeConfirm.do"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
#my $conf_ipaddr = "DDNS_CHANGE_IP"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
my $conf_ipaddr = "DDNS_CHANGE_IP=IP%95%CF%8DX%83y%81%5B%83W%82%D6"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
my $update_ip = "DDNS_UPDATE_IP_ADDRESS"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
my $wget;
my $current_ip; # 現在のIPアドレス
my $previous_ip; # 前回のIPアドレス
my $change = 1; # 前回のIPアドレスと現在のIPアドレスが一致していない場合、または、初めてこのスクリプトを実行する場合に1にセッ ト
my $updated; # $updatetimeファイルに保存されているIPアドレス更新実行時間
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# スクリプトで使うファイルの保存ディレクトリが無い場合にディレクトリを作成
if( !-d $datadir ) {
mkdir( $datadir, 0755 ) || die "ディレクトリ生成失敗 : $!";
}
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# @nifty DDNSのIPアドレス更新ページをwgetでアクセスし、現在のIPアドレスを確認
$wget = `wget --secure-protocol=auto -O - -q $atniftyddns?$conf_ipaddr`;
$wget =~/[0-9]+(\.[0-9]+){3}/;
$current_ip = $&;
#print "Current IP: $current_ip\n";
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# 前回のIPアドレスと現在のIPアドレスが一致するか比較し、一致していない場合には
# IPアドレスが変更したとして$changeフラグをセット

## 前回のIPアドレスを保存しているファイルが存在している場合は現在のIPアドレスと
## 一致するか確認
if ( -e $addrfile ) {
open( FH, "<$addrfile" );
$previous_ip = ;
#print "Previous IP: $previous_ip\n";
close( FH );
if ( $current_ip eq $previous_ip ) {
$change = 0;
}
else {
unlink $addrfile;
open( FH, ">$addrfile" );
print FH $current_ip;
close( FH );
}
}
## 前回のIPアドレスを保存しているファイルが存在しない場合は現在のIPアドレスを
## 保存
else {
open( FH, ">$addrfile" );
print FH $current_ip;
close( FH );
}
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# 最終更新時から$intervalで指定した日数経過している場合は、IPアドレスに変更が
# なくても更新処理を実行する($changeフラグをセットする)
if ( -e $updatetime ) {
open( FH, "<$updatetime" );
$updated = ;
close( FH );
if ( $updated <= time - ( $interval * 24 * 3600 ) ) {
$change = 1;
unlink $updatetime;
open( FH, ">$updatetime" );
print FH time;
close FH;
}
}
else {
$change = 1;
open( FH, ">$updatetime" );
print FH time;
close FH;
}
#------------------------------------------------------------------------------#
# $changeフラグがセットしてある場合、IPアドレス更新を実行し、IPアドレス保存ファ
# イルに保存しているIPアドレスを現在のIPアドレスに更新
if ( $change ) {
if ( -e $resultfile ) {
unlink( $resultfile );
}
$wget = `wget --secure-protocol=auto -O - -q --http-user=$niftyid --http-password=$niftypasswd $atniftyddns?$update_ip`;
$wget =~/[0-9]+(\.[0-9]+){3}/;
$current_ip = $&;
my $remain = $';
$remain =~/
/;
$remain = $`;
Encode::from_to($remain, 'shiftjis', 'utf-8');
open( FH, ">$resultfile" );
print FH $current_ip . $remain . "\n";
close( FH );
}
else {
unlink( $resultfile );
open( FH, ">$resultfile" );
print FH "IPアドレス($current_ip)は変更されていません。\n";
close( FH );
}
----

« 2017年1月 | トップページ

最近のトラックバック

2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
フォト
無料ブログはココログ