在 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 等。