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

  • Last update:2022/01/12    Build:2022/01/12
  •  
           
    #!/usr/bin/perl   
    #               -w ワーニングを出す
    # E:\DATA\bsd\dynamic-dns\ddo-jp\test-ddns-ddo-pl-211228.txt
    # E:\DATA\bsd\dynamic-dns\ddo-jp\test-ddns-ddo-pl-211228.txt
    # 2021/12/28---> ok
    # ddnsNowのスクリプトを作ったので、合わせてddo.jpも簡素化
    #
    #
    #
    #
    
    use strict; # 宣言した変数以外を使えなくする
    
    my $ddoid="UserID";
    my $ddopass="Password";
    
    
    my $old_ip="/home/User/crontab/ddnsDDo/DDo-G_ip_old.txt";
    my $update="/home/User/crontab/ddnsDDo/DDo-update.log";
    my $no_update="/home/User/crontab/ddnsDDo/DDo-no_update.log";
    my $ip_change_log="/home/User/crontab/ddnsDDo/DDo-ip_change_log.txt";
    my $ip_change_status="/home/User/crontab/ddnsDDo/DDo-ip_change_status";
    
    my $ip_kari="/home/User/crontab/ddnsDDo/DDo-G_ip_now.txt";
    
    my $ipaddr ;
    my $null="";
    my $line;
    
    
    
    my $wget;
    my $oldipaddr;
    
    
    my $dmy="/home/User/crontab/ddnsDDo/DDodmy";
    
    
    
    
    $| = 1;   # ゼロ以外が代入されると出力をバッファリングしなくなる。
    
    
    # ###########################  メインプログラム  ###############################
    open FH, "<",$old_ip || die "Error: ipaddr.txt $!\n" ; # 以前のIPアドレスの入ったファイルを入力で開く
     $oldipaddr = <FH>  ;                                  # 記録されているIPアドレスを入力
    close FH;
    
    
                    
    $ipaddr=&newip();             # 新しいipアドレスを求める
    
    #    print "Debug 2\n";
    
    
    ########  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 $dmy "http://free.ddo.jp/dnsupdate.php?dn=$ddoid&pw=$ddopass"`;
    #print "debug 7 \n" ;
         &ipchange( $update ,$ipaddr , $old_ip ,$ip_change_log ,$ip_change_status); # IPアドレスを追加書込
       }
    #print "debug 8 \n" ;
    
    }
    else {  # 新しいIPアドレスが得られなかった場合
      &no_new_ip($no_update);
    }
    #print "debug 9 \n" ;
    
    
    exit;
    ##########  メインプログラム end #########################################
    
    
    
    
    # -----------------------------  新しいIPアドレスが得られなかった --------------------------
    sub no_new_ip {
      my $no_up=$_[0];
      &time_prt($no_up);                                    # 時刻の呼び出しとプリント
      open (OUT,">>$no_up");
      print OUT "新しいIPアドレスが得られませんでした。\n" ; # 新しいIPアドレスが得られないエラー
      close(OUT);
    }
    
    
    
    
    # -----------------------------  IPアドレスに変更なし ---------------------------------------
    sub noipchange {
      my $no_up=@_[0]; #output file name  # 引数が一つの場合は$_[0]を、引数が複数の場合は@_[0],@_[1],----@_[n]を使う
      my $ip_address=@_[1]; # ip address
    #  print "Debug no_update file :$no_up\n";
      &time_prt($no_up);                                    # 時刻の呼び出しとプリント
      open (OUT,">>$no_up");
      print OUT "IP address is not changed: $ip_address\n" ;     #IPアドレスに変更無し
      print OUT "" ;
      close(OUT);
    }
    
    
    
    # -----------------------------  時刻のプリント ----------------------------------------------
    # 2021/12/27 outoput file 名をわかりやすく変更した
    # 引数 1つ 出力ファイル名 メインから持ち込む
    #
    #
    sub  time_prt {
      my $out_file=$_[0]; # output file name # 引数が一つの場合は$_[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,">> $out_file");
      printf OUT "%02d/%02d/%02d     %02d:%02d:%02d   ", $year,$mon,$mday,$hour,$min,$sec  ;
      close(OUT);
    
    }
    
    # -------------------------------  新しいipアドレスを求める ----------------------------
    #
    # 2021/12/27 curlを使って自分のグローバルIPアドレスを求める
    # 引数なし 関数として ipaddress 持ち帰るため
    # 
    #
    sub newip  {
        my $ip;
        my $curl_ip = `curl -s inet-ip.info` ; # 2021/12/27 グローバルIPを求める
    
        $curl_ip =~/[0-9]+(\.[0-9]+){3}/;                   # IPアドレスとのマッチパターン
        $ip = $&;                                           # マッチしたIPアドレスを入力
    #    print "あなたのグローバルIPアドレスは $ip です\n";
        return $ip ;
    }
    
    
    # -----------------------------  IPアドレス変更あり ---------------------------------------
    sub ipchange {
    # 引数が一つの場合は$_[0]を、引数が複数の場合は@_[0],@_[1],----@_[n]を使う
    
     my $ip_change_file=@_[0];    # 変更された時刻と変更されたIPアドレスを書き込むファイル 
     my $ipaddr_2=@_[1];          # new ip address
     my $ip_old_file=@_[2];       # 新しいIPアドレスを書き込むファイル名−−>oldip
     my $ip_change_log_txt=@_[3]; # IP更新のログ
     my $ip_change_sta=@_[4];     # IP更新のstatus
     my $line ;                   # 1行読み込み用
    #  print "Debug no_update file :$no_up\n";
    #print "debug 31 \n";
      &time_prt( $ip_change_file );                         # 時刻の呼び出しとプリント
      open (OUT,">>$ip_change_file");
      print OUT "ip address is changed: $ipaddr_2 \n" ;     #IPアドレスの変更を履歴に書き込む
      close(OUT);
    #print "debug 32 \n";
      open (OUT,">$ip_old_file"); # IPaddressを書き込むファイル名
      print OUT "$ipaddr_2" ;     # 新しく変更したIPアドレスを書き込む
      close(OUT);
    #print "debug 33 \n";
      open IN, "<",$ip_change_sta || die "Error: ipaddr.txt $!\n" ; # IP更新時のstatus入ったファイルを入力で開く
      open (OUT,">>$ip_change_log_txt"); # IP変更の履歴ファイル名
    
      while  ( $line =<IN> ) {;     # 記録されているstatusを1行読み込む
        print OUT "$line" ;       # 記録されているstatusを1行書き込み
      
      }
    
      close(OUT);
      close IN;
    
    }
    

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