Languages

Checking a domain name expiration date: check_domain

We woudn't like our domain to expire, and having our domain bought by an ciberspeculator (also bad-known as "cibersquatters"), asking us 1.000$ for it, when it's actually worth 20 (I've lived that situation with a personal domain name of myself).

It's not a big deal, after all registrars always warn users in advance, giving you every chance for renewal (that's their interest). But... what if the email address you configured that day, is not active any more? What if the new boss secretary mistake it with spam, and ignore it (real case)? What if the company is so big that no one knows who is reading that email address?

To make sure we are up-to-date with our domains, I've created a nagios plugin, named "check_domain". It's simple (if you look at the code, you'll see there's more lines parsing parameters than doing things ), but it covers our needs, and warns you when the domain name is near to expire.

In the full article ("read more") you can see the code, and a downloadable file.

check_domain

#!/bin/bash

PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`

. $PROGPATH/utils.sh

# Default values (days):
critical=7
warning=30

# Parse arguments
args=`getopt -o hd:w:c:P: --long help,domain:,warning:,critical:,path: -u -n $0 -- "$@"`
[ $? != 0 ] && echo "$0: Could not parse arguments" && echo "Usage: $0 -h | -d <domain> [-c <critical>] [-w <warning>]" && exit
set -- $args

while true ; do
        case "$1" in
                -c|--critical) critical=$2;shift 2;;
                -w|--warning)  warning=$2;shift 2;;
            -d|--domain)   domain=$2;shift 2;;
            -P|--path)     whoispath=$2;shift 2;;
            -h|--help)     echo "check_domain - v1.01"
                               echo "Copyright (c) 2005 Tom�s N��ez Lirola <tnunez@criptos.com> under GPL License"
                               echo "This plugin checks the expiration date of a domain name."
                               echo ""
                               echo "Usage: $0 -h | -d <domain> [-c <critical>] [-w <warning>]"
                               echo "NOTE: -d must be specified"
                               echo ""
                               echo "Options:"
                               echo "-h"
                               echo "     Print detailed help"
                               echo "-d"
                               echo "     Domain name to check"
                               echo "-w"
                               echo "     Response time to result in warning status (days)"
                               echo "-c"
                               echo "     Response time to result in critical status (days)"
                               echo ""
                               echo "This plugin will use whois service to get the expiration date for the domain name. "
                               echo "Example:"
                               echo "     $0 -d domain.tld -w 30 -c 10"
                               echo ""
                               exit;;
             --) shift; break;;
                *)  echo "Internal error!" ; exit 1 ;;
        esac
done

[ -z $domain ] && echo "UNKNOWN - There is no domain name to check" && exit $STATE_UNKNOWN

# Looking for whois binary
if [ -z $whoispath ]; then
      type whois &> /dev/null || error="yes"
      [ ! -z $error ] && echo "UNKNOWN - Unable to find whois binary in your path. Is it installed? Please specify path." && exit $STATE_UNKNOWN
else
      [ ! -x "$whoispath/whois" ] && echo "UNKNOWN - Unable to find whois binary, you specified an incorrect path" && exit $STATE_UNKNOWN
fi

# Calculate days until expiration
expiration=`whois $domain |grep "Expiration Date:"| awk -F"Date:" '{print $2}'|cut -f 1`
expseconds=`date +%s --date="$expiration"`
nowseconds=`date +%s`
((diffseconds=expseconds-nowseconds))
expdays=$((diffseconds/86400))

# Trigger alarms if applicable
[ -z "$expiration" ] && echo "UNKNOWN - Domain doesn't exist or no WHOIS server available." && exit $STATE_UNKNOWN
[ $expdays -lt 0 ] && echo "CRITICAL - Domain expired on $expiration" && exit $STATE_CRITICAL
[ $expdays -lt $critical ] && echo "CRITICAL - Domain will expire in $expdays days" && exit $STATE_CRITICAL
[ $expdays -lt $warning ]&& echo "WARNING - Domain will expire in $expdays days" && exit $STATE_WARNING

# No alarms? Ok, everything is right.
echo "OK - Domain will expire in $expdays days"
exit $STATE_OK

Comments

updated code

hi

i've kept the code updated for my uses, you can grab it from here:

http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/nagios-plugin-check...

--
Elan Ruusamäe (glen@pld-linux.org)

Pretty cool. I never knew

Pretty cool. I never knew there was a whois command in Linux.