在Linux or FreeBSD平台下,用Perl腳本實現3322.org動態DNS的功能
基本情況描述
先看一下拓撲
在Linux or FreeBSD的平台下在上面的拓撲的時候可能回出現 從3322.org下的軟件不能用的情況。
具體情況如下。
上面的路由器向SP 通過PPPoE的撥號後,得到一個公網的IP地址。並且配置NAT使下面的LAN上網。這樣下面的這個服務器是沒有公網IP地址的。
但是這個時候可能需要這個服務器來提供一個3322.org的動態DNS的更新。
但是在 ez-ipupdate 的配置文件裡面一定要制訂一個interface的參數。如果在配置文件中,制定一個接口,那麼在 3322.org上看到的就是一個Private的IP。
思路
看了3322.org上面關於DDNS的協議標准(http://www.3322.org/dyndnspage/protocol.html),然後有看了google上一些人的一些文章。
其實,他就是通過訪問members.3322.org的web服務器,然後通過URL來傳遞一些參數來實現DDNS的更新。並且,
==================================================================================
myip=ipaddr System:All Optional: Yes
域名對應的IP。如果不指定,則服務器將選擇最佳的IP(一些Proxy會傳遞客戶端的IP,
這會被服務器檢測到)。如果傳遞的地址格式錯誤,則忽略這個參數,而用服務器檢測
到的IP。
==================================================================================
這個部分和有用。原來的程序是通過在配置文件中指定interface來拿到這個myip的參數的。其實,我現在不想讓他拿到這個IPaddr。
很久以前還在大學的時候看過一些Perl的東西,可以通過Perl來實現 DDNS的更新。
由於編程水平有限,下面的script是沒有一點錯誤處理的。畢竟是想自己用麼。不想形成一個Perl的軟件。(也沒有必要寫的太完美)。
Perl的腳本如下:
#!/usr/bin/perl
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->agent("MyApp/0.1 ");
# Create a request
my $req = HTTP::Request->new(POST => 'http://username:password\@members.3322.org/dyndns/update');
$req->content_type('application/x-www-form-urlencoded');
$req->content('system=dyndns&hostname=host.3322.org&myip=abc&wildcard=OFF');
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
# Check the outcome of the response
if ($res->is_suclearcase/" target="_blank" >ccess) {
print $res->content;
}
else {
print $res->status_line, "\n";
}
腳本裡面的username and password 還有host.3322.org可以根據你自己的情況來修改。
著先寫到這裡,以後要用到就可以用了。