そういうときWindowsだとDiCEなんかを使って自動更新しますが、私はLinuxから自動更新したかったので使ってません。
そこで、普通はddclientなんていうものを使うみたいですが、私の使い方とはこれともちょっと異なるため、自力でスクリプト書きました。
で、自分的に必要な条件は次の通り
#!/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の使い方は下記のサイトを参考(というかそのまんま)にしております。
んなことが書いてあるのでほどほどにしましょう(笑) Posted by Takuchan at 2003年07月31日 14:34 | トラックバック(0)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! 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. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!