我有我试图获得IP地址的系统列表。我已成功使用net :: DNS模块为perl执行单个主机名的IP地址查询。我有1000个系统,但是,我需要IP地址。如何在Unix/Linux上使用perl执行批量DNS查询?
有没有办法让一个查询获得所有这些ip地址?
如果不是,有没有办法让整个DNS条目列表,比如说,单个域名?如果我知道了,那么我可以简单地将它放入哈希中,并以这种方式引用IP地址。
我有我试图获得IP地址的系统列表。我已成功使用net :: DNS模块为perl执行单个主机名的IP地址查询。我有1000个系统,但是,我需要IP地址。如何在Unix/Linux上使用perl执行批量DNS查询?
有没有办法让一个查询获得所有这些ip地址?
如果不是,有没有办法让整个DNS条目列表,比如说,单个域名?如果我知道了,那么我可以简单地将它放入哈希中,并以这种方式引用IP地址。
对于大型数据集的域名,这将没有真正的需要解析的结果做快;一个IP将始终在$results{$domain}[0][4]
。这不是一个单一的查询,但它们将同时完成(在任何一次IIRC中最多有10个查询正在进行),因此将很快完成。只需确保DNS服务器运营商在很短的时间内就没有问题。
use AnyEvent::DNS;
use Data::Dumper;
my @domains = qw/google.com/;
my $resolver = AnyEvent::DNS->new(server => '8.8.4.4');
my %results;
### Set up the condvar
my $done = AE::cv;
$done->begin(sub { shift->send });
for my $domain (@domains) {
$done->begin;
$resolver->resolve($domain, 'a', sub {push @{$results{$domain}}, \@_; $done->end;});
}
### Decrement the cv counter to cancel out the send declaration
$done->end;
### Wait for the resolver to perform all resolutions
$done->recv;
print Dumper \%results;
输出:
$VAR1 = {
'google.com' => [
[
'google.com',
'a',
'in',
300,
'74.125.225.52'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.50'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.49'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.48'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.51'
]
]
};
有没有你不只是在主机名环路理由吗? –
表现。我只是不想在做1时做出1,000个单独的查询就足够了! – wsaxton
您是否证明制作1,000个单独的查询会对您的程序或DNS服务器的性能产生不利影响?如果没有,那么你是过早优化。大多数DNS服务器每秒可以处理数以万计的查询,我不希望在循环中查询它会有问题。 –