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); }