2003年07月31日

DynDNSへの自動登録スクリプト

Dynamic DNSでDynDNSさんを用いていますが、こちら35日間更新がないとホスト名消されてしまうのがちょっと不便です。

そういうときWindowsだとDiCEなんかを使って自動更新しますが、私はLinuxから自動更新したかったので使ってません。

そこで、普通はddclientなんていうものを使うみたいですが、私の使い方とはこれともちょっと異なるため、自力でスクリプト書きました。

で、自分的に必要な条件は次の通り

  • コマンドラインで実行できること
  • IP変更監視は別のプログラムが行っているので、常駐しないこと
  • 変更されたIPは引数で渡されるので、それを元に変更できること
  • なるべくロックされないように、巧妙にやること
でできたPerlのスクリプトは↓の通り
#!/usr/bin/perl
#
# dyndns.orgさんに適当に再登録

# 初期設定項目
my $UName  = ''; #ログインユーザ名
my $PWord  = ''; #ログインパスワード
my $Domain = ''; #各自変更の事

my $host = 'www.dyndns.org'; # ホスト名
my $url = "/services/dyndns/$UName.$Domain"; # ホスト名を抜いたURL
my $protocol = 'https'; #プロトコル

# 使用モジュールの宣言
use strict;
use LWP::UserAgent;
use HTTP::Cookies;

my $ua = LWP::UserAgent->new;
$ua->cookie_jar(HTTP::Cookies->new(file => "lwpcookies.txt",autosave => 1));

# 引数
my($sethost) = @ARGV;

# 初期化
my $yn=0;

#### 現状の取得
{
 my $req = HTTP::Request->new(POST => "$protocol://$host$url");
 $req->content_type('application/x-www-form-urlencoded');
 $req->content("__login=1&username=$UName&password=$PWord");

 my $res = $ua->request($req);
 my $buf = $res->as_string;

 while (chomp($buf)) {
  # ワイルドカード設定をGET
  if($buf =~ /wildcard.*checked/){$yn = 1;}
  if($buf =~ /<\/html>/){last;}
 }
}

# ワイルドカード設定を更新して弄っているように見せかける
my $postmsg;
if ($yn) {
  $postmsg = "started=1&ip=$sethost&mx=&action=Modify+Host";
}else{
  $postmsg = "started=1&ip=$sethost&wildcard=1&mx=&action=Modify+Host";
}

#### 更新処理
{
 my $req = HTTP::Request->new(POST => "$protocol://$host$url");
 $ua->cookie_jar->add_cookie_header($req);
 $req->content_type('application/x-www-form-urlencoded');
 $req->content("$postmsg");

 my $res = $ua->request($req);
}

exit;
実はこれに変更するまでは自力でソケット開いてIEに見せかけたPOSTを送りつけてたんですが、SSL対応になったんで今回初めてLWPモジュールを使いました。

ちなみに、LWPの使い方は下記のサイトを参考(というかそのまんま)にしております。

ちなみに上記のプログラムを使って毎日一回ずつ、cronでも自動で更新してたりしますが、今のところ消されたりしてないので連続更新によるロックアップなどの心配は大丈夫かもしれません。
、サイトのソースには
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  Do NOT reverse engineer any of the forms on this page.             !
!  If you wish to write a client see http://clients.dyndns.org/devel/ !
!  Clients that reverse engineer forms are blocked, and accounts that !
!  use such clients may also be blocked.                              !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
んなことが書いてあるのでほどほどにしましょう(笑) Posted by Takuchan at 2003年07月31日 14:34 | トラックバック(0)