Blame | Last modification | View Log | Download | RSS feed
#! /usr/bin/env perl
# https://perlmaven.com/checking-the-whois-record-of-many-domains
use strict;
use warnings;
use 5.010;
use File::Which; # apt-get install libfile-which-perl
my $whois = which '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;
}
}