rendered paste body#! /bin/bash
set -o posix
set -o nounset
shopt -s extglob # allow extended pattern matching operators
# Executables
# ~~~~~~~~~~~
# So can change to suit OS variant
nslookup='/usr/bin/nslookup'
sort='/usr/bin/sort'
#--------------------------
# Name: test_servers
# Purpose: tests response times of list of servers
# $1 - list of servers
# $2 - results heading
#--------------------------
function test_servers {
local oIFS out secs server
out=''
for server in $1
do
echo -n '.'
# DEVELOPMENT NOTE: -timeout=5 in command below does not seem to be effective; default 15 timeout operates
secs="$(/usr/bin/time -f '%e' $nslookup '-timeout=5' 'www.google.com' $server 2>&1 1>/dev/null)"
out="$out
$secs $server"
done
out="$(echo "$out" | $sort --general-numeric-sort)"
echo
echo "$2"
oIFS="$IFS"
IFS='
'
for buf in $out
do
IFS="$oIFS"
IP_address="${buf#* }"
response_time="${buf% *}"
if [[ ${response_time%.*} -lt 5 ]]; then
response_time="$response_time seconds"
else
response_time='Timed out'
fi
printf '%16s %s\n' "$IP_address" "$response_time"
done
return 0
} # end of function test_servers
BSNL_servers='
61.1.96.69
61.1.96.71
61.1.96.72
218.248.240.23
218.248.240.135
218.248.240.180
218.248.240.181
218.248.240.208
218.248.255.139
218.248.255.145
218.248.255.146
'
#echo 'DEBUG: setting small BSNL DNS server list'
#BSNL_servers='
#218.248.240.23
#218.248.240.208
#'
OpenDNS_servers='
208.67.222.222
208.67.220.220
'
Level3_servers='
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
'
test_servers "$BSNL_servers" 'Known BSNL DNS servers with query response times'
test_servers "$OpenDNS_servers" 'Known OpenDNS servers with query response times'
test_servers "$Level3_servers" 'Known Level3 servers with query response times'
echo '
Here'"'"'s the current /etc/resolv.conf:'
cat '/etc/resolv.conf'
\exit 0