C++ 网络扫描c++;

C++ 网络扫描c++;,c++,winapi,network-programming,ipv6,arp,C++,Winapi,Network Programming,Ipv6,Arp,我们正在开发一种类似于Fing的网络扫描功能。我们需要发现局域网上可用的网络设备,并获取它们的IP和MAC地址。 我们当前的实现是基于ARP表监控的。因此,我们只需每隔固定时间获取ARP表,然后将当前ARP表与前一个ARP表进行比较,以找到添加和删除的设备。这种方法可行,但并不完美,因为从设备连接到局域网的时刻到ARP表更新的时刻之间可能会有很大的延迟 因此,我们希望改进当前的实施。我们的想法是获得LAN的IP地址范围(我们知道子网掩码),然后我们可以对该范围内的每个IP地址使用SendARP(

我们正在开发一种类似于Fing的网络扫描功能。我们需要发现局域网上可用的网络设备,并获取它们的IP和MAC地址。 我们当前的实现是基于ARP表监控的。因此,我们只需每隔固定时间获取ARP表,然后将当前ARP表与前一个ARP表进行比较,以找到添加和删除的设备。这种方法可行,但并不完美,因为从设备连接到局域网的时刻到ARP表更新的时刻之间可能会有很大的延迟

因此,我们希望改进当前的实施。我们的想法是获得LAN的IP地址范围(我们知道子网掩码),然后我们可以对该范围内的每个IP地址使用SendARP()。这将更新ARP表,以便我们可以继续使用原始方法。这对于IPv4网络应该可以很好地工作。但是,我们应该如何处理IPv6网络呢

事实上,我们对IPv6扫描有一些想法,但我们不确定,因此非常感谢各位的帮助:

  • 我们可以ping地址ff02::1。理论上,当我们ping这个广播地址时,IPv6设备应该响应,但它看起来将取决于设备设置。我不确定这是否会强制更新Windows ARP表
  • 尝试使用网络发现协议,它似乎是IPv4 ARP的替代方案。但我找不到任何允许轻松使用NDP的Windows API
  • 因此,我的问题是:

  • 如果我们如上所述使用SendArp(),它会正常工作吗
  • 有没有办法在IPv6网络中强制ARP表更新 提前感谢,


    Vitaly

    根据您的用户名,这是一条有趣的“谢谢”消息。在消息末尾添加签名是一个习惯:)IPv6不使用ARP(ARP使用广播,IPv6没有广播),因此没有ARP缓存。有一个邻居缓存和一个目标缓存。网络协议实际上并不是为您想要做的事情而设计的,但是IPv6应该在其邻居缓存中有一组相当完整的邻居。邻居将发送信息,这些信息将相当频繁地更新缓存@感谢您的回复!您是对的,ARP表被IPv6的邻居缓存替换了。但是,根据msdn,ARP缓存和邻居缓存也可通过使用。我正在通过打开和关闭IPv6设备来测试邻居缓存更新,我注意到缓存在我显式ping设备之前不会更新。它会随着设备发送邻居广告而定期更新。这些消息类似于免费的ARP消息,但在IPv6上更为常见。