TCP模式能绕过ICMP限制,因中间路由器仍按TTL规则处理TCP SYN包并返回ICMP Time Exceeded,目标主机未监听端口时返回RST或ICMP Port Unreachable,traceroute可据此构建路径;-T需root权限,常用组合为traceroute -T -p 80 example.com。

Linux 中用 traceroute -T(即 TCP 模式)能有效绕过只屏蔽 ICMP/UDP 的防火墙,让链路探测在受限网络中依然可见。
为什么 TCP 模式能绕过 ICMP 限制
很多企业网、云环境或运营商设备默认丢弃 ICMP 超时(Time Exceeded)或目的不可达(Port Unreachable)报文,导致普通 traceroute 大量显示 *。而 -T 参数改用 TCP SYN 包探测,中间路由器仍需按 IP/TTL 规则处理:TTL 减为 0 时,即使不回 ICMP,多数设备仍会生成并返回标准的 ICMP Time Exceeded;目标主机若端口未开放,也会返回 RST 或 ICMP Port Unreachable——这两类响应都可被 traceroute 正确识别并用于路径构建。
基本用法与关键参数
最常用组合是指定端口 + 禁用 DNS 解析,兼顾兼容性与效率:
-
traceroute -T -p 80 example.com:用 TCP SYN 探测 80 端口,适合 HTTP 类服务 -
traceroute -T -p 443 -n example.com:跳过反向 DNS 查询,加快输出,适用于 HTTPS 目标 -
traceroute -T -p 22 -m 20 example.com:限定最多 20 跳,避免卡在长路径末尾
实际使用中的注意事项
TCP 模式不是万能的,需结合场景判断:
- 目标端口必须“可达但未监听”,如 80/443/22 等常见服务端口;若端口被防火墙直接 DROP(不响应),该跳可能仍显示
* - 某些严格策略的云平台(如 AWS Security Group 默认拒绝所有入向)可能连 TCP SYN 都不放行,此时建议搭配
tracepath或尝试-I(ICMP)交叉验证 - 非 root 用户无法使用
-T,因原始套接字权限受限;普通用户可用sudo traceroute -T ...或切换至具备 cap_net_raw 权限的账户
对比其他探测方式的适用场景
当 -T 效果不佳时,可快速切换验证:
-
traceroute -I example.com:改用 ICMP Echo,适合对 ping 放行但封 UDP 的内网 -
tracepath example.com:无需 root,自动尝试路径 MTU 发现,适合容器或最小化系统 -
traceroute -n -U -p 53 example.com:用 UDP+DNS 端口,部分 DNS 基础设施对此更宽松











