我有一个系统列表,我正在尝试获取IP地址。我已成功使用perl的Net :: DNS模块为单个主机名执行IP地址查询。我有1000个系统,但我需要ip地址。
有没有办法通过一个查询获取所有这些IP地址?
如果没有,有没有办法获得整个DNS条目列表,比如单个域?如果我得到了,那么我可以简单地将其放入哈希并以这种方式引用IP地址。
答案 0 :(得分:10)
无需自定义Perl。这可以使用-f
dig
(BIND工具的一部分)的$ dig -f /path/to/host-list.txt
选项来完成:
{{1}}
答案 1 :(得分:3)
对于大型域数据集,这将快速完成,无需解析结果; 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'
]
]
};