Which Zones Have a Specified Subdomain? - DNS Delvings (1)

It’s been another day of many DNS changes and while the work itself has been amazingly dull, life draining, scut work at least one positive thing’s come out of it - my appreciation for the Net::DNS perl module has grown.

While it’s possible to do nearly anything DNS query related with the dig command it’s a lot easier to extract the data and reuse certain fields if you have access to a decent data structure rather than grepping bits of text out. Over the next couple of days, while I’m elbow deep in our domain name system, I’ll be posting, hopefully useful, little snippets of code to illustrate how you can get a lot of value from little code.

Today we have a script that accepts checks for the presence of the specified subdomain in all the domains mentioned on the command line and reports success or failure. I’ve not had to run it in anger yet but it should, fingers crossed, save me a lot of digging around tomorrow. You invoke the script like this - check-subdomains-presence blog example.org example.com.

#!/usr/bin/perl -w
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";
  }
}

The code is short, easy to read through and will hopefully whet your appetite for the longer posts to come…`