我如何使 traceroute 像 tcptraceroute 一样工作?

我如何使 traceroute 像 tcptraceroute 一样工作?

在 Mac OS 11 上,traceroute 的手册页说你可以用 将其设置为 TCP 模式-P TCP。当我尝试这样做时,没有得到任何回应:

[me@laptop ~]$ sudo traceroute -f 6 -m 10 -e -P TCP -p 443 www.serverfault.com
traceroute: Warning: www.serverfault.com has multiple addresses; using 151.101.129.69
traceroute to serverfault.com (151.101.129.69), 10 hops max, 64 byte packets
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *

当我使用 tcptraceroute 时我得到结果:

[me@laptop ~]$ sudo tcptraceroute -f 6  www.serverfault.com 443
Selected device en15, address 192.168.1.100, port 61967 for outgoing packets
Tracing the path to www.serverfault.com (151.101.129.69) on TCP port 443 (https), 30 hops max
 6  be2073.ccr31.jfk10.atlas.cogentco.com (154.54.0.230)  20.935 ms  20.801 ms  21.431 ms
 7  38.122.228.2  20.261 ms  20.135 ms  19.685 ms
 8  151.101.129.69 [open]  27.103 ms  27.327 ms  27.026 ms

我已使用 wireshark 验证 traceroute 是否正在发送 TCP SYN 并获取 ICMP TTL 超出响应。为什么它不起作用?

答案1

较新版本的 MacOS 甚至 Ventura 中的 traceroute 版本都没有损坏,只是版本较旧。Apple 并未跟上较新 Linux 发行版中的最新版本。您看到的行为是端口选项仅设置基本端口。

引自手册页

-p port

协议特定。对于 UDP 和 TCP,设置探测中使用的基本端口号(默认值为 33434)。traceroute 希望目标主机上没有任何内容在 UDP 端口 base 到 base+nhops-1 上进行监听(因此将返回 ICMP PORT_UNREACHABLE 消息以终止路由跟踪)。如果某些内容正在默认范围内的端口上进行监听,则可以使用此选项来选择未使用的端口范围。

答案2

即使在 Ventura,MAC 上的 TCP 跟踪路由也严重中断。

查看您的 wireshark 输出 - 它不会将 TCP SYN 数据包发送到指定端口(例如 80),而是会在每次尝试时增加端口号。

因此 TCP SYN 转到端口 81、82、83 等。

相关内容