#!/bin/sh verbose=0 if [[ "$1" = "-v" ]] then verbose=1 shift fi file="" if [[ "$1" = "-f" ]] then file="$2" shift 2 fi updt=0 if [[ "$1" = "-u" ]] then updt=1 shift ntp_server=$1 else ntp_server=$1 files=$(find /var/log/ntpstats/ntp_pool/$ntp_server -mmin -15 -name "monlist*") if [[ "$files" == "" ]] then updt=1 else use_file=$( ls -tr $files | tail -1 ) fi fi if [[ $# -ne 1 ]] then echo "Usage: `basename $0` IP-address" 1>&2 exit 1 fi tmp=`tempfile -m 0600` ntp_server_slash16=`echo $ntp_server | sed "s/\.[0-9][0-9]*\.[0-9][0-9]*$//"` if [[ $updt -eq 1 ]] then /usr/local/sbin/xntpdc -q -nc monlist $ntp_server \ | tail +3 \ | grep -v -e "^$ntp_server_slash16" \ -e "^127\.0\.0\.1" \ -e "^10\." \ -e "^192\.168\." \ >$tmp else cat $use_file >$tmp fi [[ -n "$file" ]] && cat <$tmp >$file cd /var/log/ntpstats/ntp_pool/ || exit 1 if [[ $updt -eq 1 ]] then mkdir -p $ntp_server cd $ntp_server || exit 1 cat <$tmp >monlist_$(date +"%y%m%dT%H%M%S") fi files=$(find . -mmin -120 -name "monlist_*") clients=$( cat $files | sed 's/ .*//' | sort -n | uniq -c | grep -v "^ *1 " ) nclients=$( echo "$clients" | wc -l ) echo "ntp pool clients active on $ntp_server:" $nclients if [[ $verbose -eq 1 ]] then echo echo "Subnets with many clients:" echo "$clients" | sed "s/^ *[0-9][0-9]* \([0-9.]*\)\.[0-9][0-9]*$/\1/" \ | sort | uniq -c | sort -nr | head -5 echo echo "Clients with rapid updates:" cat $tmp | while read ip port localip count m ver code avgint lstint do if [[ $count -gt 1000 && $avgint -lt 64 ]] then printf "%-15s %6d %4d\n" $ip $count $avgint fi done | sort -k 2nr | head -10 fi rm $tmp