c# - 如何发现连接到第2层交换机的所有主机?

时间:2016-09-29 11:10:15

标签: c# networking ethernet switching

我有一个像这样的局域网:network configuration

我正在用C#编写程序。该软件可在所有主机上运行。 软件需要知道哪些主机连接到自己的第2层交换机。 在不干扰服务器的情况下完成此操作非常重要,因为此软件适用于LanParty,并且服务器上的硬件和软件以及相同的LAN也会发生变化。

了解所有主机的位置并不重要,但您只需知道哪些主机连接到同一台交换机。

在该示例中,“主机A”知道“主机C”和“主机E”连接到同一交换机,而所有其他主机不连接。

1 个答案:

答案 0 :(得分:1)

如果交换机使用SNMP,您只需询问它们的MAC地址表,并确定哪些主机连接在哪里。

如果他们不这样做,你将不得不诉诸这样的技巧:

  • 假设所有主机都连接到单个交换机
  • 在所有主机之间建立通信
  • 将角色分配给3个任意主机:发件人接收器接收器
  • 选择当前未在网络中使用的MAC地址
  • 接收器将其NIC配置为新的MAC地址并将一个数据包发送到接收器(此数据包通过的所有交换机现在都知道该地址)
  • 所有其他主机将其NIC设置为混杂模式
  • 发件人收件人发送数据包(如果发件人连接到未学习收件人的交换机新地址,该交换机将在所有端口上泛洪数据​​包。如果其中一个或多个端口连接到其他未学习该地址的交换机,这些交换机也会泛洪)

因此,如果接收器以外的任何主机看到第二个数据包,则证明主机和发件人均连接到不在接收器接收器之间的直接路径上。

我们假设接收器接收器以及所有未看到第二个数据包的听众都连接到一个交换机,发件人和所有确实看到它的听众与另一个人相连。 再次尝试使用新的MAC地址和三个角色的新分配,直到您有足够的信息来确定网络拓扑(或直到您放弃并接受单个切换的第一个假设)。