diff options
Diffstat (limited to 'wrappers/traceroute-nanog')
-rwxr-xr-x | wrappers/traceroute-nanog | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/wrappers/traceroute-nanog b/wrappers/traceroute-nanog new file mode 100755 index 0000000..0145464 --- /dev/null +++ b/wrappers/traceroute-nanog @@ -0,0 +1,76 @@ +#!/bin/sh +# +# Copyright (c) 2007 Dmitry K. Butskoy +# <dmitry@butskoy.name> +# License: GPL v2 or any later +# +# See COPYING for the status of this software. +# + +# +# Shell wrapper providing traceroute-nanog(8) command line interface. +# +# The original implementation of traceroute-nanog(8) can be obtained +# from ftp://ftp.login.com/pub/software/traceroute/ +# + + +prgname=$0 +opts="" +spray="" + + +usage () { + echo "Usage: $prgname [-adnruvAMOPQU$] [-w wait] [-S start_ttl] + [-m max_ttl] [-p port] [-q nqueries] [-g gateway] [-t tos] + [-s src_addr] [-I proto] host [data_size]" >&2 +} + +warning () { + echo "$prgname: Option '$1' is not implemented in this wrapper" >&2 +} + + +PARSED=`getopt -- 'adnruvAMOPQU$w:S:m:p:q:g:t:s:I:f:T:' "$@"` +[ $? != 0 ] && { + usage + exit 2 +} + +eval set -- "$PARSED" + +while [ $# -gt 0 ] +do + case "$1" in + -[Adrn]) opts="$opts $1"; shift ;; + -[gmpqstw]) opts="$opts $1 $2"; shift 2 ;; + -I) case "$2" in + icmp) opts="$opts -I" ;; + tcp) opts="$opts -T" ;; + udp) ;; + udplite) opts="$opts -UL" ;; + *) opts="$opts -P $2" ;; + esac + shift 2 ;; + -S) opts="$opts -f $2"; shift 2 ;; + -P) spray=1; shift ;; + -f) opts="$opts --sport=$2"; shift 2 ;; + -u) ;; + -$) opts="-f 64 -m 64 -q 1"; shift ;; + -M) opts="$opts --mtu"; shift ;; + -[aUOvQ]) warning $1; shift ;; + -T) warning $1; shift 2 ;; + --) shift; break ;; + *) echo "$prgname: Internal parsing error" >&2; exit 2 ;; + esac +done + +[ $# -eq 0 ] && { + usage + exit 2 +} + +[ -z "$spray" ] && opts="$opts -N 1" + +exec traceroute $opts $1 $2 + |