83 lines
1.6 KiB
Bash
Executable File
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
|