Mahlzeit,
wie von schmidt24 schon angekündigt habe ich das tcpping-Skript ein wenig erweitert, da ich finde, das Timeouts nicht markant genug dargestellt wurden, habe ich diese in rot und erfolgreiche Pings durch ein grünes “ok” markiert.
Zudem ist es nun möglich, anstatt des Ports den Namen aus der /etc/services anzugeben (falls man z.B. mal den Port von IMAPS nicht im Kopf hat).
Beispiel: “tcpping.sh 127.0.0.1 imaps” ist equivalent zu “tcpping.sh l27.0.0.1 993″.
Der Standardport ist auch nun 22, also SSH da dieser ja meist auf Linux/UN*X Maschinen auf ist.
Man kann also einfach “tcpping.sh 127.0.0.1″ nutzen und es wird automatisch auf SSH geprüft.
Die Namens- und Portauflösung sind nur eine nette Spielerei aber für den ein oder anderen Skripter vielleicht ganz nützlich.
Hier ist es:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #!/bin/sh i=0 if [ $# = 1 ]; then PORT=22 else PORT=$2 fi if [ $# -eq 0 ]; then echo "Usage: $0 <HOST> [PORT]" echo " PORT can be numeric or name from /etc/services" echo " Default port is 22 (ssh)" exit 1 fi if [ $(echo "$1." | grep -E "([0-9]{1,3}\.){4}") ]; then HOST=$(host -v $1 | grep -1 -m1 -A1 ";; ANSWER SECTION" | awk '{print $5}' | awk NF | sed 's/\.$//') IP=$1 else IP=$(host -v $1 | grep -i -m 1 -A1 ";; ANSWER SECTION" | awk '{print $5}' | awk NF | sed 's/\.$//') HOST=$1 fi case $PORT in *[!0-9]* ) PORT=$(cat /etc/services | grep -i -m 1 $PORT | awk '{print $2}' | sed "s/\/tcp//g") esac PROTO=$(cat /etc/services | grep -i -m 1 $PORT | awk '{print $1}' | sed "s/\/tcp//g") while (true) do TIME=`date +%s%N| cut -c -13` SCAN=`nmap -P0 -p$PORT $1` if [ $? != 0 ]; then exit 1; fi echo $SCAN | grep -q open if [ $? != 0 ]; then echo "tcp ping from $HOST ($IP) port $PORT ($PROTO): tcp_seq=$i time=$(($((`date +%s%N| cut -c -13`-$TIME))))ms\t[\033[1;31mtimeout\033[0m]" else echo "tcp ping from $HOST ($IP) port $PORT ($PROTO): tcp_seq=$i time=$(($((`date +%s%N| cut -c -13`-$TIME))))ms\t[\033[1;32mok\033[0m]" fi sleep 1 i=$((i+1)) done |
viel spaß und erfolg damit.
Known Bugs:
- Wenn als Host ein Nmap Parameter übergeben wird wie z.B: “–help” ist der Ping “[ok]“, da Nmap die Hilfe ausgibt, “grep -q open” ist in dem Fall Wahr, da auch in der Help ein “open” vorkommt.
- Die Domainauflösung zur IP funktioniert zurzeit nicht bei einem Alias, da dann als erstes Ergebnis von “host” der CNAME zurückgeliefert wird.
Wenn jemand eine Idee hat, wie das zu lösen ist (bevor ich eine habe oder das ganze Ding in Perl implementiere) wäre ich dankbar.
bis neulich
j-zero
