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 Data::Dumper;
use File::Basename;
my %results;
for ( my $i = 0; $i < scalar( @ARGV ); $i++ ) {
my $data = '';
my $domain = basename( $ARGV[$i], ( '.whois' ) );
if ( open DATA,"<$ARGV[$i]" ) {
$data = join( '', <DATA> );
} else {
warn "Could not read $ARGV[$i]: $!\n";
next;
}
my @ns = get_ns($data);
if ( @ns ) {
foreach my $thisNS ( @ns ) {
push @{ $results{ $thisNS } }, $domain;
}
} else {
push @{ $results{ 'Unknown' } }, $domain;
}
}
foreach my $ns ( sort keys %results ) {
print "$ns\t", join( "\n$ns\t", @{ $results{$ns} } ) . "\n";
}
sub get_ns {
my ($data) = @_;
my @ns;
return ('Empty Record') unless $data; # this is a bad domain?
return ('Invalid TLD' ) if $data =~ m/No whois server is known for this kind of object/;
@ns = map { uc $_ } $data =~ /^\s*Name Server:\s*(\S+)\s*$/mg;
if (not @ns) {
@ns = map { uc $_ } $data =~ /^nserver:\s*(\S+)\s*$/mg;
}
if (not @ns) {
my @lines = split /\n/, $data;
return ('Expired Domain') if $lines[0] =~ m/^No Data Found/ || $lines[0] =~ m/^No match for/ || $lines[0] =~ m/^NOT FOUND/;
my $in_ns = 0;
for my $line (@lines) {
if ($line =~ /^\s*Domain servers in listed order:\s*$/) {
$in_ns = 1;
next;
}
if ($line =~ /^\s*$/) {
$in_ns = 0;
}
if ($in_ns) {
$line =~ s/^\s+|\s+$//g;
push @ns, uc $line;
}
}
@ns = sort @ns;
}
return @ns;
}