traceroute 命令详解

| 选择喜欢的代码风格  

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

traceroute 命令安装:


-bash/zsh: traceroute: command not found

#Debian
apt-get install traceroute

#Ubuntu
apt-get install traceroute

#Alpine
apk add traceroute

#Arch Linux
pacman -S traceroute

#Kali Linux
apt-get install traceroute

#CentOS
yum install traceroute

#Fedora
dnf install traceroute

#OS X
brew install traceroute

#Raspbian
apt-get install traceroute

traceroute 命令补充说明:


互联网是由网关连接在一起的大型复杂的网络硬件集合。跟踪数据包遵循的路由(或找到丢弃数据包的网关)可能很困难。 traceroute 命令利用 IP 协议的“生存时间”字段,并尝试从每个网关到某个主机的路径引发 ICMP TIME_EXCEEDED 响应。

唯一必需的参数是目标主机名或 IP 地址。默认的探测数据报长度为 40 - 60 字节,但是可以通过在目标主机名之后指定数据包大小(以字节为单位)来增加长度。

traceroute 尝试通过启动具有较小 ttl(生存时间)的探测数据包,然后侦听来自网关的 ICMP “超过时间” 答复来跟踪 IP 数据包将遵循的路由到某些 Internet 主机的路由。它以 1 的 ttl 开始其探测,并将其增加 1,直到获得 ICMP “端口不可达”(或 TCP 重置),这意味着我们到达了“主机”,或者达到了最大值(默认为 30 跳)...在每个 ttl 设置下发送三个探针(默认情况下),并打印一行以显示 ttl,网关地址和每个探针的往返时间。要求时,地址后可以有其他信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果在 5.0 秒内(默认)没有响应,则为该探针打印一个 “*”(星号)

traceroute 命令语法:


traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...] [-i device] 
           [-m max_ttl] [-p port] [-s src_addr] [-q nqueries] 
           [-N squeries] [-t tos] [-l flow_label] [-w waittime] 
           [-z sendwait] [-UL] [-D] [-P proto] [--sport=port] [-M method] 
           [-O mod_options] [--mtu] [--back] host [packet_len] 

traceroute 命令选项:


-d:使用Socket层级的排错功能;
-f<存活数值>:设置第一个检测数据包的存活数值TTL的大小;
-F:设置勿离断位;
-g<网关>:设置来源路由网关,最多可设置8个;
-i<网络界面>:使用指定的网络界面送出数据包;
-I:使用ICMP回应取代UDP资料信息;
-m<存活数值>:设置检测数据包的最大存活数值TTL的大小;
-n:直接使用IP地址而非主机名称;
-p<通信端口>:设置UDP传输协议的通信端口;
-r:忽略普通的Routing Table,直接将数据包送到远端主机上。
-s<来源地址>:设置本地主机送出数据包的IP地址;
-t<服务类型>:设置检测数据包的TOS数值;
-v:详细显示指令的执行过程;
-w<超时秒数>:设置等待远端主机回报的时间;
-x:开启或关闭数据包的正确性检验。

traceroute 命令参数:


主机:指定目的主机IP地址或主机名。

traceroute 命令实例


traceroute to www.58.com (123.206.235.141), 30 hops max, 60 byte packets

 1  * * *
 2  * * *
 3  100.127.3.115 (100.127.3.115)  1.297 ms 100.127.3.121 (100.127.3.121)  1.067 ms 100.127.3.115 (100.127.3.115)  0.821 ms
 4  * * *
 5  100.127.125.210 (100.127.125.210)  2.185 ms 100.127.125.146 (100.127.125.146)  3.881 ms 100.127.113.235 (100.127.113.235)  2.098 ms
 6  61.48.72.74 (61.48.72.74)  2.683 ms  7.758 ms  2.334 ms
 7  180.149.129.165 (180.149.129.165)  5.694 ms  5.182 ms 180.149.137.137 (180.149.137.137)  4.076 ms
 8  180.149.159.77 (180.149.159.77)  2.467 ms 180.149.159.17 (180.149.159.17)  3.209 ms 180.149.159.37 (180.149.159.37)  2.672 ms
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

记录按序列号从 1 开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是 -q 的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用 traceroute -q 4 www.58.com,表示向每个网关发送 4 个数据包。

有时我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了 ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加 -n 参数来避免 DNS 解析,以 IP 格式输出数据。

如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到 traceroute 追踪数据包所经过的网关,提交 IDC 服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

traceroute 跳数设置

traceroute to www.baidu.com (220.181.38.150), 10 hops max, 60 byte packets

 1  * * *
 2  * * *
 3  100.127.3.121 (100.127.3.121)  1.041 ms 100.127.3.119 (100.127.3.119)  1.091 ms 100.127.3.115 (100.127.3.115)  0.796 ms
 4  * 100.127.203.9 (100.127.203.9)  4.667 ms *
 5  100.127.125.208 (100.127.125.208)  2.178 ms 100.127.125.210 (100.127.125.210)  2.210 ms 100.127.125.146 (100.127.125.146)  2.109 ms
 6  61.48.72.74 (61.48.72.74)  2.428 ms  2.467 ms  2.220 ms
 7  180.149.137.137 (180.149.137.137)  122.753 ms 180.149.129.61 (180.149.129.61)  7.753 ms 180.149.137.145 (180.149.137.145)  22.433 ms
 8  180.149.159.77 (180.149.159.77)  2.539 ms  2.354 ms *
 9  180.149.128.37 (180.149.128.37)  3.363 ms 36.110.246.201 (36.110.246.201)  2.743 ms 36.110.246.205 (36.110.246.205)  2.985 ms
10  * * *

traceroute 其它一些实例

traceroute -m 10 www.baidu.com    # 跳数设置
traceroute -n www.baidu.com       # 显示IP地址,不查主机名
traceroute -p 6888 www.baidu.com  # 探测包使用的基本UDP端口设置6888
traceroute -q 4 www.baidu.com     # 把探测包的个数设置为值4
traceroute -r www.baidu.com       # 绕过正常的路由表,直接发送到网络相连的主机
traceroute -w 3 www.baidu.com     # 把对外发探测包的等待响应时间设置为3秒

traceroute 命令扩展阅读:




traceroute 命令评论