2014-02-20 126 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;