일부 DNS 서버에서 내 도메인을 확인하려면 AnyEvent::DNS
을 사용하고 싶습니다. 서버 목록은 각각 약 60 개 이상의 서버에서 두 곳에서 가져옵니다. 하나의 서버 목록에 대해서만 해결을 실행하면 문제가 없습니다. 그러나 모든 목록에 대해 해결 방법을 실행하면 오류가 발생합니다 : "unable to create either an IPv4 or an IPv6 socket"
.AnyEvent :: DNS 최대 요청 제한이 있습니까?
다음과 같은 내 스크립트 : 그렇지 않습니다,
#!/usr/bin/perl
use Modern::Perl;
use AnyEvent::DNS;
use AnyEvent::Socket;
use AnyEvent;
use Module::Runtime qw/require_module/;
use lib './lib';
my $domain = $ARGV[0] // 'fmn.xnimg.cn';
my $cv = AnyEvent->condvar;
for my $mod (('DNS::xixik', 'DNS::yqie')) { # error
#for my $mod (('DNS::xixik')) { # ok
require_module($mod);
my $dnslist = $mod->new->get_dnslist;
for my $isp (keys %$dnslist) {
while (my ($addr, $dns) = each %{ $dnslist->{$isp} }) {
resolv($isp . $addr, $_, $domain) for @{$dns};
}
}
}
$cv->recv;
sub resolv {
my ($addr, $dns, $domain) = @_;
my $resolver = AnyEvent::DNS->new(
server => [ AnyEvent::Socket::parse_address $dns ],
);
$cv->begin;
$resolver->resolve(
"$domain" => 'a',
sub {
my @ips = map { $_->[-1] } @_;
printf "%s (%s) => %s\n", $dns, $addr, join(", ", @ips) if @ips;
$cv->end;
}
);
}