summaryrefslogtreecommitdiffstats
path: root/contrib/traceroute
diff options
context:
space:
mode:
authorarchie <archie@FreeBSD.org>1999-05-12 17:28:31 +0000
committerarchie <archie@FreeBSD.org>1999-05-12 17:28:31 +0000
commit8520baa2eadb5a08c43bc6c3c33ee6ca07361648 (patch)
tree80b6ac1245ec5f874447720fa5ae39b84533529c /contrib/traceroute
parenta3fe4dbbe80d5cb26a8d66788755a9fba80428d7 (diff)
downloadFreeBSD-src-8520baa2eadb5a08c43bc6c3c33ee6ca07361648.zip
FreeBSD-src-8520baa2eadb5a08c43bc6c3c33ee6ca07361648.tar.gz
Add a min TTL flag to go along with the max TTL flag. That is, this flag
allows you to start tracing at a hop number other than 1. Submitted by: Stefan `Sec` Zehl <sec@42.org>
Diffstat (limited to 'contrib/traceroute')
-rw-r--r--contrib/traceroute/traceroute.830
-rw-r--r--contrib/traceroute/traceroute.c34
2 files changed, 44 insertions, 20 deletions
diff --git a/contrib/traceroute/traceroute.8 b/contrib/traceroute/traceroute.8
index 26e11b6..16fba5c 100644
--- a/contrib/traceroute/traceroute.8
+++ b/contrib/traceroute/traceroute.8
@@ -13,14 +13,14 @@
.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.\"
-.\" $Header: /home/ncvs/src/contrib/traceroute/traceroute.8,v 1.3 1998/01/09 18:46:53 steve Exp $
+.\" $Header: /home/ncvs/src/contrib/traceroute/traceroute.8,v 1.4 1999/05/06 03:23:23 archie Exp $
.\"
.TH TRACEROUTE 8 "27 September 1996"
.UC 6
.SH NAME
traceroute \- print the route packets take to network host
.SH SYNOPSIS
-.. while ((op = getopt(argc, argv, "dnrvg:m:p:q:s:t:w:")) != EOF)
+.. while ((op = getopt(argc, argv, "dnrvg:M:m:P:p:q:s:t:w:")) != EOF)
.na
.B traceroute
[
@@ -29,35 +29,39 @@ traceroute \- print the route packets take to network host
.B \-g
.I gw_host
] [
-.B \-m
-max_ttl
-.I ]
+.B \-M
+.I min_ttl
+]
.br
.ti +8
[
+.B \-m
+.I max_ttl
+] [
.B \-P
.I proto
] [
.B \-p
.I port
-] [
-.B \-q
-.I nqueries
]
.br
.ti +8
[
+.B \-q
+.I nqueries
+] [
.B \-s
.I src_addr
] [
.B \-t
.I tos
-] [
-.B \-w
-.I waittime
]
.br
.ti +8
+[
+.B \-w
+.I waittime
+]
.I host
[
.I packetlen
@@ -86,6 +90,10 @@ Print a summary of how many probes were not answered for each hop.
.B \-g
Specify a loose source route gateway (8 maximum).
.TP
+.B \-M
+Set the initial time-to-live value used in outgoing probe packets.
+The default is 1, i.e., start with the first hop.
+.TP
.B \-m
Set the max time-to-live (max number of hops) used in outgoing probe
packets. The default is 30 hops (the same default used for TCP
diff --git a/contrib/traceroute/traceroute.c b/contrib/traceroute/traceroute.c
index 2a6dd51..641577c 100644
--- a/contrib/traceroute/traceroute.c
+++ b/contrib/traceroute/traceroute.c
@@ -24,7 +24,7 @@ static const char copyright[] =
"@(#) Copyright (c) 1988, 1989, 1991, 1994, 1995, 1996\n\
The Regents of the University of California. All rights reserved.\n";
static const char rcsid[] =
- "@(#)$Header: /home/ncvs/src/contrib/traceroute/traceroute.c,v 1.8 1999/02/16 14:19:50 des Exp $ (LBL)";
+ "@(#)$Header: /home/ncvs/src/contrib/traceroute/traceroute.c,v 1.9 1999/05/06 03:23:24 archie Exp $ (LBL)";
#endif
/*
@@ -298,6 +298,7 @@ char *source;
char *hostname;
int nprobes = 3;
+int min_ttl = 1;
int max_ttl = 30;
u_short ident;
u_short port; /* protocol specific base "port" */
@@ -412,7 +413,7 @@ main(int argc, char **argv)
prog = argv[0];
opterr = 0;
- while ((op = getopt(argc, argv, "Sdnrvg:m:P:p:q:s:t:w:")) != EOF)
+ while ((op = getopt(argc, argv, "Sdnrvg:M:m:P:p:q:s:t:w:")) != EOF)
switch (op) {
case 'S':
@@ -433,11 +434,20 @@ main(int argc, char **argv)
++lsrr;
break;
+ case 'M':
+ min_ttl = atoi(optarg);
+ if (min_ttl < 1 || min_ttl > 0xff) {
+ Fprintf(stderr, "%s: invalid ttl value %s\n",
+ prog, optarg);
+ exit(1);
+ }
+ break;
+
case 'm':
max_ttl = atoi(optarg);
- if (max_ttl <= 1) {
- Fprintf(stderr, "%s: max ttl must be > 1\n",
- prog);
+ if (max_ttl < 1 || max_ttl > 0xff) {
+ Fprintf(stderr, "%s: invalid ttl value %s\n",
+ prog, optarg);
exit(1);
}
break;
@@ -532,6 +542,12 @@ main(int argc, char **argv)
usage();
}
+ /* Check min vs. max TTL */
+ if (min_ttl > max_ttl) {
+ Fprintf(stderr, "%s: min ttl must be <= max ttl\n", prog);
+ exit(1);
+ }
+
/* Process destination and optional packet size */
switch (argc - optind) {
@@ -705,7 +721,7 @@ main(int argc, char **argv)
Fprintf(stderr, ", %d hops max, %d byte packets\n", max_ttl, packlen);
(void)fflush(stderr);
- for (ttl = 1; ttl <= max_ttl; ++ttl) {
+ for (ttl = min_ttl; ttl <= max_ttl; ++ttl) {
u_int32_t lastaddr = 0;
int got_there = 0;
int unreachable = 0;
@@ -1205,8 +1221,8 @@ usage(void)
extern char version[];
Fprintf(stderr, "Version %s\n", version);
- Fprintf(stderr, "Usage: %s [-dnrv] [-w wait] [-m max_ttl] [-p port#] \
-[-q nqueries]\n\t [-t tos] [-s src_addr] [-g gateway] host [data_size]\n",
- prog);
+ Fprintf(stderr, "Usage: %s [-dnrv] [-w wait] [-m max_ttl] [-M min_ttl] \
+[-P proto]\n\t [-p port#] [-q nqueries] [-t tos] [-s src_addr] [-g gateway] \
+\n\t host [data_size]\n", prog);
exit(1);
}
OpenPOWER on IntegriCloud