一、为什么需要路径探测?
想知道你的数据包从电脑到服务器,经过了哪些路由器。
二、三种技术原理对比
flowchart TD
A[开始路径探测] --> B{选择探测协议}
B -->|ICMP| C[发送 TTL=1/2/3... 的 UDP/ICMP 包]
C --> D[中间路由器 TTL 耗尽]
D --> E[返回 ICMP 超时消息]
E --> F[源端获取该跳 IP]
F --> G{到达目标?}
G -->|否| C
G -->|是| H[目标返回 ICMP 端口不可达/应答]
H --> I[✅ 获得完整路径]
B -->|TCP| J[发送 TTL=1/2/3... 的 SYN 包]
J --> K[中间路由器 TTL 耗尽]
K --> L[返回 ICMP 超时消息]
L --> M[源端获取该跳 IP]
M --> N{到达目标?}
N -->|否| J
N -->|是| O[目标返回 SYN-ACK 或 RST]
O --> P[✅ 获得完整路径]
B -->|正常会话| Q[在已建立的 TCP 连接中<br>发送 TTL递增的 ACK 包]
Q --> R[中间路由器 TTL 耗尽]
R --> S[返回 ICMP 超时消息]
S --> T[源端获取该跳 IP]
T --> U{到达目标?}
U -->|否| Q
U -->|是| V[目标正常接收 ACK<br>不影响业务]
V --> W[✅ 获得完整路径]
三、三种技术核心对比(一图看懂)
flowchart BT
subgraph ICMP方案
I1[发送 UDP/ICMP] --> I2[TTL递增] --> I3[靠ICMP超时回显]
end
subgraph TCP方案
T1[发送 SYN] --> T2[TTL递增] --> T3[靠ICMP超时回显]
end
subgraph 0trace方案
O1[发送 ACK] --> O2[TTL递增] --> O3[靠ICMP超时回显]
end
ICMP方案 --> P1[❌ 设备禁用ICMP就废]
TCP方案 --> P2[❌ NAT设备丢包]
0trace方案 --> P3[⚠️ 依赖已有会话]
四、优缺点速查表
| 方案 | 工具示例 | 原理一句话 | ✅ 优势 | ❌ 缺陷 |
|---|---|---|---|---|
| ICMP | traceroute |
TTL递增,靠ICMP超时报文反推路径 | 简单通用,所有系统自带 | 路径设备禁用ICMP则完全失效 |
| TCP | traceroute -Ttcptraceroute |
TTL递增的SYN包,靠ICMP超时报文反推路径 | 可穿透仅允许TCP的防火墙 | 不完整握手被NAT/状态防火墙丢弃 |
| 0trace | 0trace |
在已有TCP会话中发TTL递增的ACK包 | 伪装成正常流量,可探测内网段,绕过防火墙 | 必须有现存的TCP连接,建议多次运行 |
五、三种场景下的路径可见性
flowchart TD
subgraph 场景1[场景1: 目标禁用ICMP]
A1[ICMP traceroute] --> A1R[❌ 终点无响应]
A2[TCP traceroute] --> A2R[✅ 可到达]
A3[0trace] --> A3R[✅ 可到达]
end
subgraph 场景2[场景2: 路径中有NAT/状态防火墙]
B1[ICMP traceroute] --> B1R[⚠️ 可能断在NAT前]
B2[TCP traceroute] --> B2R[❌ NAT丢包]
B3[0trace] --> B3R[✅ 利用已有会话穿透]
end
subgraph 场景3[场景3: 路径中有IDS/IPS]
C1[ICMP traceroute] --> C1R[⚠️ 可能告警]
C2[TCP traceroute] --> C2R[❌ 易被识别为扫描]
C3[0trace] --> C3R[✅ 隐蔽性最高]
end
六、什么情况下永远探不到完整路径?
flowchart LR
D1[防火墙丢弃所有出站ICMP] --> R[❌ 收不到任何回显]
D2[防火墙重写TTL值] --> R
D3[路径中有七层代理/负载均衡] --> R
D4[目标后无三层设备<br>如容器/虚拟网络] --> R
D5[IPS主动检测并干扰] --> R
R --> Z[结论: 路径探测不是万能的<br>需结合业务拓扑综合判断]
七、一句话选型建议
flowchart TD
Start[我要探测路径] --> Q1{目标是否允许ICMP?}
Q1 -->|是| Use1[✅ 直接用 traceroute<br>最快最简单]
Q1 -->|否| Q2{是否有已有的TCP会话?}
Q2 -->|是| Use2[✅ 用 0trace<br>最隐蔽]
Q2 -->|否| Use3[⚠️ 用 traceroute -T<br>但可能被NAT丢包]
八、核心结论
没有万能的路径探测工具,ICMP最快但最容易被禁,TCP能绕过ICMP限制但怕NAT,0trace最隐蔽但依赖已有会话。实际工作中,三种方法结合使用,并接受“某些路径永远看不到”的现实。
原文 https://blog.csdn.net/2301_79518550/article/details/163198833