为什么我可以 ping 一个 IP 地址,但不能 'traceroute' 它?

Lan*_*nes 53 networking

我可以 ping 一个 IP 地址,但无法跟踪路由它。这怎么可能?

[USERNAME@HOSTNAME ~]$ ping CENSORED.CENSORED
PING CENSORED.CENSORED (CENSORED) 56(84) bytes of data.
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=1 ttl=49 time=52.8 ms
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=2 ttl=49 time=49.4 ms
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=3 ttl=49 time=49.2 ms
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=4 ttl=49 time=50.4 ms
^C
--- CENSORED.CENSORED ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 49.276/50.494/52.804/1.401 ms
[USERNAME@HOSTNAME ~]$
[USERNAME@HOSTNAME ~]$ traceroute CENSORED.CENSORED
traceroute to CENSORED.CENSORED (CENSORED), 30 hops max, 60 byte packets
 1  CENSORED (CENSORED)  5.733 ms  6.000 ms  5.977 ms
 2  CENSORED (CENSORED)  0.428 ms  0.417 ms  0.393 ms
 3  CENSORED (CENSORED)  1.726 ms  1.718 ms  1.682 ms
 4  CENSORED (CENSORED)  26.699 ms  26.693 ms  26.670 ms
 5  CENSORED (CENSORED)  27.785 ms  27.769 ms  27.746 ms
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
[USERNAME@HOSTNAME ~]$
Run Code Online (Sandbox Code Playgroud)

CENSOREDtraceroute 中的第五个IP 地址与“ping CENSORED.CENSORED”不同。

Tza*_*ium 46

尝试在跟踪路由中使用不同的方法,例如 TCP SYN 或 ICMP,而不是默认的 UDP 方法。

例如注意 ICMP 和 TCP 之间的区别:

x@x:~$ ping -qc4 94.254.2.51
PING 94.254.2.51 (94.254.2.51) 56(84) bytes of data.
--- 94.254.3.90 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3009ms
rtt min/avg/max/mdev = 7.781/7.807/7.836/0.067 ms

x@x:~$ sudo traceroute -I 94.254.2.51
traceroute to 94.254.2.51 (94.254.2.51), 30 hops max, 40 byte packets
1  <REDACTED>
2  <REDACTED>
3  <REDACTED>
4  <REDACTED>
5  netnod-ix-ge-a-sth-1500.bahnhof.net (194.68.123.85)  1.307 ms  1.299 ms  1.432 ms
6  sto-cr1.sto-cr3.bahnhof.net (85.24.151.165)  7.166 ms  7.364 ms  7.336 ms
7  sto-cr3.gav-cr1.bahnhof.net (85.24.151.195)  7.251 ms  7.099 ms  7.220 ms
8  zitius-a322-gw-c.bahnhof.net (85.24.153.249)  7.059 ms  7.074 ms  7.145 ms
9  h-2-51.A322.priv.bahnhof.se (94.254.2.51)  7.619 ms  7.750 ms  8.070 ms

x@x:~$ sudo traceroute -T 94.254.2.51
traceroute to 94.254.2.51 (94.254.2.51), 30 hops max, 40 byte packets
1  <REDACTED>
2  <REDACTED>
3  <REDACTED>
4  <REDACTED>
5  netnod-ix-ge-a-sth-1500.bahnhof.net (194.68.123.85)  1.621 ms  1.683 ms  1.817 ms
6  sto-cr1.sto-cr3.bahnhof.net (85.24.151.165)  8.530 ms  7.861 ms  7.820 ms
7  sto-cr3.gav-cr1.bahnhof.net (85.24.151.195)  7.724 ms  7.539 ms  7.486 ms
8  zitius-a322-gw-c.bahnhof.net (85.24.153.249)  7.572 ms  7.537 ms  7.553 ms
9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
Run Code Online (Sandbox Code Playgroud)

  • -T 似乎不是 OSX 的开关。是否有在 OSX 上使用 TCP SYN 的替代方法? (2认同)
  • @Manachi:`brew install tcptraceroute` (2认同)
  • @Manchi:阅读手册页...:“traceroute -P TCP &lt;IP&gt;” (2认同)

Rhy*_*son 24

Traceroute 基于 ICMP 或 UDP 数据包。它有效地 ping 您和 censored.censored 之间路径上的每个路由器。它增加了它发送的每个后续数据包的生存时间 (TTL)(通常从 1 到 30),期望随着每个数据包从上一个发送的 TTL 增加,路径中的下一个路由器将返回错误代码.

如果跃点 6 没有响应,则可能是专门阻止了 ICMP/UDP 消息。Ping 因此有效,因为您和它之间的路由器只是将 ICMP/UDP 数据包传递给它,而不是响应它们,就像它们对跟踪路由所做的那样。

  • 在大多数(所有?)*nix 发行版中,traceroute 默认使用 UDP,而不是 ICMP。 (2认同)

usr*_*ΛΩΝ 13

我没有看到问题的原因部分的答案。

众所周知,一些 ISP 以两种方式使他们的路由器隐身以跟踪路由:他们要么不减少 IP 数据包中的 TTL(使自己成为 IP 虫洞),要么在仍然转发 ICMP 的同时不对过期的 TTL 做出响应。

原因是保持他们的内部网络拓扑私有。就这样。

traceroute从/向多个源/目的地发出s 会显示有关网络拓扑的信息,这不是每个人都喜欢的。