]>
Commit | Line | Data |
---|---|---|
2b484d24 | 1 | .\" Copyright (c) 1989, 1995, 1996, 1997, 1999, 2000 |
b7080c8e A |
2 | .\" The Regents of the University of California. All rights reserved. |
3 | .\" | |
2b484d24 A |
4 | .\" Redistribution and use in source and binary forms are permitted |
5 | .\" provided that the above copyright notice and this paragraph are | |
6 | .\" duplicated in all such forms and that any documentation, | |
7 | .\" advertising materials, and other materials related to such | |
8 | .\" distribution and use acknowledge that the software was developed | |
9 | .\" by the University of California, Berkeley. The name of the | |
10 | .\" University may not be used to endorse or promote products derived | |
11 | .\" from this software without specific prior written permission. | |
12 | .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR | |
13 | .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED | |
14 | .\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
b7080c8e | 15 | .\" |
2b484d24 | 16 | .Dd September 21, 2000 |
b7080c8e A |
17 | .Dt TRACEROUTE 8 |
18 | .Os BSD 4.3 | |
19 | .Sh NAME | |
20 | .Nm traceroute | |
21 | .Nd print the route packets take to network host | |
22 | .Sh SYNOPSIS | |
23 | .Nm traceroute | |
2b484d24 A |
24 | .Op Fl dFISdnrvx |
25 | .Op Fl f Ar first_ttl | |
26 | .Op Fl g Ar gateway | |
27 | .Op Fl i Ar iface | |
28 | .Op Fl M Ar first_ttl | |
b7080c8e | 29 | .Op Fl m Ar max_ttl |
2b484d24 | 30 | .Op Fl P Ar proto |
b7080c8e A |
31 | .Op Fl p Ar port |
32 | .Op Fl q Ar nqueries | |
b7080c8e | 33 | .Op Fl s Ar src_addr |
b7080c8e A |
34 | .Op Fl t Ar tos |
35 | .Op Fl w Ar waittime | |
2b484d24 | 36 | .Op Fl z Ar pausemsecs |
b7080c8e A |
37 | .Ar host |
38 | .Op Ar packetsize | |
39 | .Sh DESCRIPTION | |
40 | The Internet is a large and complex aggregation of | |
41 | network hardware, connected together by gateways. | |
42 | Tracking the route one's packets follow (or finding the miscreant | |
43 | gateway that's discarding your packets) can be difficult. | |
44 | .Nm Traceroute | |
45 | utilizes the IP protocol `time to live' field and attempts to elicit an | |
46 | .Tn ICMP | |
47 | .Dv TIME_EXCEEDED | |
48 | response from each gateway along the path to some | |
49 | host. | |
50 | .Pp | |
51 | The only mandatory parameter is the destination host name or IP number. | |
2b484d24 | 52 | The default probe datagram length is 40 bytes, but this may be increased |
b7080c8e A |
53 | by specifying a packet size (in bytes) after the destination host |
54 | name. | |
55 | .Pp | |
56 | Other options are: | |
57 | .Bl -tag -width Ds | |
2b484d24 A |
58 | .It Fl f Ar first_ttl |
59 | Set the initial time-to-live used in the first outgoing probe packet. | |
60 | .It Fl F | |
61 | Set the "don't fragment" bit. | |
62 | .It Fl d | |
63 | Enable socket level debugging. | |
64 | .It Fl g Ar gateway | |
65 | Specify a loose source route gateway (8 maximum). | |
66 | .It Fl i Ar iface | |
67 | Specify a network interface to obtain the source IP address for | |
68 | outgoing probe packets. This is normally only useful on a multi-homed | |
69 | host. (See the | |
70 | .Fl s | |
71 | flag for another way to do this.) | |
72 | .It Fl I | |
73 | Use | |
74 | .Tn ICMP | |
75 | ECHO instead of | |
76 | .Tn UDP | |
77 | datagrams. (A synonym for "-P icmp"). | |
78 | .It Fl M Ar first_ttl | |
79 | Set the initial time-to-live value used in outgoing probe packets. | |
80 | The default is 1, i.e., start with the first hop. | |
b7080c8e A |
81 | .It Fl m Ar max_ttl |
82 | Set the max time-to-live (max number of hops) used in outgoing probe | |
2b484d24 A |
83 | packets. The default is |
84 | .Em net.inet.ip.ttl | |
85 | hops (the same default used for | |
b7080c8e A |
86 | .Tn TCP |
87 | connections). | |
88 | .It Fl n | |
89 | Print hop addresses numerically rather than symbolically and numerically | |
90 | (saves a nameserver address-to-name lookup for each gateway found on the | |
91 | path). | |
2b484d24 A |
92 | .It Fl P Ar proto |
93 | Send packets of specified IP protocol. The currently supported protocols | |
94 | are: | |
95 | .Tn UDP | |
96 | , | |
97 | .Tn TCP | |
98 | , | |
99 | .Tn GRE | |
100 | and | |
101 | .Tn ICMP | |
102 | Other protocols may also be specified (either by name or by number), though | |
103 | .Nm traceroute | |
104 | does not implement any special knowledge of their packet formats. This | |
105 | option is useful for determining which router along a path may be | |
106 | blocking packets based on IP protocol number. But see BUGS below. | |
b7080c8e | 107 | .It Fl p Ar port |
2b484d24 | 108 | Protocol specific. For |
b7080c8e | 109 | .Tn UDP |
2b484d24 A |
110 | and |
111 | .Tn TCP, | |
112 | sets the base | |
b7080c8e A |
113 | .Ar port |
114 | number used in probes (default is 33434). | |
115 | .Nm Traceroute | |
116 | hopes that nothing is listening on | |
117 | .Tn UDP | |
118 | ports | |
119 | .Em base | |
120 | to | |
121 | .Em base+nhops-1 | |
122 | at the destination host (so an | |
123 | .Tn ICMP | |
124 | .Dv PORT_UNREACHABLE | |
125 | message will | |
126 | be returned to terminate the route tracing). If something is | |
127 | listening on a port in the default range, this option can be used | |
128 | to pick an unused port range. | |
129 | .It Fl q Ar nqueries | |
130 | Set the number of probes per ``ttl'' to | |
131 | .Ar nqueries | |
132 | (default is three probes). | |
133 | .It Fl r | |
134 | Bypass the normal routing tables and send directly to a host on an attached | |
135 | network. | |
136 | If the host is not on a directly-attached network, | |
137 | an error is returned. | |
138 | This option can be used to ping a local host through an interface | |
139 | that has no route through it (e.g., after the interface was dropped by | |
140 | .Xr routed 8 ) . | |
141 | .It Fl s Ar src_addr | |
142 | Use the following IP address | |
143 | (which must be given as an IP number, not | |
144 | a hostname) as the source address in outgoing probe packets. On | |
145 | hosts with more than one IP address, this option can be used to | |
146 | force the source address to be something other than the IP address | |
147 | of the interface the probe packet is sent on. If the IP address | |
148 | is not one of this machine's interface addresses, an error is | |
149 | returned and nothing is sent. | |
2b484d24 A |
150 | (See the |
151 | .Fl i | |
152 | flag for another way to do this.) | |
153 | .It Fl S | |
154 | Print a summary of how many probes were not answered for each hop. | |
b7080c8e A |
155 | .It Fl t Ar tos |
156 | Set the | |
157 | .Em type-of-service | |
158 | in probe packets to the following value (default zero). The value must be | |
159 | a decimal integer in the range 0 to 255. This option can be used to | |
160 | see if different types-of-service result in different paths. (If you | |
161 | are not running a | |
2b484d24 | 162 | .Bx 4.4 |
b7080c8e A |
163 | or later system, this may be academic since the normal network |
164 | services like telnet and ftp don't let you control the | |
165 | .Dv TOS ) . | |
166 | Not all values of | |
167 | .Dv TOS | |
168 | are legal or | |
169 | meaningful \- see the IP spec for definitions. Useful values are | |
170 | probably | |
171 | .Ql \-t 16 | |
172 | (low delay) and | |
173 | .Ql \-t 8 | |
174 | (high throughput). | |
175 | .It Fl v | |
176 | Verbose output. Received | |
177 | .Tn ICMP | |
178 | packets other than | |
179 | .Dv TIME_EXCEEDED | |
180 | and | |
181 | .Dv UNREACHABLE Ns s | |
182 | are listed. | |
183 | .It Fl w | |
2b484d24 A |
184 | Set the time (in seconds) to wait for a response to a probe (default 5 sec.). |
185 | .It Fl x | |
186 | Toggle IP checksums. Normally, this prevents traceroute from calculating | |
187 | IP checksums. In some cases, the operating system can overwrite parts of | |
188 | the outgoing packet but not recalculate the checksum (so in some cases | |
189 | the default is to not calculate checksums and using | |
190 | .Fl x | |
191 | causes them to be calculated). Note that checksums are usually required | |
192 | for the last hop when using | |
193 | .Tn ICMP | |
194 | ECHO probes ( | |
195 | .Fl I | |
196 | ). So they are always calculated when using ICMP. | |
197 | .It Fl z Ar pausemsecs | |
198 | Set the time (in milliseconds) to pause between probes (default 0). | |
199 | Some systems such as Solaris and routers such as Ciscos rate limit | |
200 | ICMP messages. A good value to use with this this is 500 (e.g. 1/2 second). | |
b7080c8e A |
201 | .El |
202 | .Pp | |
203 | This program attempts to trace the route an IP packet would follow to some | |
204 | internet host by launching | |
205 | .Tn UDP | |
206 | probe | |
207 | packets with a small ttl (time to live) then listening for an | |
208 | .Tn ICMP | |
209 | "time exceeded" reply from a gateway. We start our probes | |
210 | with a ttl of one and increase by one until we get an | |
211 | .Tn ICMP | |
212 | "port unreachable" | |
213 | (which means we got to "host") or hit a max (which | |
2b484d24 A |
214 | defaults to |
215 | .Em net.inet.ip.ttl | |
216 | hops & can be changed with the | |
b7080c8e A |
217 | .Fl m |
218 | flag). Three | |
219 | probes (changed with | |
220 | .Fl q | |
221 | flag) are sent at each ttl setting and a | |
222 | line is printed showing the ttl, address of the gateway and | |
223 | round trip time of each probe. If the probe answers come from | |
224 | different gateways, the address of each responding system will | |
2b484d24 | 225 | be printed. If there is no response within a 5 sec. timeout |
b7080c8e A |
226 | interval (changed with the |
227 | .Fl w | |
228 | flag), a "*" is printed for that | |
229 | probe. | |
230 | .Pp | |
231 | We don't want the destination | |
232 | host to process the | |
233 | .Tn UDP | |
234 | probe packets so the destination port is set to an | |
235 | unlikely value (if some clod on the destination is using that | |
236 | value, it can be changed with the | |
237 | .Fl p | |
238 | flag). | |
239 | .Pp | |
240 | A sample use and output might be: | |
241 | .Bd -literal | |
242 | [yak 71]% traceroute nis.nsf.net. | |
2b484d24 | 243 | traceroute to nis.nsf.net (35.1.1.48), 64 hops max, 38 byte packet |
b7080c8e A |
244 | 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms |
245 | 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms | |
246 | 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms | |
247 | 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms | |
248 | 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms | |
249 | 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms | |
250 | 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms | |
251 | 8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms | |
252 | 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms | |
253 | 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms | |
254 | 11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms | |
255 | ||
256 | .Ed | |
257 | Note that lines 2 & 3 are the same. This is due to a buggy | |
258 | kernel on the 2nd hop system \- lbl-csam.arpa \- that forwards | |
259 | packets with a zero ttl (a bug in the distributed version | |
260 | of 4.3 | |
261 | .Tn BSD ) . | |
262 | Note that you have to guess what path | |
263 | the packets are taking cross-country since the | |
264 | .Tn NSFNet | |
265 | (129.140) | |
266 | doesn't supply address-to-name translations for its | |
267 | .Tn NSS Ns es . | |
268 | .Pp | |
269 | A more interesting example is: | |
270 | .Bd -literal | |
271 | [yak 72]% traceroute allspice.lcs.mit.edu. | |
2b484d24 | 272 | traceroute to allspice.lcs.mit.edu (18.26.0.115), 64 hops max |
b7080c8e A |
273 | 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms |
274 | 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms | |
275 | 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms | |
276 | 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms | |
277 | 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms | |
278 | 6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms | |
279 | 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms | |
280 | 8 129.140.70.13 (129.140.70.13) 80 ms 79 ms 99 ms | |
281 | 9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms | |
282 | 10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms | |
283 | 11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms | |
284 | 12 * * * | |
285 | 13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms | |
286 | 14 * * * | |
287 | 15 * * * | |
288 | 16 * * * | |
289 | 17 * * * | |
290 | 18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 ms 279 ms 279 ms | |
291 | ||
292 | .Ed | |
293 | Note that the gateways 12, 14, 15, 16 & 17 hops away | |
294 | either don't send | |
295 | .Tn ICMP | |
296 | "time exceeded" messages or send them | |
297 | with a ttl too small to reach us. 14 \- 17 are running the | |
298 | .Tn MIT | |
299 | C Gateway code that doesn't send "time exceeded"s. God | |
300 | only knows what's going on with 12. | |
301 | .Pp | |
302 | The silent gateway 12 in the above may be the result of a bug in | |
303 | the 4.[23] | |
304 | .Tn BSD | |
305 | network code (and its derivatives): 4.x (x <= 3) | |
306 | sends an unreachable message using whatever ttl remains in the | |
307 | original datagram. Since, for gateways, the remaining ttl is | |
308 | zero, the | |
309 | .Tn ICMP | |
310 | "time exceeded" is guaranteed to not make it back | |
311 | to us. The behavior of this bug is slightly more interesting | |
312 | when it appears on the destination system: | |
313 | .Bd -literal | |
314 | 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms | |
315 | 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms | |
316 | 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms | |
317 | 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms | |
318 | 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms | |
319 | 6 csgw.Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms | |
320 | 7 * * * | |
321 | 8 * * * | |
322 | 9 * * * | |
323 | 10 * * * | |
324 | 11 * * * | |
325 | 12 * * * | |
326 | 13 rip.Berkeley.EDU (128.32.131.22) 59 ms ! 39 ms ! 39 ms ! | |
327 | ||
328 | .Ed | |
329 | Notice that there are 12 "gateways" (13 is the final | |
330 | destination) and exactly the last half of them are "missing". | |
331 | What's really happening is that rip (a Sun-3 running Sun OS3.5) | |
332 | is using the ttl from our arriving datagram as the ttl in its | |
333 | .Tn ICMP | |
334 | reply. So, the reply will time out on the return path | |
335 | (with no notice sent to anyone since | |
336 | .Tn ICMP's | |
337 | aren't sent for | |
338 | .Tn ICMP's ) | |
339 | until we probe with a ttl that's at least twice the path | |
340 | length. I.e., rip is really only 7 hops away. A reply that | |
341 | returns with a ttl of 1 is a clue this problem exists. | |
342 | .Nm Traceroute | |
343 | prints a "!" after the time if the ttl is <= 1. | |
344 | Since vendors ship a lot of obsolete | |
345 | .Pf ( Tn DEC Ns \'s | |
346 | Ultrix, Sun 3.x) or | |
347 | non-standard | |
348 | .Pq Tn HPUX | |
349 | software, expect to see this problem | |
350 | frequently and/or take care picking the target host of your | |
351 | probes. | |
2b484d24 | 352 | .Pp |
b7080c8e A |
353 | Other possible annotations after the time are |
354 | .Sy !H , | |
355 | .Sy !N , | |
2b484d24 | 356 | or |
b7080c8e | 357 | .Sy !P |
2b484d24 | 358 | (host, network or protocol unreachable), |
b7080c8e | 359 | .Sy !S |
2b484d24 | 360 | (source route failed), |
b7080c8e | 361 | .Sy !F |
2b484d24 A |
362 | (fragmentation needed \- the RFC1191 Path MTU Discovery value is displayed), |
363 | .Sy !X | |
364 | (communication administratively prohibited), | |
365 | .Sy !V | |
366 | (host precedence violation), | |
367 | .Sy !C | |
368 | (precedence cutoff in effect), or | |
369 | .Sy !<num> | |
370 | (ICMP unreachable code <num>). | |
371 | These are defined by RFC1812 (which supersedes RFC1716). | |
372 | If almost all the probes result in some kind of unreachable, | |
b7080c8e A |
373 | .Nm traceroute |
374 | will give up and exit. | |
375 | .Pp | |
376 | This program is intended for use in network testing, measurement | |
377 | and management. | |
378 | It should be used primarily for manual fault isolation. | |
379 | Because of the load it could impose on the network, it is unwise to use | |
380 | .Nm traceroute | |
381 | during normal operations or from automated scripts. | |
382 | .Sh AUTHOR | |
383 | Implemented by Van Jacobson from a suggestion by Steve Deering. Debugged | |
384 | by a cast of thousands with particularly cogent suggestions or fixes from | |
385 | C. Philip Wood, Tim Seaver and Ken Adelman. | |
386 | .Sh SEE ALSO | |
387 | .Xr netstat 1 , | |
388 | .Xr ping 8 | |
2b484d24 A |
389 | .Sh BUGS |
390 | When using protocols other than UDP, functionality is reduced. | |
391 | In particular, the last packet will often appear to be lost, because | |
392 | even though it reaches the destination host, there's no way to know | |
393 | that because no ICMP message is sent back. | |
394 | In the TCP case, | |
b7080c8e | 395 | .Nm |
2b484d24 A |
396 | should listen for a RST from the destination host (or an intermediate |
397 | router that's filtering packets), but this is not implemented yet. | |
398 |