Как я могу выполнить массовый DNS-запрос, используя perl в Unix / Linux? - PullRequest
4 голосов
/ 12 октября 2011

У меня есть список систем, для которых я пытаюсь получить IP-адреса.Я успешно использовал модуль Net :: DNS для perl, чтобы выполнить запрос IP-адреса для одного имени хоста.Однако у меня есть 1000 систем, для которых мне нужны IP-адреса.

Есть ли способ получить все эти IP-адреса одним запросом?

Если нет, то есть ли способ получить полный список записей DNS, скажем, для одного домена?Если бы я получил это, то мог бы просто поместить это в хеш и ссылаться на IP-адреса таким образом.

Ответы [ 2 ]

10 голосов
/ 12 октября 2011

Нет необходимости в пользовательских Perl.Это можно сделать с помощью опции -f для dig (часть инструментов BIND):

$ dig -f /path/to/host-list.txt
3 голосов
/ 13 октября 2011

Для большого набора данных домена это будет сделано быстро, без необходимости анализировать результаты; IP всегда будет в $results{$domain}[0][4]. Это не один запрос, но они будут выполняться одновременно (не более 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'
                            ]
                          ]
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...