我对为什么 traceroute 在某些情况下不起作用有一些疑问。虽然我了解它的工作原理,但我无法弄清楚一些问题。例如,
$traceroute www.google.com
1 * * *
2 * * *
......
有“*”。当我使用 ICMP 代替 UDP 时,我得到了以下信息:
$traceroute www.google.com -I
1 * * *
2 * * *
3 222.42.254.130 (222.42.254.130) 7.980 ms 10.785 ms 4.920 ms
4 222.42.254.129 (222.42.254.129) 4.363 ms 8.141 ms 5.849 ms
5 bogon (10.2.1.1) 7.957 ms 7.787 ms 8.321 ms
6 61.237.121.97 (61.237.121.97) 25.341 ms 24.895 ms 28.725 ms
7 61.237.123.66 (61.237.123.66) 23.738 ms 24.172 ms 23.916 ms
8 221.4.120.173 (221.4.120.173) 23.096 ms 24.539 ms 20.827 ms
9 221.4.6.61 (221.4.6.61) 58.516 ms 60.035 ms 63.200 ms
10 120.80.0.73 (120.80.0.73) 60.991 ms 59.520 ms 59.853 ms
11 219.158.19.69 (219.158.19.69) 59.771 ms 59.192 ms 59.072 ms
12 219.158.22.249 (219.158.22.249) 89.185 ms 87.928 ms 89.582 ms
13 219.158.22.158 (219.158.22.158) 102.195 ms 103.409 ms 106.153 ms
14 219.158.35.114 (219.158.35.114) 218.816 ms 224.845 ms 218.470 ms
15 203.208.62.15 (203.208.62.15) 212.560 ms 208.640 ms *
16 chrome.google.com (203.208.46.1) 210.655 ms * 216.369 ms
我想知道为什么第一跳和第二跳仍然未知。我尝试用 -z 500 设置 icmp 速率,但没用。所以我的问题如下:
- 为什么我使用 ICMP 时会出现一些跳数?
- 我怎样才能获得前两跳?
我搜索过,但一无所获。我通过没有任何防火墙的路由连接到互联网。谢谢你的帮助。
答案1
由于 Traceroute 基于 ICMP Echo 请求,因此您路径上的前两条路由(可能是您自己的防火墙)似乎配置为丢弃/阻止 ICMP Echo 请求。这就是为什么 Traceroute 无法看到前两条路由的实际响应,但可以看到除此以外的正确响应。
答案2
第一跳是您通向互联网的网关,您可以通过 来查看netstat -rn
。
第二跳是您的提供商的网关,如果您碰巧有像 Fritzbox 之类的东西,您可以在那里看到 IP 地址。
答案3
为了完成下一跳发现,您可以使用另一个工具:hping。正如 Franck 之前的回复所解释的那样,可能存在丢弃此类 ICMP 消息的防火墙或路由器。
例如,您可以对第一个下一跳使用此命令:
hping www.google.com -p 86 -S -t 1
另请参见第二张:
hping www.google.com -p 86 -S -t 2