我正在同一网络中使用 tracert(Windows) 和 traceroute(linux) 跟踪一些服务器。
但输出不同。tracert
可以跟踪目标服务器。
但 traceroute 不能。traceroute 输出如下(省略了一些星号)。
traceroute to xxx.com (112.125.57.195), 64 hops max, 52 byte packets
1 192.168.1.1 (192.168.1.1) 1.347 ms 0.729 ms 1.083 ms
2 113.109.124.1 (113.109.124.1) 6.519 ms 5.903 ms 6.368 ms
3 183.56.38.137 (183.56.38.137) 6.094 ms 37.891 ms 5.314 ms
4 58.61.243.129 (58.61.243.129) 7.002 ms 8.967 ms 7.673 ms
5 61.144.3.22 (61.144.3.22) 6.169 ms 6.147 ms 5.359 ms
6 202.97.34.117 (202.97.34.117) 40.194 ms 532.342 ms 536.089 ms
7 220.181.16.54 (220.181.16.54) 578.522 ms 586.950 ms 627.117 ms
8 220.181.70.150 (220.181.70.150) 607.408 ms 681.635 ms 671.447 ms
9 182.92.255.228 (182.92.255.228) 760.188 ms 766.492 ms 399.930 ms
10 * * *
11 * * *
这样就无法跟踪目标服务器了。而且所有的输出都是星号。
答案1
tracert(windows)和traceroute(linux)的区别在于:
tracert(windows) 将仅使用 ICMP 回显请求。
traceroute(linux) [并且在某种程度上依赖于linux发行版] 默认为UDP回显请求。
这两种解决方案都非常古老,而且令人惊讶的是它们已经运行了很长时间,因为在互联网发展的大部分时间里,互联网的许多部分仍然会传递这两种类型的流量而不进行过滤。然而,随着时间的推移,越来越多的核心流量路由器开始过滤这些“回显”请求。(有关回显请求的更多信息,请从此处开始:https://en.wikipedia.org/wiki/Echo_Protocol)
TCP Traceroute 使用 ICMP 或 UDP 回显请求的替代方案,因为它使用能够更好地穿越现代防火墙的 TCP SYN 数据包。
TCP Traceroute on Windows And Linux
http://simulatedsimian.github.io/tracetcp.html
https://github.com/SimulatedSimian/tracetcp/releases
并写下其工作原理:
https://support.logicboxes.com/helpdesk/index.php?/Knowledgebase/Article/View/11/37/using-tcp-traceroute-on-windows-and-linux
以下是一个简单/典型用法示例的副本:
C:\tracetcp>tracetcp www.redhat.com:443 -h 3
Tracing route to 184.85.48.112 [a184-85-48-112.deploy.akamaitechnologies.com] on
port 443
Over a maximum of 30 hops.
3 32 ms 50 ms 56 ms 172.20.16.65
4 34 ms 14 ms 33 ms 172.26.16.1
5 503 ms 14 ms 68 ms 172.20.7.34
6 43 ms 170 ms 25 ms 203.117.35.9
7 28 ms 86 ms 26 ms 203.117.34.2
8 216 ms 168 ms 99 ms 203.117.34.14
9 * * * Request timed out.
10 Destination Reached in 211 ms. Connection established to 184.85.48.112
Trace Complete.
您必须安装 winpcap 库才能使此版本正常运行。tracetcp 已使用此库的 3.* 和 4.* 版本进行测试。(因为 WinXP SP2 删除了原始套接字。)但如果您是网络人员,您可能已经安装了 winpcap 和 wireshark。
答案2
*NIX(操作系统)中的大多数 traceroute 默认发送 UDP 数据包(尽管通常可以选择更改此设置),Windows 则默认使用 ICMP 回显请求。