我向Net::DNS::Resolver构造函数传递了两个名称服务器,但只得到了一个结果。
我应该如何更改代码以接收来自所有名称服务器的结果?
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";
}
}发布于 2012-04-12 01:29:49
我假设第一个DNS服务器之后的DNS服务器是用于回退目的,并且只会返回一个回复。
最好的方法似乎是操作Net::DNS::Resolver服务器列表,并显式地向每个服务器发出请求。
此示例代码演示了原理
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;
}
}
}https://stackoverflow.com/questions/10110079
复制相似问题