Skip to content

Instantly share code, notes, and snippets.

@viliampucik
Created April 12, 2013 22:10
Verify existence of SOA records for device's domain and its IP subnets
#!/usr/bin/env perl
# Verify existence of SOA records for device's domain and its IP subnets
use strict;
use warnings;
use File::Basename;
use Net::DNS;
use Socket;
die 'Usage: ', basename($0), " <hostname>\n"
unless scalar @ARGV == 1;
die "Hostname cannot be empty!\n"
unless length( my $hostname = $ARGV[0] );
die "Hostname without a valid domain!\n"
unless ( $hostname =~ /^[^.]*\.(.*)/ && length( my $domain = $1 ) );
die "Hostname without a valid IP!\n"
unless my $ip = inet_aton $hostname;
$ip = inet_ntoa $ip;
my $res = Net::DNS::Resolver->new;
if ( $res->query( $domain, 'SOA' ) ) {
print "SOA record exists for domain \"$domain\"\n";
}
else {
print "No SOA record for for domain \"$domain\"\n";
}
my @rsubnet = reverse split '\.', $ip;
my $suffix = '';
for my $netmask ( 24, 16, 8 ) {
shift @rsubnet;
$suffix .= '.0';
if ( $res->query( join( '.', @rsubnet ) . '.in-addr.arpa', 'SOA' ) ) {
my $subnet = join('.', reverse @rsubnet );
die "SOA record exists for subnet \"$subnet$suffix/$netmask\"\n";
}
}
print "No SOA record for any of \"$ip\" subnets!\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment