我遇到了以下问题:
从 Windows 7运行tracert
会将所有跳数返回到给定的服务器。traceroute
从 Fedora 30 运行,使用相同的连接和相同的目标,除了网关 IP 之外,它仅返回 * * *。
你能解释一下为什么它在 Windows 上可以运行,但在 Fedora 上却不行吗? 有什么区别?
另外,您能否告诉我如何traceroute
在从 Fedora 运行时进行回程跳转?
答案1
视窗'tracert
使用 ICMP 同时增加 TTL 进行探测:
如何使用 TRACERT 实用程序
TRACERT 诊断实用程序通过向目的地发送 Internet 控制消息协议 (ICMP) 回显数据包来确定到目的地的路由。
Fedora的traceroute
默认情况下,发送 UDP 探测,就像以前的 Unix traceroute 实现一样。提示 UDP 是默认的(除了在写这个答案之前通过执行捕获进行双重检查外)来自男人首先讨论UDP:
我们不希望目标主机处理 UDP 探测数据包,因此将目标端口设置为一个不太可能的值(您可以使用 -p 标志更改它)。ICMP 或 TCP 跟踪路由不存在这样的问题(对于 TCP,我们使用半开技术,这可以防止我们的探测被目标主机上的应用程序看到)。
两种工具都希望获得ICMP 时间已超出作为建立路线的响应。
沿着这条路径,不同的路由器可能会根据所使用的探测方法选择不同的答案(即:根本不回答)。
如果您知道 ICMP 探测更适合您的测试,您可以在 Fedora 上执行相同的操作:
traceroute --icmp destination
与 UDP 相反,ICMP 通常需要制作特殊数据包,因此该命令可能需要 root 权限才能使用此选项运行。