ddnsNowのIPアドレスを更新するスクリプト
#!/usr/bin/perl
# -w ワーニングを出す
# /home/User/crontab/ddnsNow/ddnsNow.pl 実行ファイル
# /home/User/crontab/ddnsNow/ddnsNow-pl-211226.txt 保存ファイル
# 2021/12/22 新規登録 .f5.si ダイナミックdns更新
#
# 完成 2021/12/26(日)
#
use strict; # 宣言した変数以外を使えなくする
my $ddnsNowid="UseID";
my $ddnsNowpass="Password";
my $old_ip="/home/User/crontab/ddnsNow/G_ip_old.txt";
my $update="/home/User/crontab/ddnsNow/update.log";
my $no_update="/home/User/crontab/ddnsNow/no_update.log";
my $ip_change_log="/home/User/crontab/ddnsNow/ip_change_log.txt";
my $ip_change_status="/home/User/crontab/ddnsNow/ip_change_status";
my $ip_kari="/home/User/crontab/ddnsNow/G_ip_now.txt";
my $ipaddr ;
my $null="";
my $line;
my $wget;
my $oldipaddr;
$| = 1; # ゼロ以外が代入されると出力をバッファリングしなくなる。
################## メインプログラム ##################################
#
######## 自分のグローバルIPアドレスを調べる ######################
#system( `wget http://httpbin.org/ip >$ip_kari` ) ; # グローバルIPを仮ファイルに出力
#system( "kurly -s http://httpbin.org/ip >$ip_kari" ) ; # この文だと~User/crontab/ddnsNow 内で実行すると動くが、cronから実行すると不可
system( "/snap/bin/kurly -s http://httpbin.org/ip >$ip_kari" ) ; # 自分のグローバルIPを仮ファイルに出力
open KIP, "<",$ip_kari || die "Error: ipaddr.txt $!\n" ; #ファイルを入力で開く
while ($line=<KIP>) {;
if ($line=~/[0-9]+(\.[0-9]+){3}/ ) {; # IPアドレスとのマッチパターン
$ipaddr = $&;
#print "debug 1 \n" ;
}
}
close KIP;
#print "debug 2 \n" ;
#print "ipaddr= $ipaddr \n"; # debag 3
open FH, "<",$old_ip || die "Error: ipaddr.txt $!\n" ; #ファイルを入力で開く
$oldipaddr = <FH> ; # 記録されているIPアドレスを入力
close FH;
######## IPアドレスを記録した前回と比較 ################
if ( $ipaddr ne $null ){ # IPアドレスがヌルでない場合
#print "debug 4 ipaddr=$ipaddr , oldipaddr=$oldipaddr \n" ;
if ( $ipaddr eq $oldipaddr ) {
&noipchange( $no_update , $oldipaddr); # IPアドレスに変更なし ---------------------------------------------------------------
#print "debug 5 \n" ;
}
else { # IPアドレス変更する
#print "debug 6 \n" ;
$wget= `wget -O $ip_change_status -o $ip_change_log "https://f5.si/update.php?domain=$ddnsNowid&password=$ddnsNowpass" `;
&ipchange( $update ,$ipaddr ); # IPアドレスを追加書込
}
}
exit;
# ################################## メインプログラム エンド #####################
# ----------------------------- IPアドレスに変更なし ---------------------------------------
sub noipchange {
my $no_up=@_[0]; # 引数が一つの場合は$_[0]を、引数が複数の場合は@_[0],@_[1],----@_[n]を使う
my $no_cha_ip=@_[1];
# print "Debug no_update file :$no_up\n";
&time_prt($no_up); # 時刻の呼び出しとプリント
open (OUT,">>$no_up");
print OUT "ip address is not changed $no_cha_ip \n" ; #IPアドレスに変更無し
print OUT "" ;
close(OUT);
}
# ----------------------------- IPアドレス変更あり ---------------------------------------
sub ipchange {
my $ip_change=@_[0]; # 引数が一つの場合は$_[0]を、引数が複数の場合は@_[0],@_[1],----@_[n]を使う
my $ipaddr_2=@_[1];
# print "Debug no_update file :$no_up\n";
&time_prt( $ip_change ); # 時刻の呼び出しとプリント
open (OUT,">>$ip_change");
print OUT "ip address is changed:$ipaddr_2 \n" ; #IPアドレスに変更あり
close(OUT);
open (OUT,">$old_ip"); # 変更したIPを書き込む
print OUT "$ipaddr" ; #IPアドレスに変更あり
close(OUT);
}
# ----------------------------- 時刻のプリント ----------------------------------------------
sub time_prt {
my $no_up2=$_[0]; # 引数が一つの場合は$_[0]を、引数が複数の場合は@_[0],@_[1],----@_[n]を使う
my $sec;
my $min;
my $hour;
my $mday;
my $mon;
my $year;
my $wday;
my $yday;
my $isdst;
my $tt;
$tt=time();
($sec, $min, $hour, $mday, $mon, $year,
$wday, $yday, $isdst) = localtime($tt);
$year=$year+1900;
$mon=$mon+1;
open (OUT,">> $no_up2");
printf OUT "%02d/%02d/%02d %02d:%02d:%02d ", $year,$mon,$mday,$hour,$min,$sec ;
close(OUT);
}