Perl从根服务器获取Nameservers IP

时间:2014-02-20 14:02:59

标签: perl dns

我正在尝试编写一个Perl脚本,该脚本应该获取特定域名服务器的IP,如注册商中所写,就像我写的那样:

dig -t ns example.com @a.gtld-servers.com

并采取了额外的部分。

我尝试使用Net :: DNS :: Resolver :: Recursive,但我得到的是两个NS服务器的相同IP地址。 (在我的公司,我们填充DNS记录,因为每个NS都是一个独立的服务器,这就是为什么我得到相同的地址)。

这是我写的:

my $resolver = Net::DNS::Resolver::Recurse->new();

my @root_ns = map $_ . '.root-servers.net', 'a'..'m';

$resolver->hints( @root_ns );

my $ns_query = $resolver->query_dorecursion($domain, "NS");

foreach my $ns_rr ( $ns_query->additional ) {
    print $ns_rr->name . " " . $ns_rr->rdatastr . "\n";
}

除解析dig输出外,有没有办法获取名称服务器IP?

1 个答案:

答案 0 :(得分:1)

您可以使用recursion_callback。这将返回所有名称服务器。

    use Net::DNS::Resolver::Recurse;

    my $res = Net::DNS::Resolver::Recurse->new;
    our %NS;

    $res->hints();
    $res->recursion_callback(sub {
         my $packet = shift;
         for  ($packet->additional){
              next if($_->string =~ /gtld/);
              @temp=split /\s+/,$_->string;
              $NS{$temp[0]}=$temp[-1];

       }
    });

    $res->query_dorecursion('google.com', 'NS');
    map {print "$_\t$NS{$_}\n"} keys %NS;