3322.org动态DNS

发表于:2012-02-08来源:作者:点击数: 标签:
在Linux or FreeBSD平台下,用Perl脚本实现3322.org动态DNS的功能 基本情况描述 先看一下拓扑 在Linux or FreeBSD的平台下在上面的拓扑的时候可能回出现 从3322.org下的软件不能用的情况。 具体情况如下。 上面的路由器向SP 通过PPPoE的拨号后,得到一个公网

  在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可以根据你自己的情况来修改。

  着先写到这里,以后要用到就可以用了。

原文转自:http://www.ltesting.net