Created
January 9, 2017 13:37
-
-
Save fgggid/4e5120f217ebbdb455a5128b89ef6ee9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# tcpping: test response times using TCP SYN packets | |
# URL: http://www.vdberg.org/~richard/tcpping.html | |
# | |
# uses tcptraceroute from http://michael.toren.net/code/tcptraceroute/ | |
# | |
# (c) 2002-2005 Richard van den Berg <[email protected]> under the GPL | |
# http://www.gnu.org/copyleft/gpl.html | |
# | |
# 2002/12/20 v1.0 initial version | |
# 2003/01/25 v1.1 added -c and -r options | |
# now accepting all other tcptraceroute options | |
# 2003/01/30 v1.2 removed double quotes around backquotes | |
# 2003/03/25 v1.3 added -x option, courtesy of Alvin Austin <[email protected]> | |
# 2005/03/31 v1.4 added -C option, courtesy of Norman Rasmussen <[email protected]> | |
# 2007/01/11 v1.5 catch bad destination addresses | |
# 2007/01/19 v1.6 catch non-root tcptraceroute | |
# 2008/02/10 v1.7 make -C work when reverse lookup fails, courtesy of Fabrice Le Dorze <[email protected]> | |
ver="v1.7" | |
format="%Y%m%d%H%M%S" | |
d="no" | |
c="no" | |
C="no" | |
ttl=255 | |
seq=0 | |
q=1 | |
r=1 | |
w=3 | |
topts="" | |
usage () { | |
name=`basename $0` | |
echo "tcpping $ver Richard van den Berg <[email protected]>" | |
echo | |
echo "Usage: $name [-d] [-c] [-C] [-w sec] [-q num] [-x count] ipaddress [port]" | |
echo | |
echo " -d print timestamp before every result" | |
echo " -c print a columned result line" | |
echo " -C print in the same format as fping's -C option" | |
echo " -w wait time in seconds (defaults to 3)" | |
echo " -r repeat every n seconds (defaults to 1)" | |
echo " -x repeat n times (defaults to unlimited)" | |
echo | |
echo "See also: man tcptraceroute" | |
echo | |
} | |
_checksite() { | |
ttr=`tcptraceroute -f ${ttl} -m ${ttl} -q ${q} -w ${w} $* 2>&1` | |
if echo "${ttr}" | egrep -i "(bad destination|got roo)" >/dev/null 2>&1; then | |
echo "${ttr}" | |
exit | |
fi | |
} | |
_testsite() { | |
myseq="${1}" | |
shift | |
[ "${c}" = "yes" ] && nows=`date +${format}` | |
[ "${d}" = "yes" ] && nowd=`date` | |
ttr=`tcptraceroute -f ${ttl} -m ${ttl} -q ${q} -w ${w} $* 2>/dev/null` | |
# debug | |
#/bin/echo -e \\ndebug start: | |
#echo \$ttr: "$ttr" | |
# debug end | |
host=`echo "$ttr" | awk '{print $2 " " $3}'` | |
rtt=`echo "$ttr" | sed 's/.*] //' | awk '{print $1 $2}' | tr -d "ms"` | |
not=`echo "$rtt" | tr -d ".0123456789"` | |
# debug | |
#echo \$host: "$host" | |
#echo \$rtt: "$rtt" | |
#echo \$not: "$not" | |
#echo debug end. | |
# debug end | |
[ "${d}" = "yes" ] && echo "$nowd" | |
if [ "${c}" = "yes" ]; then | |
if [ "x${rtt}" != "x" -a "x${not}" = "x" ]; then | |
echo "$myseq $nows $rtt $host" | |
else | |
echo "$myseq $nows $max $host" | |
fi | |
elif [ "${C}" = "yes" ]; then | |
if [ "$myseq" = "0" ]; then | |
echo -n "$1 :" | |
fi | |
if [ "x${rtt}" != "x" -a "x${not}" = "x" ]; then | |
echo -n " $rtt" | |
else | |
echo -n " -" | |
fi | |
if [ "$x" = "1" ]; then | |
echo | |
fi | |
else | |
echo "${ttr}" | sed -e "s/^.*\*.*$/seq $myseq: no response (timeout)/" -e "s/^$ttl /seq $myseq: tcp response from/" | |
fi | |
# echo "${ttr}" | |
} | |
while getopts dhq:w:cr:nNFSAEi:f:l:m:p:s:x:C opt ; do | |
case "$opt" in | |
d|c|C) eval $opt="yes" ;; | |
q|w|r|x) eval $opt="$OPTARG" ;; | |
n|N|F|S|A|E) topt="$topt -$opt" ;; | |
i|l|p|s) topt="$topt -$opt $OPTARG" ;; | |
f|m) ttl="$OPTARG" ;; | |
?) usage; exit ;; | |
esac | |
done | |
shift `expr $OPTIND - 1` | |
if [ "x$1" = "x" ]; then | |
usage | |
exit | |
fi | |
max=`echo "${w} * 1000" | bc` | |
if [ `date +%s` != "%s" ]; then | |
format="%s" | |
fi | |
_checksite ${topt} $* | |
if [ "$x" = "" ]; then | |
while [ 1 ] ; do | |
_testsite ${seq} ${topt} $* & | |
pid=$! | |
if [ "${C}" = "yes" ]; then | |
wait $pid | |
fi | |
seq=`expr $seq + 1` | |
sleep ${r} | |
done | |
else | |
while [ "$x" -gt 0 ] ; do | |
_testsite ${seq} ${topt} $* & | |
pid=$! | |
if [ "${C}" = "yes" ]; then | |
wait $pid | |
fi | |
seq=`expr $seq + 1` | |
x=`expr $x - 1` | |
if [ "$x" -gt 0 ]; then | |
sleep ${r} | |
fi | |
done | |
fi | |
exit | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment