Using AnyEvent::DNS, you could parallelize your DNS requests to the various blacklists instead of waiting for the results sequentially.
#!perl -w
use strict;
use AnyEvent;
use AnyEvent::DNS;
my %results;
my $outstanding = AnyEvent->condvar;
for my $domain (<DATA>) {
$domain =~ s!\s+$!!;
# Fire off a query for this hostname
warn "Querying ip(s) for '$domain'";
$outstanding->begin();
AnyEvent::DNS::resolver->resolve (
$domain, "a", sub {
$outstanding->end;
if( @_ ) {
for (@_) {
my ($name, $type, $in, $ttl, $ip) = @$_;
$results{ $name } ||= [];
warn "Response for $name";
push @{$results{ $name }}, $ip;
};
} else {
warn "No response for $domain";
};
});
};
# Wait for all requests to finish
$outstanding->recv;
use Data::Dumper;
warn Dumper \%results;
__DATA__
google.de
google.com
example.com
doesnotexist.local
perlmonks.org
|