首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自多个域名服务器的DNS解析器结果

来自多个域名服务器的DNS解析器结果
EN

Stack Overflow用户
提问于 2012-04-12 00:30:39
回答 1查看 723关注 0票数 1

我向Net::DNS::Resolver构造函数传递了两个名称服务器,但只得到了一个结果。

我应该如何更改代码以接收来自所有名称服务器的结果?

代码语言:javascript
复制
sub resolve_dns()
{
    my $dns = $_[0];
    my $res   = Net::DNS::Resolver->new(

                nameservers => [qw(24.116.197.232 114.130.11.67 )],
                recurse     => 0,
                debug       => 1,
                tcp_timeout => 3
                );
    my $query = $res->search($dns);

    if ($query) {
        foreach my $rr ($query->answer) {
            next unless $rr->type eq "A";
            print $rr->address, "\n";
        }
    } else {
        warn "query failed: ", $res->errorstring, "\n";
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-12 01:29:49

我假设第一个DNS服务器之后的DNS服务器是用于回退目的,并且只会返回一个回复。

最好的方法似乎是操作Net::DNS::Resolver服务器列表,并显式地向每个服务器发出请求。

此示例代码演示了原理

代码语言:javascript
复制
sub resolve_dns {

  my $address = shift;

  my $res = Net::DNS::Resolver->new
    recurse     => 0,
    debug       => 1,
    tcp_timeout => 3,
  );

  for my $ns (qw( 24.116.197.232  114.130.11.67 )) {

    $res->nameservers($ns);

    my $reply = $res->send($address);

    if ($reply) {
      my @type_a = grep $_->type eq 'A', $reply->answer;
      print $_->address, "\n" for @type_a;
    }
    else {
      warn sprintf "Query to %s failed: %s\n", $ns, $res->errorstring;
    }
  }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10110079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档