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

Wes*_*ler 11 c c++ linux macos

在一个小型网络中,比如20个节点或更少,我的程序在测试仪器上需要知道"谁在那里?" 由MAC而不是IP.我将插入随机网络,并且需要能够在不必知道网络中的任何地址,MAC或其他情况的情况下执行此操作,并且知道我不能依赖DHCP.DHCP服务器可能关闭并且节点没有IP地址和/或我无法获得一个是完全合理的.说实话,我不需要IP,我们的测试协议是MAC层,而不是IP.

那么,我如何确定我的乐器的邻居的MAC地址?这听起来很像LLDP但是倒退,即"谁在那里",而不是"我在这里,我可以做到这一点......".我必须假设没有IP分配给端点,所以没有ARPing,没有NMAP等.

注意我应该补充一点,这是一个有线网络.

abl*_*igh 6

在一般情况下,没有MAC级协议可以发送并保证网络中每台机器的响应(我假设您在这里使用以太网,因为我认为WLAN上的情况有所不同).IE在MAC层没有广播(甚至是IIRC单播)主机保证响应.使用IP在顶部,您可以IP广播并检查ARP缓存.

执行此操作的最佳方法是(在我看来)是使用交换机/学习桥在以太网上工作的方式,即被动地以混杂模式侦听数据包并记录其MAC地址.你不会发现完全静默的主机,但是在它发送数据包之前都不会切换.根据定义,无论如何都无法找到完全无声的主机.

  • 当然.使用libpcap.如果这是一个很好的答案,也许你想接受它:-) (2认同)