I have a CSV file with a large list of domains and need to do DNS lookups against it. The input file is like this:
1,host1.foo.bar 2,host2.foo.bar n,hostn.foo.bar
I basically need to check if the domains are resolvable - with a 1 second timeout per DNS lookup and a list of 50,000 domains, this can take quite a while. I haven't used Perl threads before but think this would be a good candidate for it. Here is my code:
my $dns = new Net::DNS::Resolver; $dns->tcp_timeout( 1 ); $dns->udp_timeout( 1 ); my $my_file = $ARGV[0]; open(INFILE, $my_file) || die ("I refuse to open your file!"); my @my_data=<INFILE>; close(INFILE); foreach my $line(@my_data) { ## Parse the file chop($line); my ($number,$domain)=split(/,/,$line); testDns($number,$domain,$dns); } sub testDns { my ($line_number, $domain_to_test, $default_resolver) = @_; my $ns = $default_resolver->query( $domain_to_test, 'NS' ); if ($ns) { foreach my $rr ($ns->answer) { if ($rr->type eq "NS") { my @auth_nameservers = $rr->nsdname; foreach my $auth_nameserver (@auth_nameservers) { print "$line_number,$domain_to_test,$auth_nameserv +er\n"; } } } else { print "$line_number,$domain_to_test,error\n"; } }
How can I implement multiple threads in the above code?
Thanks, George
In reply to Multithreaded processing of a CSV file by costanza
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |