184996Srobert#!/bin/sh 
284996Srobert#
384996Srobert# ntpgroper host ...
484996Srobert#
584996Srobert# This script checks each hostname given as an argument to see if
684996Srobert# it is running NTP.  It reports one of the following messages (assume
784996Srobert# the host is named "dumbo.hp.com":
884996Srobert#
9124139Sobrien#   dumbo.hp.com not registered in DNS
10124139Sobrien#   dumbo.hp.com not responding to ping
11124139Sobrien#   dumbo.hp.com refused ntpq connection
12124139Sobrien#   dumbo.hp.com not responding to NTP
1384996Srobert#   dumbo.hp.com answers NTP version 2, stratum: 3, ref: telford.nsa.hp.com
1484996Srobert#   dumbo.hp.com answers NTP version 3, stratum: 3, ref: telford.nsa.hp.com
1584996Srobert#
1684996Srobert# It ain't pretty, but it is kinda useful.
1784996Srobert#
1884996Srobert# Walter Underwood, 11 Feb 1993, wunder@hpl.hp.com
1984996Srobert#
2084996Srobert# converted to /bin/sh from /bin/ksh by scott@ee.udel.edu 24 Mar 1993
2184996Srobert
2291139SjakePATH="/usr/local/etc:$PATH" export PATH
2384996Srobert
2484996Srobertverbose=1
2584996Srobertlogfile=/tmp/cntp-log$$
26102219Srobertntpqlog=/tmp/cntp-ntpq$$
2784996Srobert
2884996Srobert# I wrap the whole thing in parens so that it is possible to redirect
2984996Srobert# all the output somewhere, if desired.
3091139Sjake(
3191139Sjakefor host in $*
3284996Srobertdo
3391110Sjake    # echo "Trying $host."
3491110Sjake
3584996Srobert    gethost $host > /dev/null 2>&1
3691139Sjake    if [ $? -ne 0 ]
3784996Srobert    then
3884996Srobert        echo "$host not registered in DNS"
3984996Srobert        continue
4085719Sjake    fi
4184996Srobert
4284996Srobert    ping $host 64 1 > /dev/null 2>&1 
4384996Srobert    if [ $? -ne 0 ]
4484996Srobert    then
4584996Srobert        echo "$host not responding to ping"
4684996Srobert	continue
4784996Srobert    fi
4884996Srobert    
4984996Srobert    # Attempt to contact with version 3 ntp, then try version 2.
5084996Srobert    for version in 3 2
5184996Srobert    do
5284996Srobert
5385719Sjake        ntpq -c "ntpversion $version" -p $host > $ntpqlog 2>&1
5485719Sjake
5585719Sjake        if fgrep -s 'Connection refused' $ntpqlog
5693678Stmm        then
5793678Stmm            echo "$host refused ntpq connection"
5884996Srobert            break
5984996Srobert        fi
6085719Sjake
61114386Speter        responding=1
6284996Srobert        fgrep -s 'timed out, nothing received' $ntpqlog > /dev/null && responding=0
6384996Srobert
6484996Srobert        if   [ $responding -eq 1 ]
65101287Sjake        then
6684996Srobert	    ntpq -c "ntpversion $version" -c rl $host > $ntpqlog
6797445Sjake
6897445Sjake            # First we extract the reference ID (usually a host or a clock)
6991139Sjake            synchost=`fgrep "refid=" $ntpqlog`
7091139Sjake            #synchost=${synchost##*refid=} # strip off the beginning of the line
7191139Sjake            #synchost=${synchost%%,*}      # strip off the end  
7291139Sjake	    synchost=`expr "$synchost" : '.*refid=\([^,]*\),.*'`
7391139Sjake
7491139Sjake            # Next, we get the stratum
7584996Srobert            stratum=`fgrep "stratum=" $ntpqlog`
7684996Srobert            #stratum=${stratum##*stratum=}
7784996Srobert            #stratum=${stratum%%,*}
7884996Srobert	    stratum=`expr "$stratum" : '.*stratum=\([^,]*\),.*'`
7984996Srobert
8084996Srobert	    echo "$host answers NTP version $version, stratum: $stratum, ref: $synchost"
8184996Srobert            break;
8284996Srobert        fi
8384996Srobert
8484996Srobert	if [ $version -eq 2 -a $responding -eq 0 ]
8584996Srobert        then
8685719Sjake            echo "$host not responding to NTP"
8784996Srobert        fi
8885719Sjake    done
8985719Sjakedone
9085719Sjake)
9185719Sjake# ) >> $logfile
9284996Srobert
9384996Srobertif [ -f $ntpqlog ]; then
9484996Srobert    rm $ntpqlog
9584996Srobertfi
9684996Srobert