我正在尝试编写一个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?
答案 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;