0

对于一系列嵌入式设备的配置软件,我们必须通过IP地址找到设备。对于任何给定的 IPv4 地址,我们需要

  • 找出MAC地址(因为可以过滤MAC地址)
  • 查明设备是否可达,即 ping 它。

我不确定最好的方法是什么。起初,我们尝试调用SendARP它,它工作得很好,但是如果 IP 地址已经在那里,它只使用缓存,并且似乎没有办法绕过这个(除了刷新整个缓存,这是一个特权操作)。这意味着我们必须执行第二步,然后 ping 设备(我认为我们应该先 ping 它,然后SendARP在它可以访问时调用),但是如果设备可以访问,这似乎是一个太多的步骤。或者如果 ping 成功,正确的地址是否已经在 ARP 缓存中?IP地址可能会相对频繁地更改其对应的MAC地址,因为不同的设备连接在单独的网络中,所以我认为我们必须强制执行实际的ARP请求。

我能想到的替代方法是调用ResolveNeighbor/ ResolveIpNetEntry2。至少后者的文档似乎是我们需要的(清除此IP地址的ARP缓存并发送实际请求),但它只是Vista或更高版本。在 XP 上,我们必须调用ResolveNeighbor,这更简单,但不再记录。这涉及检查正确的功能(或者只是调用ResolveNeighbor,如果它失败,它记录在 Vista 或更高版本上执行,调用ResolveIpNetEntry2)。

我只是不确定最好的方法是什么,或者我是否遗漏了什么。你会推荐什么?请注意,如果有的话,我也会采用纯 .NET 解决方案;)

更新

似乎 ResolveNeighbor 尽管有文档记录,但在 Windows XP 上并不存在,至少在 IPhlpapi.dll 中不存在。这是否意味着该功能在 XP 上不可用?


为了弄清楚这一点,我既没有设计设备,也没有设计部署过程。对于这个问题,只要假设

  • 所有设备都已经有 IP 地址并且
  • 计算机在同一子网中,但不一定属于网络(即它是技术人员的便携式计算机),并且
  • IP 地址在工具启动时是已知的,即用户可以输入它们或从配置文件中读取它们,并且
  • 同一台计算机,甚至可能没有重新启动工具,在几秒钟前被用于连接到具有相同 IP 地址的完全不同的网络,例如布局相同的不同建筑物。

这意味着我可能在A楼有IP 192.168.0.100,即MAC地址A,然后将计算机连接到B楼,该楼也有IP 192.168.0.100,但这次是MAC地址B。用户说“连接到 192.168.0.100" 并且我们必须确保 192.168.0.100 不仅可以访问,而且实际上是 MAC B 而不是 MAC A。我认为 ResolveIpNetEntry2 实际上会让我这样做,但它在 Windows XP 和那里不可用似乎不是这个的替代方案。

我不确定我还能如何理解这一点。重点不在于如何发现或安装设备。

4

2 回答 2

1

我过去在类似情况下所做的是 Ping 到所需的地址,然后从 C# 应用程序执行 arp 命令以获取所需的 MAC。

每次您需要访问 MAC 时,您都会刷新它以执行此过程。

于 2012-03-28T13:20:31.483 回答
1

IP地址可能会相对频繁地更改其对应的MAC地址,因为不同的设备连接在单独的网络中,所以我认为我们必须强制执行实际的ARP请求。

嗯?

找出MAC地址(因为可以过滤MAC地址)

目的是什么?

我认为您需要退后一步,因为现在我认为您在问“我需要获取不同子网上的 IP 地址的 MAC 地址”。这是不可能的。

听起来您正在尝试设计软件来管理网络连接设备,并且您正在寻找服务发现解决方案。


评论后更新:
这是一款用于配置和更新联网楼宇自动化控制器的软件。许多这些设备将连接到技术人员的计算机上或从技术人员的计算机上移除。技术人员的计算机上可能有多个具有相同 IP 地址的设备(一个接一个,而不是同时),所以我们不能依靠 ARP 缓存来找出 MAC 地址。设备将与计算机位于同一子网中(即计算机将被放入设备的子网以连接到它们)。如果您知道另一种可靠的方法 a) ping 设备并 b) 获取其 MAC 地址,我很感激 :)

所以你的过程是两步的?

  • 发现和配置设备连接到控制计算机的分段过程
  • 稍后,这些设备将被部署并连接到与控制计算机相同的子网。

设备出厂时预配置了相同的 IP 地址?

如果您能够 ping 同一子网上的设备,则 arp 缓存应该具有正确的 mac 地址。但是,如果这种情况意味着插入的多个设备可能会争夺同一个 IP 地址,那么您就会遇到问题。

如果您希望能够将这些设备销售到校园环境中,那么您不能依赖与控制器位于同一子网或同一子网中的所有设备。建筑物之间的子网可能不可用。

我对设计的第一个建议是让设备通过 DHCP 获取其 IP 地址,并将控制器的名称或地址作为 DHCP 选项包括在内。控制器被实现为“服务器”。设备可以从控制器中获取它们的配置。设备可以在运行时向控制器注册。通过配置签名引入安全性的许多选项。证书认证的通讯等


更新问题后更新。

我不确定我还能如何理解这一点。解释场景是一个好的开始。

很多这些设备将连接到技术人员的计算机上或从技术人员的计算机上移除。是描述您从那时起详细阐述的内容的一种特殊方式。

我将不再试图猜测你在做什么,我将不再试图从你自己身上拯救你。

是的,如果您可以成功 ping 同一子网上的 IP 地址,那么 ARP 缓存应该包含该 IP 地址的当前 MAC 地址。我建议您针对您使用的每个操作系统进行测试,因为访问缓存可能存在变数。

于 2012-03-28T10:39:06.067 回答