Итак, в файле otter book имеется небольшой скрипт (см. Стр. 173), целью которого является итерационная проверка DNS-серверов, чтобы узнать, возвращают ли они тот же адрес для данного имени хоста. Однако решение, данное в книге, работает только тогда, когда хост имеет статический IP-адрес. Как написать этот скрипт, если я хочу, чтобы он работал с узлами, которые имеют несколько адресов, связанных с ними?Проверка DNS с использованием perl и Net :: DNS
Вот код:
#!/usr/bin/perl
use Data::Dumper;
use Net::DNS;
my $hostname = $ARGV[0];
# servers to check
my @servers = qw(8.8.8.8 208.67.220.220 8.8.4.4);
my %results;
foreach my $server (@servers) {
$results{$server}
= lookup($hostname, $server);
}
my %inv = reverse %results; # invert results - it should have one key if all
# are the same
if (scalar keys %inv > 1) { # if it has more than one key
print "The results are different:\n";
print Data::Dumper->Dump([ \%results ], ['results']), "\n";
}
sub lookup {
my ($hostname, $server) = @_;
my $res = new Net::DNS::Resolver;
$res->nameservers($server);
my $packet = $res->query($hostname);
if (!$packet) {
warn "$server not returning any data for $hostname!\n";
return;
}
my (@results);
foreach my $rr ($packet->answer) {
push (@results, $rr->address);
}
return join(', ', sort @results);
}