为什么我可以ping IP地址而不是“ traceroute”呢?


46

我可以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 ~]$

CENSORED跟踪路由中的第五个IP地址与“ ping CENSORED.CENSORED”处的IP地址不同。


traceroute的输出是什么?
ChrisF 2011年

1
为什么IP被“审查”?
Sathyajith Bhat

1
为什么IP被“审查”……也许是因为它不是公开的?pff
LanceBaynes

8
我认为发布者修改了IP,以便我们不会试图入侵他的计算机。
msw

这些明星并不意味着被审查,它们意味着没有回应
jbu

Answers:


42

尝试在跟踪路由中使用其他方法,例如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  * * *

2
-T似乎不是OSX的开关。在OSX上是否可以使用TCP SYN?
Manachi '17

2
@Manachi:brew install tcptraceroute
iolsmit

1
@Manchi:阅读手册...:“ traceroute -P TCP <IP>”

23

Traceroute基于ICMP或UDP数据包。它可以有效地ping通您和被检查的路径之间的每个路由器。它将增加其发送的每个后续数据包的生存时间(TTL)(通常从1-30开始),并期望随着每个数据包的发送自最后一个数据包起增加TTL,路径中的下一个路由器将返回错误代码。

如果跃点6没有响应,则可能是专门阻止了ICMP / UDP消息。因此Ping之所以起作用,是因为您与它之间的路由器只是将ICMP / UDP数据包传递给它,而不是像对traceroute一样对它们进行响应。


2
在大多数* nix发行版上,默认情况下,traceroute使用UDP,而不使用ICMP。
h0tw1r3 2011年

好点,会修改。
Rhys Gibson

所以所有的路由器5后阻止UDP?那是对的吗?
LanceBaynes

我不这么认为。其他人可能有更好的解释,但我认为第6跳没有响应并且没有传递数据包,否则您至少会从目的地获得最后一个响应(除非距离超过30跳)。
里斯·吉布森

1
但我敢肯定,距离不到30跳。所以答案不好。在跃点7,8,9等 我会在traceroute中得到答复:\
LanceBaynes

12

对于这些问题的“ 为什么”部分,我没有任何答案。

众所周知,有几家ISP通过两种方式使其路由器隐身于traceroute:它们要么不减少IP数据包中的TTL(使自己成为IP虫洞),要么在仍转发ICMP的同时不响应过期的TTL。

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

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


2

Traceroute依赖于ICMP消息,某些路由器可能配置为不响应。


Ping也是ICMP,它不能解释差异。我有阅读其他答案的优点,即状态traceroute也可以使用udp,这是我以前不知道的。
Rich Homolka

好了,显式阻止traceroute ICMP数据包的一种方法是丢弃TTL = 1的传入ICMP。也许是出于某种原因。
LawrenceC

2

有时值得ping用来获取类似traceroute的信息:

#!/bin/bash
for TTL in 1 2 3 4 5 6 7 8 9 10 11 12
do
    ping -c 1 -n -t $TTL a.b.c.d
done

通过使用-t $ TTL参数调用ping,有时可以避开防火墙,并找出防火墙后的路由器的IP地址等。


3
这与使用-I标志调用traceroute相同,尽管(有点奇怪)这需要超级用户状态。
2011年

1
@Tzarium ping也需要超级用户身份,只是设置了suid位,因此您可以免费获得它。
itsadok

0

从6开始的所有noded都不响应UDP数据包,或者节点6本身阻止了udp数据包。您可以尝试使用fllowing方法,我希望该方法可以根据目标块ICMP / TCP SYN路径中的哪个节点起作用:

  1. 使用ICMP进行traceroute:$ sudo traceroute -I

  2. 使用TCP syn进行traceroute:$ sudo traceroute -T

  3. 如果是超出的跃点,则使用以下任一方法:$ sudo traceroute -I -m 60

要么

$ sudo traceroute -T -m 60

后者在跟踪遍及整个大陆的ftp时对我有用。


0

要在UNIX环境中使用ping命令跟踪路由,请尝试以下操作:

for ((TTL=1;TTL<30;TTL++));
do
ping -c 1 -t $TTL <IP>;
done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.