#! /usr/bin/env perl # https://perlmaven.com/checking-the-whois-record-of-many-domains use strict; use warnings; # allow the 'which' command for any OS use File::Which; # apt-get install libfile-which-perl # check if whois is installed on this machine my $whois = which 'whois'; # write the files to ./whois/ my $outPath = 'whois'; unless ( defined $whois ) { # we don't have it, so use Perl's implementation use Net::Whois::Raw; # apt-get install libnet-whois-raw-perl $Net::Whois::Raw::CHECK_FAIL = 1; $Net::Whois::Raw::OMIT_MSG = 1; } mkdir $outPath unless -d $outPath; while ( my $domain = <> ) { chomp $domain; next if $domain =~ m/arpa$/; # skip rdns entries warn "ERROR in [$domain], not processing\n" if $domain !~ m/^[a-z0-9-]+\.[a-z0-9-]+$/; my $outFile = "$outPath/$domain.whois"; print STDERR "$domain\t"; if ( -e $outFile ) { print STDERR "Already exists, skipping\n"; next; } if ( defined $whois ) { `$whois $domain > $outFile`; } else { my $data = whois($domain); open OUT,">$outFile" or die "Could not write to $outFile: $!\n"; print OUT $data; close OUT; } if ($domain =~ /\.org$/) { print STDERR "Waiting 16 seconds to avoid rate limit\n"; sleep 16; } else { print STDERR "Waiting 1 second before next one\n"; sleep 1; } }