我有一个正在尝试获取其IP地址的系统列表。我已经成功地使用了perl的Net::DNS模块来执行单个主机名的IP地址查询。但是,我有1,000个系统需要ip地址。
有没有一种方法可以通过一次查询获得所有这些ip地址?
如果不是,有没有办法获取整个DNS条目列表,比如单个域?如果我得到了它,那么我可以简单地将其放入散列中,并以这种方式引用IP地址。
发布于 2011-10-12 21:21:40
不需要自定义Perl。这可以使用dig的-f选项(绑定工具的一部分)来完成:
$ dig -f /path/to/host-list.txt发布于 2011-10-13 22:43:57
对于较大的域数据集,这样做速度很快,不需要真正解析结果;IP总是在$results{$domain}[0][4]中。这不是一个单独的查询,但它们将并发完成(任何时候最多进行10个查询,IIRC),因此将很快完成。只需确保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'
]
]
};https://stackoverflow.com/questions/7740499
复制相似问题