From 7ca9c2dfcc63fdec9e2ce3a274da4b53b2dc3e6b Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Tue, 14 Apr 2015 12:49:09 +0200 Subject: Added ttrace code --- ttrace | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 ttrace diff --git a/ttrace b/ttrace new file mode 100755 index 0000000..30b78e3 --- /dev/null +++ b/ttrace @@ -0,0 +1,81 @@ +#!/usr/bin/env bash + +host=$1 + +get_host_info() { + reply_msg=$1 + host_info=$( + echo "$reply_msg" | + grep -o -e "^PING .*$" | + cut -d ' ' -f 2,3 + ) + echo $host_info +} + +get_hop_info() { + reply_msg=$1 + hop_info=$( + echo "$reply_msg" | + grep -o -e "^From .*$" | + tail -n 1 | + cut -d ' ' -f 2,3 | + sed 's/^\([0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}\).*$/\1\ (\1)/' + ) + if [ -n "$hop_info" ]; then + echo "$hop_info" + else + echo "? (?)" + fi +} + +get_ip() { + info=$1 + echo "$info" | + sed 's/^.*\ (\(.*\))$/\1/' +} + +get_hostname() { + info=$1 + echo "$info" | + sed 's/^\(.*\)\ (.*)$/\1/' +} + +get_avg_ping() { + reply_msg=$1 + avg_ping=$( + echo "$reply_msg" | + grep 'rtt' | + cut -d '/' -f 5 + ) + if [ -z "$avg_ping" ]; then + avg_ping="???" + fi + echo "$avg_ping" +} + +for (( hop = 0; hop < 64; hop++ )); do + reply=`ping -c 1 -t $hop $host` + + if [ $? -eq 1 ]; then + hop_info=$(get_hop_info "$reply") + hop_ip=$(get_ip "$hop_info") + + if [ "$hop_ip" = "?" ]; then + avg_ping="?" + else + hop_reply=`ping -c 1 -q $hop_ip` + avg_ping=$(get_avg_ping "$hop_reply") + fi + + echo "$hop - $hop_info - $avg_ping ms" + else + host_info=$(get_host_info "$reply") + host_ip=$(get_ip "$host_info") + host_reply=`ping -c 1 $host_ip` + avg_ping=$(get_avg_ping "$host_reply") + echo "$hop - $host_info - $avg_ping ms" + break + fi +done + +# vim: set ts=8 sw=8 tw=0 noet : -- cgit v1.2.3