nagios/check_dns
Moritz Rudert (helios) 68840f51ec initial commit
2012-02-12 10:23:57 +01:00

83 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
declare -i STATE_OK=0
declare -i STATE_WARNING=1
declare -i STATE_CRITICAL=2
declare -i STATE_UNKNOWN=3
hostopts="-t a"
usage() {
echo "$0 -H [hostname to lookup]"
echo
echo "optional:"
echo " -a [expected IP address]"
echo " -s [DNS server to use]"
echo " -6 to lookup AAAA record"
echo " -4 to lookup A record"
echo " -h to show this"
}
while getopts "h64H:s:a:" OPTION
do
case $OPTION in
h)
usage
exit 0
;;
4)
hostopts="-t a"
;;
6)
hostopts="-t aaaa"
;;
H)
host=$OPTARG
;;
a)
expected=$OPTARG
;;
s)
server=$OPTARG
;;
esac
done
if [ -n "$host" ]; then
lookup=$(host $hostopts $host $server 2>&1)
if [ $? -eq 0 ]; then
error=""
ip=$(echo "$lookup" | tail -n1 | grep -v "has no" | sed 's/ IPv6//' | awk '{ print $4 }')
else
if echo "$lookup" | grep -q "NXDOMAIN"; then
error="Domain $host was not found by the server"
elif echo "$lookup" | grep -q "couldn't get address for "; then
error="$server is an invalid hostname/address"
else
error="an error occured"
fi
fi
if [ -n "$expected" ]; then
if [ "$expected" == "$ip" ]; then
echo "[OK] - $host returns $ip"
exit ${STATE_OK}
else
echo "[CRITICAL] - expected $expected but got $ip"
exit ${STATE_CRITICAL}
fi
fi
if [ -n "$ip" ] && [ -z "$error" ]; then
echo "[OK] - $host returns $ip"
exit ${STATE_OK}
else
echo "[CRITICAL] - $error"
exit ${STATE_CRITICAL}
fi
else
usage
exit ${STATE_CRITICAL}
fi