C / C ++ Linux,如何在不使用IP的情况下在networking上查找邻居(仅限MAC)

在一个小的networking中,假设有20个节点或更less的节点,我的程序在testing仪器上需要知道“谁在哪里? 由MAC不是通过IP。 我将插入随机networking,需要能够做到这一点,而不必知道任何地址,MAC或其他在networking中,知道我不能依靠DHCP。 DHCP服务器可能closures,节点没有IP地址和/或我无法获得IP地址是完全合理的。 说实话,我不需要IP,我们的testing协议是MAC层,而不是IP。

那么,我怎样才能确定我的仪器的邻居的MAC地址? 这听起来很像LLDP,但倒退了,即“谁在那里”,而不是“我在这里,我可以做到这一点…”。 我必须假设没有IP分配给端点,所以没有ARP,没有NMAP等。

注意我应该补充说,这是一个有线networking。

在一般情况下,没有任何MAC级别的协议,您可以发送并保证网络上每台计算机的响应(我假设您使用的是以太网,因为我相信WLAN上的东西是不同的)。 IE没有广播(或者甚至是IIRC单播)在MAC层,主机被保证响应。 在IP上面,您可以IP广播并检查ARP缓存。

这样做的最好方法(在我看来)是使用交换机/学习网桥在以太网上工作的方式,即被动地侦听数据包的混杂模式并记录它们的MAC地址。 你不会发现完全无声的主机,但是一个交换机,直到它发送一个数据包。 根据定义,无论如何都无法找到一个完全无声的主机。