You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
1.8 KiB
Perl
95 lines
1.8 KiB
Perl
#!/usr/bin/perl
|
|
|
|
use Getopt::Long;
|
|
|
|
my @SERVERS;
|
|
my @SERVERNAMES;
|
|
my @results;
|
|
my ($LOOKUP, $RESULT1, $RESULT2, $helpme);
|
|
|
|
sub help {
|
|
print "Usage: $0 --server <DNS server 1> [--server <...>] --servername <DNS servername 1> [--servername <...>] --lookup <name to lookup> --result <expected result 1> --result <expected result 2>\n";
|
|
|
|
exit (3);
|
|
}
|
|
|
|
help if @ARGV == 0;
|
|
|
|
GetOptions (
|
|
"server=s" => \@SERVERS,
|
|
"servername=s" => \@SERVERNAMES,
|
|
"lookup=s" => \$LOOKUP,
|
|
"result=s" => \@results,
|
|
"help" => \$helpme
|
|
) or help;
|
|
|
|
help if $helpme || @ARGV;
|
|
|
|
($RESULT1, $RESULT2) = ($results[0], $results[1]);
|
|
|
|
$DIG = "/usr/bin/dig";
|
|
$nservers = 0;
|
|
|
|
$blankerr = 0;
|
|
foreach $srv (@SERVERS) {
|
|
$result[$nservers] = &lookup($LOOKUP, $srv);
|
|
$blankerr = 1 if $result[$nservers] eq '';
|
|
$nservers++;
|
|
}
|
|
|
|
if ($blankerr != 0) {
|
|
print "CRITICAL: some UDNS servers not responding:";
|
|
for ($i = 0; $i < $nservers; $i++) {
|
|
print " $SERVERNAMES[$i]: ";
|
|
if ($result[$i] eq '') {
|
|
print "no response";
|
|
} else {
|
|
print $result[$i];
|
|
print "*" if (($result[$i] ne $RESULT1) and ($result[$i] ne $RESULT2));
|
|
}
|
|
}
|
|
|
|
print "\n";
|
|
exit 2;
|
|
}
|
|
|
|
$differr = 0;
|
|
for ($i = 1; $i < $nservers; $i++) {
|
|
$differr = 1 if ($result[0] ne $result[$i]);
|
|
}
|
|
|
|
if ($differr != 0) {
|
|
print "CRITICAL: DNS servers return different results:";
|
|
for ($i = 0; $i < $nservers; $i++) {
|
|
print " $SERVERNAMES[$i] --> $result[$i]";
|
|
print "*" if (($result[$i] ne $RESULT1) and ($result[$i] ne $RESULT2));
|
|
}
|
|
|
|
print "\n";
|
|
exit 2;
|
|
}
|
|
|
|
if (($result[0] ne $RESULT1) and ($result[0] ne $RESULT2)) {
|
|
print "CRITICAL: UDNS servers returning incorrect IP address: $result[0]\n";
|
|
exit 2;
|
|
}
|
|
|
|
print "OK: all UDNS servers returning $result[0]\n";
|
|
exit 0;
|
|
|
|
|
|
sub
|
|
lookup
|
|
{
|
|
my ($name, $srv) = @_;
|
|
|
|
$res = `$DIG \@$srv $name +short 2>/dev/null`;
|
|
chop $res;
|
|
if ($res =~ /^\d+\.\d+\.\d+\.\d+$/) {
|
|
return $res;
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
|