ようこそNICのホームページへ(なが〜い試運転中 from 2001/5/12)
  • @nifty atnifty-ddns ddo.jp ddnsNow   HP パソコン 健康 落語 海外 思うまま 電子工作
  • ddnsNowのIPアドレスを更新するスクリプト

  • Last update:2022/01/12  ; Build:2022/01/12
  •  
           
    #!/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);
    
    }
    

    パソコンへ     HomePage     このページのトップ