![如何测量两个 IP 之间的跳数?](https://linux22.com/image/1602576/%E5%A6%82%E4%BD%95%E6%B5%8B%E9%87%8F%E4%B8%A4%E4%B8%AA%20IP%20%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B7%B3%E6%95%B0%EF%BC%9F.png)
我想测量我的目标主机和任何其他主机之间的跳数。目标主机是确定的,其他主机是随机选择的。我无法控制它们。我该怎么做?换句话说,我想测量两个我无法操作的主机的跳数。非常感谢。
答案1
我不愿意用“你不能这样做”这样的笼统说法来回答。因为很难证明否定。但如果你无法访问其他任何一台主机,你就无法确定它们之间的路径。
您说“它们都不能被我控制”。您不需要“控制”它们——您只需要能够在它们上运行程序。但您接着说它们是“我无法操作”的主机。这听起来好像您无法获得足够的访问权限,甚至无法运行像 traceroute 这样的程序。
我能想到的最好的办法是,你可以从你的机器到每台主机运行跟踪路由,然后查看是否有任何共同的跳数。这不能保证任何事情,但它至少可以为你提供潜在的两个远程主机之间的路由。
例如,如果我运行到 www.example.com,它可能从我的本地网关开始,然后到达我的 ISP 的路由器(全部是 AT&T),然后是我所在城市中心的 AT&T,然后是芝加哥的 AT&T 路由器,然后是底特律的 AT&T 路由器,然后是属于 Example 的路由器。com位于底特律的 ISP(称之为 Century Link),然后是位于 Example.com 底特律数据中心的 Century Link 路由器,然后是 Example.com 的路由器,然后是 www.example。com机器。
类似地,如果我运行到 www.example.网,它可能从我的本地网关开始,然后到达 AT&T 的路由器,然后是位于我所在城市中心的 AT&T,然后是位于芝加哥的 AT&T 路由器,然后是位于达拉斯的 AT&T 路由器,最后是属于 Example 的路由器。网位于达拉斯的 ISP(称之为 Sprint),然后是位于 Example.net 达拉斯数据中心的 Sprint 路由器,然后是 Example.net 的路由器,然后是 www.example。网机器。
因此,从 www.example 出发的路线可能为。com到 www.example.网可以从 Example.com 的底特律数据中心开始,通过 Century Link 从该数据中心跳到底特律、芝加哥、达拉斯,然后到达拉斯的 Sprint 路由器,然后再到 Example.net 的达拉斯数据中心的 Sprint 路由器,然后是 Example.net 的路由器,最后是 www.example。网机器。而且 Sprint 可能有从底特律到达拉斯的直达路线,从而节省了中途转乘。
再次强调,这并不意味着这就是此类流量会采取的路径,但它给出了一个可能的上限。
如果您只对计数感兴趣,而不是所采取的具体路线,那么您能做的最好的事情就是断言从 B 到 C 的跳数绝不会大于(从 A 到 B 的跳数)加上(从 A 到 C 的跳数)。而且它几乎肯定会至少少一个,因为它不应该在转身前往 C 之前一直到达 A。(尽管路线可能会随着机器的来来去去而变化,因此这进一步使事情变得复杂。)
如果您可以提供更多有关为什么要这样做的信息,我们也许能够提供其他解决方案。