假设您有2台级联或链接在一起的网络交换机和3台主机。
假设两个主机位于同一台交换机(主机A和B)上,而第三台(主机C)位于另一台交换机上。
是否可以通过编程方式检测到主机A和主机B在同一台交换机上,并且主机C与主机A和B相距一跳?我知道可以用路由器来完成,但是交换机呢?
如果可以的话,C语言中是否有任何代码可供我检测到?
最佳答案
直接-不,但是有一些方法。请注意,其中一些可能被视为非法。
最明显和最简单的方法是测量延迟,请参见http://www.ruggedcom.com/pdfs/application_notes/latency_on_a_switched_ethernet_network.pdf。您可以先直接连接计算机,然后测量它们自己的延迟(并且可能需要进行一些内核调整以最小化和/或稳定它),然后通过自己的开关,然后通过网络测量延迟并比较这些值。
通过在两个主机之间发送大量流量并查看其如何影响来自其他主机的测量,可以增强上述方法
您可以通过从随机源MAC地址发送帧来使交换机上的CAM表溢出,这将有效地将其转变为集线器,连接到它的其他主机将通过获取不定向到它们的流量来注意到这些集线器。这样,很容易知道两个主机在同一台交换机上
对于多台链式交换机和/或从多台机器执行后者,您将获得它们之间的L2跳数
请参见http://www.blackhat.com/presentations/bh-usa-02/bh-us-02-convery-switches.pdf,或Google“第2层安全性”。
关于c - 当前是否有两个以太网端点可以发现它们之间有多少交换机或路由的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8062708/