Für wiederkehrendes Prüfen, ob Netzwerkverbindungen erreichbar sind, gibt es hier ein kleines Shellscript:
root@hostname:~$ cat checkconnection.sh
#!/bin/bash
#title :checkconnection.sh
#description :checks network connectivity to specified host:port tupples.
#author :maximilian.riess@riess-group.de
#date :20160201
#version :1.1
#usage :bash ./checkconnection.sh
#notes :needs a config file named remotes.csv which contain hosts.
#notes :v1.1: without port information, ping is used to determine
#notes : connection is working. works also with port=0
#bash_version :4.1.5(1)-release
#==============================================================================
# example remotes.csv:
# # check connections to defined hosts
# # format is:
# # hostname:port:<opt infotext>
#
# 127.0.0.1:22:lokales ssh
# 127.0.0.1:0:ping test
# 127.0.0.1::
# 127.0.0.1
#==============================================================================
filename="$1"
if [ "x$filename" == "x" ] ;
then
filename="remotes.csv"
fi
okcnt=0
facnt=0
function check_host_ping {
host=$1
info=$2
infostr="ping connection to ${host} "
filler=".................................................................."
if ping -c 1 -W 1 "$host" > /dev/null; then
printf "%s %s [OK] %s\n" "${infostr}" "${filler:${#infostr}}" "$info"
okcnt=$(($okcnt+1))
else
printf "%s %s [failed] %s\n" "${infostr}" "${filler:${#infostr}}" "$info"
facnt=$(($facnt+1))
fi
}
function check_host_port {
host=$1
port=$2
info=$3
if [ "${info}" == "${port}" ] ; then
info=""
fi
if [ "${port}" == "" ] || [ "${port}" == "${host}" ] || [ "${port}" == "0" ] ; then
check_host_ping $host $info
return
fi
infostr="tcp connection to ${host} port ${port} "
filler=".................................................................."
if nc $host $port -w 3 -z
then
printf "%s %s [OK] %s\n" "$infostr" "${filler:${#infostr}}" "$info"
okcnt=$(($okcnt+1))
else
errorcode=$?
printf "%s %s [failed] %s\n" "$infostr" "${filler:${#infostr}}" "$info"
facnt=$(($facnt+1))
fi
}
function runtest {
while read -r line
do
strhost=$(echo $line | cut -f1 -d: )
strport=$(echo $line | cut -f2 -d: )
strinfo=$(echo $line | cut -f3 -d: )
if [ "x$strhost" == "x" ] || [ "${strhost:0:1}" == "#" ]
then
continue;
fi
check_host_port $strhost $strport "$strinfo"
done < "$filename"
}
echo "check connectivity run at $(date)"
echo "================================================================================"
runtest
echo "================================================================================"
echo " suceeded: ${okcnt} failed: ${facnt}"
echo "test completed."
Um die zu testenden Hosts zu konfigurieren, die Hosts mit der entsprechenden Portnummer in der Datei remotes.csv ablegen:
root@hostname:~$ cat remotes.csv # # check connections to defined hosts # format is: # hostname:port:<opt infotext> # # 127.0.0.1:22:lokales ssh 192.168.178.1:8080:proxy 192.168.178.1:22:ssh 192.168.178.2:22:offlinehost 192.168.178.1:0:nur ping test
Das Ergebnis sieht dann exemplarisch so aus:
root@hostname:~$ ./checkconnection.sh check connectivity run at Tue Nov 10 13:15:00 CET 2015 ================================================================================ tcp connection to 127.0.0.1 port 22 .............................. [OK] lokales ssh tcp connection to 192.168.178.1 port 8080 ........................ [OK] proxy tcp connection to 192.168.178.1 port 22 .......................... [OK] ssh tcp connection to 192.168.178.5 port 22 .......................... [failed] offlinehost ping connection to 192.168.178.1 ................................. [OK] nur ping test ================================================================================ suceeded: 4 failed: 1 test completed.
Das Script wurde am 01.02.2016 angepasst um auch Verbindungen über Ping prüfen zu können.
