traceroute 显示星号,但 netcat 到达端口

traceroute 显示星号,但 netcat 到达端口

我在同一个子网中拥有多台(虚拟)机器Centos 7,每台机器上运行着我的应用程序的多个实例。我需要测试应用程序如何通过 UDP 相互访问。

我尝试通过 从一台机器访问另一台机器tracerote。因此我检查 host1:

# traceroute host2 -U -p 3001

traceroute to host2 (<ip>), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 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  * * *

看起来 UDP 数据包被过滤了。但我又尝试了一下netcat(再次在主机 1 上):

# nc -u host2 3001
qwerty1
qwerty2
qwerty3

并且它以某种方式起作用了!怎么会这样?

顺便说一下,TCP 的 traceroute 只需一跳就能到达目的地,因为它应该在一个子网中:

# traceroute host2 -T -p 3001
traceroute to host2 (<ip>), 30 hops max, 60 byte packets
 1  host2 (<ip>)  0.663 ms  0.707 ms *

问题是 UDP 到底能不能用?或者有没有可靠的方法来测试它?不幸的是,应用程序无法正常工作,我想确定这是不是底层基础设施的问题。

答案1

netcat 的输出仅显示数据包可以发送到此目标,并且没有返回任何错误。如果中间有一个防火墙,它会直接丢弃所有 UDP 数据包,也会发生这种情况。这种防火墙还会产生您使用 traceroute 看到的输出:如果数据包被丢弃,那么它们以后就不会因超出 ICMP TTL 而失败。

相关内容