From a8b38640a83e29804a9c06d0d93b74537e0eb253 Mon Sep 17 00:00:00 2001 From: Dean Wilson Date: Sat, 31 Oct 2015 17:54:08 +0000 Subject: [PATCH] Add some very old dns checking scripts for completeness. --- check-nsservers-know | 29 +++++++++++++++++++++++++++++ check-subdomains-presence | 24 ++++++++++++++++++++++++ domain_expiry.pl | 25 +++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 check-nsservers-know create mode 100644 check-subdomains-presence create mode 100755 domain_expiry.pl diff --git a/check-nsservers-know b/check-nsservers-know new file mode 100644 index 0000000..69b6b94 --- /dev/null +++ b/check-nsservers-know @@ -0,0 +1,29 @@ +#!/usr/bin/perl -w +use strict; +use warnings; +use Net::DNS; + +# takes a single domain, retrieves the ns records for it and then +# queries each server to ensure it can answer for that domain + +my $domain = shift; + +my $res = Net::DNS::Resolver->new; +my $query = $res->query( $domain, "NS"); + +if ($query) { + foreach my $rr (grep { $_->type eq 'NS' } $query->answer) { + $res->nameservers( $rr->nsdname); + + my $lookup = $res->query( $domain, "A"); + if ($lookup) { + foreach my $record (grep { $_->type eq 'A' } $lookup->answer) { + print $domain, " ", $rr->nsdname, " ", $record->address, "\n"; + } + } else { + warn "A record query for [$domain] against [", $rr->nsdname, "] failed: ", $res->errorstring, "\n"; + } + } +} else { + warn "NS record query for [$domain] failed : ", $res->errorstring, "\n"; +} diff --git a/check-subdomains-presence b/check-subdomains-presence new file mode 100644 index 0000000..9c0a23a --- /dev/null +++ b/check-subdomains-presence @@ -0,0 +1,24 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Net::DNS; + +die "$0: please supply a subdomain to look for and one or more zones to look in\n" + unless @ARGV >= 2; + +my $domain = shift; +my @zones = @ARGV; + +my $res = Net::DNS::Resolver->new; + +for my $zone ( @zones ) { + my $query = $res->query( "$domain.$zone", "A"); + + if ( $query ) { + foreach my $rr ( grep { $_->type eq 'A' } $query->answer ) { + print "Present - $domain.$zone\n"; + } + } else { + warn "Absent - $domain.$zone - ", $res->errorstring, "\n"; + } +} diff --git a/domain_expiry.pl b/domain_expiry.pl new file mode 100755 index 0000000..0aec7f7 --- /dev/null +++ b/domain_expiry.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Net::Domain::ExpireDate; + +die "$0: \n" unless @ARGV == 1; + +my $domainfile = shift; + +open( my $domains_fh, '<', $domainfile ) + || die "Failed to open [$domainfile]: $!\n"; + +my %domain_expiry; +for my $domain ( sort <$domains_fh> ) { + my $expiration = expire_date( $domain, '%Y-%m-%d' ); + + $expiration ||= "unknown"; + + push @{ $domain_expiry{$expiration} }, $domain; +} + +for my $expiry_date (sort keys %domain_expiry) { + print "$expiry_date -\n"; + print " -- $_" for @{ $domain_expiry{$expiry_date} }; +}