dele-MBP:~ ll$ traceroute 43.24.226.50
traceroute to 43.24.226.50 (43.24.226.50), 64 hops max, 52 byte packets
1 router.asus.com (192.168.2.1) 2.082 ms 1.039 ms 0.924 ms
2 100.64.0.1 (100.64.0.1) 3.648 ms 3.795 ms 3.955 ms
3 118.112.212.225 (118.112.212.225) 4.252 ms 4.569 ms 4.168 ms
4 171.208.203.73 (171.208.203.73) 6.378 ms
171.208.198.25 (171.208.198.25) 6.943 ms
171.208.203.61 (171.208.203.61) 7.055 ms
5 202.97.36.225 (202.97.36.225) 38.149 ms
202.97.36.221 (202.97.36.221) 39.949 ms
202.97.36.225 (202.97.36.225) 40.780 ms
6 202.97.90.158 (202.97.90.158) 37.894 ms
202.97.94.146 (202.97.94.146) 39.885 ms 39.354 ms
7 202.97.38.166 (202.97.38.166) 45.324 ms
202.97.39.149 (202.97.39.149) 40.097 ms
202.97.94.77 (202.97.94.77) 40.580 ms
8 202.97.51.118 (202.97.51.118) 374.218 ms
202.97.27.238 (202.97.27.238) 187.573 ms
202.97.86.138 (202.97.86.138) 197.524 ms
9 218.30.53.190 (218.30.53.190) 201.597 ms
218.30.54.190 (218.30.54.190) 194.194 ms
218.30.53.190 (218.30.53.190) 204.027 ms
10 182.54.129.91 (182.54.129.91) 220.026 ms 282.360 ms
et-11-1-5.r01.laxus01.us.bb.bgp.net (182.54.129.38) 185.700 ms
11 182.54.129.91 (182.54.129.91) 229.700 ms 508.509 ms 266.683 ms
12 * 212.5.128.2 (212.5.128.2) 565.161 ms *
13 43.24.226.50 (43.24.226.50) 200.531 ms 201.911 ms 191.566 ms
如果禁止ICMP,则
43.24.226.50
也不应工作。是什么原因?我检查服务器的防火墙已停止。
#1 楼
在类似的问题上,卢克·萨维奇(Luke Savage)完美地解释了它:Traceroute本身不是协议,它是一个应用程序,使用的协议取决于您所使用的实现。主要是ICMP。
有两个主要实现:
tracert-tracert是Windows应用程序,利用带有递增TTL字段的ICMP数据包将跃点映射到最终目标地址。 -traceroute是* nix应用程序,可在大多数基于Linux的系统(包括网络设备)和Cisco设备上使用。它使用带有递增TTL字段的UDP数据包将跃点映射到最终目的地。
之间的区别非常有用,因为某些网络默认情况下会阻止ICMP,因此Windows计算机的PING和tracert都会失败,但是从Linux设备执行的traceroute仍然可以工作。 。在我提到的答案中,您可以看到基于unix的系统未将
traceroute
用于tracert
。换句话说,由于Unix
正在使用GNU
(我认为您尝试访问的系统已将其阻止),而ICMP
使用traceroute
数据包,且其增量方法为PING
字段(我认为您尝试使用的系统未对其进行阻止到达)ICMP
失败,但traceroute
成功评论
那么,为什么我的服务器IP可以跟踪路由却不能ping?
–244boy
19年5月5日在9:25
当像244boy这样的人提出改进建议时,与其在您的帖子中添加新评论,不如对您的帖子进行编辑,以使将来阅读答案的人不必阅读所有评论即可获得完整答案。
– Keeta-恢复莫妮卡
19年6月6日在15:03
@naïveRSA严格来说,traceroute使用的是ICMP,即使它正在发送UDP,也就是它期望并评估途中跃点的TTL超出消息。阻止所有ICMP的主机不是一个好主意,但是当在目标主机上阻止ICMP回显请求或答复时,ping操作将失败。
–哈根·冯·埃岑
19年6月7日在19:54
#2 楼
要补充@naïveRSA的答案,如果路径中存在过滤/防火墙,也可能会出现以下情况:ICMP“回显应答”(ping)数据包被阻止,但允许ICMP“超时”(tracert)数据包。即使在仅使用ICMP(Windows)的情况下,也会产生相同的结果。在两种情况下(使用UDP或ICMP的发送方),错误通信都是ICMP(即,节点响应ping或跟踪器*数据包)。
#3 楼
让我们看看会发生什么情况?traceroute和
ping
都可以达到目标。首先让我们尝试ping 8.8.8.8
并观察会发生什么:现在,ping
:$ tcpdump -n host 8.8.8.8 or icmp
15:36:51.045994 IP 10.4.27.179 > 8.8.8.8: ICMP echo request, id 7215, seq 0, length 64
15:36:51.062458 IP 8.8.8.8 > 10.4.27.179: ICMP echo reply, id 7215, seq 0, length 64
15:36:52.048350 IP 10.4.27.179 > 8.8.8.8: ICMP echo request, id 7215, seq 1, length 64
15:36:52.073657 IP 8.8.8.8 > 10.4.27.179: ICMP echo reply, id 7215, seq 1, length 64
所以
traceroute -n 8.8.8.8
,至少我已安装的实现,不会发送ICMP。相反,它发送UDP数据包。在此跟踪中看不到什么(尽管如果我给traceroute
一个tcpdump
来增加详细程度,那将是可见的)是第一个探测器的ttl为1,然后它会增加ttl以便以后进行探测。这导致我和8.8.8.8之间的路由器以ICMP ttl超出错误响应,这是traceroute如何发现此处和此处之间的路由器。最终,ttl足够长,足以使所有8.8.8.8和8.8.8.8的方法以ICMP端口无法访问错误进行响应,因为它没有进程监听UDP端口44838。这是traceroute知道它已到达最终目的地的方式。
在此之间阻塞所有ICMP,那么ping或traceroute都不起作用。阻止所有ICMP是有问题的:例如,它中断了路径MTU发现,这依赖于需要ICMP分段的错误。 ICMP数据包具有类型和代码,负责任的网络运营商将仅选择性地阻止某些类型或代码,这些类型或代码可能会造成滥用或泄露特定信息。
例如,某些主机根本不会响应ICMP回显请求,因此ping无法正常工作。这个想法是,通过不响应ping,攻击者很难发现网络上存在哪些主机。实际上,这是有问题的,因为还有其他探测主机的方法。例如,可以将TCP SYN发送到端口80来查找Web服务器。
许多主机在将UDP数据报或TCP SYN发送到端口上时也不会发送ICMP端口不可达错误。他们没有进程监听,这中断了traceroute。再一次的想法是使攻击者更难以映射网络,但这对攻击者来说只是一个小小的挫败。
因为traceroute是一个程序而不是任何特定的协议,所以它具有其他探测方式。它们都依靠增加TTL来发现路由器,但是可以发送不同种类的探测,这些探测或多或少有机会引起端点的响应。例如,我的
-v
列出了一个man tcpdump
选项以使用ICMP回波探针,与ping相同。它还具有-I
以使用TCP SYN探针而不是UDP。如果您知道主机将响应-T
,则ping
很有意义。如果您知道主机正在侦听特定的TCP端口,则可以将-I
设置为有意义,也许可以将-T
选项与端口选择一起使用。做出合理的默认设置。实际上,类似的工具-p
在其手册页中也有这样的说法:它使用UDP端口端口或某些随机端口。#4 楼
TLDR;可以在远程主机上阻止ping(ICMP阻止),但是traceroute仍可以使用标准网络路由UDP或TCP / IP(实际上是任何协议;请参阅https://networkengineering.stackexchange.com/a/36509/)找到到它的路由58968)。请注意,您的ping可能也可以到达主机(除非您有一个非常聪明的防火墙阻止某处的ICMP ping流量),主机只是不回复。#5 楼
Linux使用UDP而不是ICMP进行跟踪路由,防火墙没有阻止UDP端口#6 楼
对于您的问题的简要答案是,ping
实用程序依赖于ICMP协议,该协议有时在网络防火墙或设备本身的防火墙上被阻止。网络管理员阻止ICMP的最常见原因是为了防止对他们认为是安全问题的网络进行“扫描”。 Linux上的traceroute
实用程序使用UDP,这是一种完全不同的协议,在这种情况下,不会被网络管理员阻止。 UDP有多种用途,阻止它会导致许多事情在网络上不可用。 ping
所需的ICMP“控制消息”类型是协议的子集,这意味着阻止该类型的ICMP数据包在网络上引起的问题较少,因此比UDP更有可能被阻止。#7 楼
您可以安装nmap(insecure.org),并在UDP或TCP和任何端口上使用nping。在ping阻止出站的网络上效果很好。要对Web服务器执行ping操作
nping --tcp -p 80,443
要对时间服务器执行ping操作
nping --udp -p 123
https://nmap.org/book/nping-man.html
评论
可能是因为ping的超时限制太严格了,并且在更宽松的时间限制下它会成功吗? Traceroute为某些节点提供了500毫秒以上的时间。有什么答案对您有帮助吗?如果是这样,您应该接受答案,这样问题就不会永远弹出来寻找答案。或者,您可以提供并接受自己的答案。