ようこそNICのホームページへ(なが〜い試運転中)    あなたは2001/5/12以来 人目の来訪者です。
HP パソコン 健康 落語 海外 思うまま 電子工作

携帯電話 iモードからダイナミックDO!の更新ログを表示(2012/07/08)
Last update:2012/11/23  build:2012/07/16





ダイナミックDO!の7日毎の更新が2回で止まる。
niftyと同様にPerlでスクリプトを書いた。
携帯電話から手軽にDO!のddns更新ログを確認する。

Diceを使ってダイナミックDO!の自動更新をしていた。ダイナミックDO!は1ヶ月以上更新されないと IDが消去されてします。1ヶ月更新がないとワーニングのメールが届きます。

DiCEを使っていると2回までの更新はしてくれるが、3回目(3週間後)の更新がされない。 原因は不明。FreeBSD+Linuxカーネル+Diceという組み合わせに無理があるのか?

面倒なのでniftyと同じようにPerlでスクリプトを書いてcrontabで実行するようにした。 ついでに更新ログを携帯電話から見られるようにした。nifty用に作ったPerlのプログラムを修正。 携帯電話からログを読み出すcgiもniftyのものをアレンジした。 その記録を残すこととした。


1. ファイルの構成

iモードのトップページは
/i/index.html

その次に呼び出されるページは
/i/ddns-ddo-update-i.html

さらにこれから呼び出されるcgiは
/usr/local/apache2/cgi-bin/tail_ddns_ddo_update-i-120708.cgi


携帯電話から見ることを考え読み出す非更新ログは3行分としました。

2. cgiファイル

cgiファイルは以下の通り。

#!/usr/bin/perl -w  
#               -w ワーニングを出す
#           /usr/local/bin/ddns4nifty/ddo/update.logを携帯電話iモードで出力する
#           /usr/local/apache2/cgi-bin/tail_ddns_ddo_update-i-120708.cgi mod 755
#           2009/02/10 ---> nifty用に修正
#           2012/07/08 ダイナミックDO!用に修正完了
#           program 
#
use strict; # 宣言した変数以外を使えなくする

$| = 1;   # ゼロ以外が代入されると出力をバッファリングしなくなる。

my $sec;
my $min;
my $hour;
my $mday;
my $mon;
my $year;
my $wday;
my $yday;
my $isdst;
my $tt;
my $null="";

my $line="";

# 読み込み書き込みファイルオープン
#                読み取り 書き込み 追加 新規作成 上書き 
#   <   filename ○         ×      ×     ×      × 
#   >   filename ×         ○      ×     ○      ○ 
#   >>  filename ×         ○      ○     ○      × 
#   +<  filename ○         ○      ×     ×      × 
#   +>  filename ○         ○      ×     ○      ○ 
#   +>> filename ○         ○      ○     ○      × 


# ========================
# ファイルによる呼び出し限定の場合
my $okfile1= "https://192.168.24.111/cgi-call/ddns-ddo-update-i.html"; # 呼び出しを許可するファイル名(localhost)
my $okfile2= "https://www.nic.atnifty.com/cgi-call/ddns-ddo-update-i.html"; # 呼び出しを許可するファイル名(ddns nifty)
my $okfile3= "https://nic825.ddo.jp/cgi-call/ddns-ddo-update-i.html"; # 呼び出しを許可するファイル名(ddns ddo.jp)


# ############### ここからhtml出力へ  htmlへ出力する場合この下の行が出力の最初になければならない
print "Content-type: text/html\n\n";

# iモードから呼び出すためチェックを外す(2011/10/15)
# &from_check_f; #    呼び出し元チェック用のサブルーチン呼び出し


#print "system \n";
#system 'tail /usr/local/bin/ddns4nifty/no_update.log';


# ------  ファイルを1行ずつ読み込み、EOFで終了  ----------------
# ------  open分のファイル名の後ろに"|"を付けることでファイル名をコマンドと見なしその出力をファイルハンドラに入力できる ----
print "open /ddo/update.log<br>\n";
# open( IN, "tail -30 /usr/local/bin/ddns4nifty/no_update.log |");
open( IN, "tail -3 /usr/local/bin/ddns4nifty/ddo/update.log |");
while ( $line = <IN>) {
    print $line,"<br>";
}
close(IN);

exit;

# ---------  呼び出し元チェック用のサブルーチン  -----------------------
sub from_check_f {
 if($ENV{'HTTP_REFERER'} ne $okfile1){
   if($ENV{'HTTP_REFERER'} ne $okfile2){
     if($ENV{'HTTP_REFERER'} ne $okfile3){
        print "不正なCGI呼び出しです。";
        exit;
     }
   }
 }
# ----------  念のためPOST限定 ---------
# if( $ENV{'REQUEST_METHOD'} eq "GET" ) {
#	print "不正な呼び出しです(GET)。";
#       exit;
# }
}
# ---------  チェック用のサブルーチン  END -------------------


3. ダイナミックDO!用のPerlプログラム


Perlのプログラム(2012/07/08)です
Perlのプログラム IPアドレスが変わったとき更新がうまくいかなかったのを修正(2012/08/29)
Perlのプログラム 引数を除いた形(広域変数)(2012/08/31)
Perlのプログラム IPアドレスが変わったとき更新がうまくいかなかったのを修正(2012/11/09)

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