用于检测网络中设备的协议(或服务发布/发现)

用于检测网络中设备的协议(或服务发布/发现)

我们将一些嵌入式设备连接到网络中。我现在正在寻找一种查找设备 IP 并识别它们的方法。我们使用 Windows PC,我即将编写一个可以做到这一点的 C# 工具。

  1. 我考虑发送一个 udp 广播,并且在 ack ie 中是设备的 ip,这意味着设备需要一个运行的守护进程来为自己分配一个 ip。

  2. 在设备上运行服务(如打印机),在 PC 上只需查找服务即可。
    我读过一些内容,如 apipa、zeroconf、ipv4 本地链接、bonjour、dns-sd、mdns、bonjour;它们可以自动分配 ip 并在网络中发布服务。

我的问题是,有人能推荐什么对我的任务有好处吗?-协议或服务的资源(内存/CPU 使用率)使用率应较低。-
是否有一些标准协议可供使用?
-DNS 是个好主意还是只是为了查找设备的 IP 而消耗资源?
-当周围没有 dhcp 服务器时也应该可以工作。

编辑:稍微澄清一下:IP 配置是自动的。需要关注的问题是如何告诉 PC 网络中的哪个 IP(或者在这个花瓶中的直接连接只有一个)属于设备(身份)。

答案1

我的问题是,有人可以推荐我什么对我的任务有益吗? - 协议或服务的资源(内存/ CPU 使用率)使用率应较低。 - 是否有一些标准协议可供使用?

检测以太网上的设备(及其属性,如管理 IP 地址)的标准方法是使用链路层发现协议

您可以找到 lldp 守护进程列表这里

以太网 Vlan 中的所有主机都将看到 LLDP 公告,因为它们被发送到多播 mac 地址;这也意味着 LLDP 公告的范围仅限于 Vlan。如果您需要跨 Vlan 进行设备注册和检测,则需要构建自己的 IP 公告协议……UDP 将是传输的不错选择。

DNS 是一个好主意吗?或者它是否只是为了查找设备的 IP 而消耗资源?

如果您只寻找 IP 地址,而不关心是否可以判断该设备是否是您的嵌入式系统之一,则可以使用移动DNS;然而,这更加危险,因为您无法保证客户 LAN 中不会发生命名空间冲突。

如果客户没有 DHCP 服务器,OP 的嵌入式系统应该如何获取 IPv4 地址?

RFC 3330如果 DHCP 服务器不可用,则分配 169.254.0.0/16 用于单链路通信。经过深思熟虑,这可能是最安全的地址块;但是,您的公司应该鼓励客户使用 DHCP 自行分配地址,而不是在 169.254.0.0/16 子网中进行某种形式的自动配置。

如何在 169.254.0.0/16 内分配单独的 IP 地址是我们无法为您决定的问题……有几种可能性:

  • 通过散列您的 mac 地址值来分配 169.254.0.0/16 内的特定地址,以使任何客户的 VLAN 上预期的最大系统数量不太可能发生冲突
  • 监听系统的 LLDP 问候间隔的某个倍数,并从 169.254.0.0/16 中分配一个尚未使用的地址

答案2

nmap 实用程序非常擅长确定网络上哪些 IP 地址(由您选择!)被占用。如果主机将回复任何验证其存在的请求,则 nmap 将显示它。

否则,您可以摆弄 ARP。所有主流操作系统都有几种实用程序可以执行此操作(在 Win32 上查找 Cain,在 Linux 上有很多)。这些实用程序将向每个地址发送 ARP 广播/“ping”,询问是否有设备连接,如果有,则询问其 IP 是什么。

相关内容