如何在Unix / Linux上使用perl执行批量DNS查询?

时间:2011-10-12 13:03:10

标签: perl unix dns

我有一个系统列表,我正在尝试获取IP地址。我已成功使用perl的Net :: DNS模块为单个主机名执行IP地址查询。我有1000个系统,但我需要ip地址。

有没有办法通过一个查询获取所有这些IP地址?

如果没有,有没有办法获得整个DNS条目列表,比如单个域?如果我得到了,那么我可以简单地将其放入哈希并以这种方式引用IP地址。

2 个答案:

答案 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'
                            ]
                          ]
        };