在本地网络中发现嵌入式设备?

时间:2014-12-20 09:56:48

标签: android sockets networking embedded broadcast

我正在尝试构建一个可以连接到路由器的嵌入式设备。 但我希望能够知道设备是否使用PC或移动设备连接到路由器。

例如: PC如何检测谷歌Chromecast是否连接在同一网络上?

  • 我是否需要与特定端口上的网络中的每个IP进行通信才能询问?
  • 或者我是否需要让嵌入式设备每隔N秒播放一些信息?

谢谢,

1 个答案:

答案 0 :(得分:3)

在任何情况下,您都应该考虑在嵌入式设备上执行Gratuitous ARP。免费ARP将向您的LAN上的所有设备宣布新设备已加入,以便他们可以更新其ARP缓存。

就发现嵌入式设备的PC /移动设备而言,您有几个选择:

选项1

如果我们可以假设这是一个典型的扁平家庭网络,其中所有设备都在一个子网上,并且有一个网关路由器 *,那么您可以为嵌入式设备提供唯一的{{ 3}}。如果您打算销售此设备,则需要OUI,除非制作芯片组的人已经为其提供了MAC地址。您的PC /移动应用程序可以定期检查其ARP缓存中是否有与您期望的唯一OUI匹配的OUI。

如果网络不扁平且有多个路由子网或VLAN,则无法使用。下面是一种可能的情况:假设您的嵌入式设备连接到客户端桥接范围扩展器。如果您的PC / Mobile应用程序位于主要访问点,它将永远不会看到嵌入式设备的MAC地址 - 而是会看到客户端桥接器的MAC地址。多个IP将映射到客户端网桥,因为客户端网桥和客户端网桥将切换数据包。

*我把术语路由器用斜体字表示,因为大多数家用路由器只是在WAN / LAN之间进行NAT,路由器的LAN端就像第2层交换机一样运行。

选项2

您可以执行广播ping请求,例如。 ping xxx.xxx.xxx.255。您将从接受广播ping请求的所有设备获得回复。只需确保您的设备可以。然后,一旦有了IP地址列表,就可以尝试使用所有这些IP地址在您选择的任意端口上打开TCP套接字,然后发送一些唯一的握手数据包。您的嵌入式设备应该通过此端口进行侦听,并且应该对此唯一数据包进行一些唯一的回复。局域网上的大多数设备通常不允许打开这个套接字,但是如果他们这样做,他们就不应该理解你发送的唯一握手消息。

选项3

发送带有一些唯一握手有效负载的广播UDP数据报。然后,您的嵌入式设备应该使用一些唯一的响应来回复此广播UDP数据包的发送方。在您的PC /移动应用程序收到此响应后,您可以打开一个TCP套接字,其中包含响应来自的IP地址。