2014-02-20 130 views
2

我试图写一个Perl脚本,应该得到特定域的域名服务器的IP地址,如写在登记处,好像我写例如:的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"; 
} 

有没有一种方法,除了解析挖输出,以获得域名服务器的IP?

回答

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;