check master and slave’s NS serial number using perl script

I’ve found this usefull script on bind-user mailing list, to check NS serial number if they are in the same value.
credit: pyh – at – mail.nsbeta.info

#!/usr/bin/perl
use strict;
use Net::DNS;
use Getopt::Std;
my %opts;

getopts('hm:s:z:', \%opts);
if ($opts{'h'}) {
 usage();
}
my $master = $opts{'m'} || usage();
my $slave = $opts{'s'} || usage();
my $zone = $opts{'z'} || usage();
my $s1 = qrsoa($master,$zone);
my $s2 = qrsoa($slave,$zone);
if ($s1 != -1 && $s1 == $s2) {
 print "OK\n";
 exit 0;
} else {
 print "CRITICAL: zone $zone sync error\n";
 exit 2;
}

sub qrsoa {
 my $host = shift;
 my $zone = shift;
 my $res   = Net::DNS::Resolver->new(nameservers => [$host]);
 my $query = $res->query($zone, "SOA");
 return $query ? ($query->answer)[0]->serial : -1;
}

sub usage {
 print <<EOF;
 Usage: $0 -m 8.8.8.8 -s 8.8.4.4 -z example.com
 -m  master DNS ip or name
 -s  slave DNS ip or name
 -z  zone name
 -h  show this help page
EOF
 exit 0;
}

ie:

$ ./nsserial.pl -m ns1.he.net -s ns1.kutukupret.com -z kutukupret.com
OK

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *