如何以简单的方式在网络中发现设备的IP?

如何以简单的方式在网络中发现设备的IP?

在我工作的初创公司,我们正在设置一个用于图像捕获和分析的设备。它是一个带有摄像头的盒子,嵌入了 Ubuntu Linux,假设我们不想将显示器连接到该设备进行配置。

有些人提出了这样的解决方案:通过网线直接将设备连接到笔记本电脑时,通过访问众所周知的 IP,就像使用路由器或调制解调器一样,获得一个配置网页。

这听起来像是一个解决方案,但事实是该设备不是路由器,正如我所见,这是一个完全不同的上下文,该设备不会将地址委托给笔记本电脑(使其成为路由器网络的一部分,它可以有一个众所周知的地址),因为它不是路由器。

所以我现在正在寻找类似的解决方案配置路由器的经验,但这不是路由器,而是用于我应该能够从众所周知的地址访问的设备。为此,我挖掘了一些关于 Zeroconf/APIPA 的信息,但从 Zeroconf RFC 3927 中,IP 地址必须是“使用伪随机数生成器在 169.254.1.0 到 169.254.254.255 范围内均匀分布”生成的。 。

我认为随机 IP 解决方案可能仍然有效,即使它不是众所周知的地址,以防有任何方法可以发现该设备拥有哪个 IP。

除此之外,该设备应该使用 NetworkManager 通过其设置的许多接口来处理连接。

那么,总结一下问题情况:

  • 设备必须通过本地网络进行配置。
  • 该设备处于开启状态,并使用网络管理器处理通过许多接口的连接,假设一个接口连接断开,它将选择另一个接口。
  • 我们正在考虑使用 eth0 别名,让 eth0 既由网络管理器处理(在与其他接口的上下文中),又通过非托管(由网络管理器)别名拥有固定 IP 访问。不确定这是否可能。
  • 这都是关于设备发现的,我还建议使用 nmap 来访问设备,但它有两个缺点:在大型网络上扫描速度很慢,并且不是简单的网页访问,必须构建使用 nmap 的客户端并用于执行发现。
  • 如果无法在众所周知的 IP 中进行简单访问,那么拥有一个随机 IP 也是一种解决方案,因为可以像网络中的打印机或类似设备一样发现该设备。
  • 可以假设,解决方案可以是一种通过网线配置直接连接到笔记本的设备并在设备的配置网页中获取对其的访问权限的解决方案,以及一种将笔记本连接到设备所在的本地网络的解决方案。也已连接,并且能够访问在网络中发现它的设备或通过替代的、奇异的和固定的地址访问它。请注意,访问本地网络路由器或使用 nmap/arp 扫描不是一个选项。

解决这个问题应该研究什么问题?人们对此有通用的方法吗?

根据我的经验,我记得配置了我的设备,但没有一个能解决问题:

  • 路由器:在众所周知的地址提供易于访问的配置网页,但它是路由器,它是网关,它将委托我自己的地址。
  • Cubox-i:我有这些设备之一,我必须在我的网络中使用 nmap 发现它并访问它的 ssh。
  • 打印机:我从未拥有过打印机,所以我不知道它的设备发现/配置是如何工作的,但以前在网络上使用过它们,它们通常列在 Windows 计算机的设备设置中。我还是得看看“Avahi”、“UPnP”、“Zeroconf”以及其他我从未接触过的领域的名字。也许这就是适合这种情况的例子。

如果有一个简单的工具可以在我的 Arch Linux 上运行并让其他设备(例如我的 Android 或 Windows 笔记本电脑)发现它的 IP,我想知道。我也考虑过广播,但我不确定这在所有局域网中都可以,因为广播可能被阻止或不可靠(对此不确定)。

答案1

最好的方法是使用avahiwhich 实现多播 dns(这就是 Apple 所说的 Bonjour)。

我会禁用网络管理器并在/etc/network/interfaces.该interfaces文件支持该ipv4ll方法,该方法使用 avahi-autoipd 配置具有 IPv4 链路层地址(169.254.0.0/16 系列)的接口。

接下来,在 avahi 中设置一项服务,以确保主机通过 bonjour 宣传自己,并将 mDNS 名称解析添加到/etc/nsswitch.conf.

如果您的系统的其余部分配置为解析 mDNS 名称,那么它应该会像魔术一样工作。

答案2

如何在网络中发现设备的 IP

如果有一个简单的工具可以在我的 Archlinux 上运行并让其他设备(例如我的 Android 或 Windows 笔记本)发现它的 IP,我想知道。

遗憾的是,目前还没有一个很好的方法来做到这一点。

  • 您可以在设备上安装 avahi-daemon,在 Windows 上安装 Bonjour。通常建议您安装此专有第三方网络软件的旧版本。它包含苹果更新程序吗? Apple 更新程序是否为更易于安装但较旧的 2.02 版本提供安全修复程序?我确信这里不会出什么问题。

    https://learn.adafruit.com/bonjour-zeroconf-networking-for-windows-and-linux/overview#microsoft-windows

    (还设置一个描述性主机名。使用 MDNS,您不需要保证主机名是唯一的。事实上,MDNS 规范说您不“应该”通过附加随机数或大 ID(如MAC 地址;尽管如此,这被认为是无缘由地推迟了用户的访问,但该协议会通过在 MDNS 主机名中附加序列号(带有破折号)来自动解决冲突。)

  • 您可以在设备上安装 Samba,并通过 TCP 上的 NetBIOS 使用旧版 IPv4 发现。 NetBIOS 可能会被某些企业 DHCP 服务器默认禁用。 http://searchenterprisedesktop.techtarget.com/blog/Windows-Enterprise-Desktop/NetBIOS-Tweak-May-Be-Needed-for-Win10-NAS-Access

    (NMB 不倾向于解决命名冲突。自动生成主机名的人们倾向于附加 MAC 地址的最后几个字符,以避免此问题)。

  • 您理想想要的是 LLMNR,这是 Windows 使用的最新协议。 systemd-resolved支持这一点,但并未广泛使用。我相信这是一个相当简单的、有记录的标准,因此您可以找到独立的开源实现。我不认为它们被广泛使用,但如果有人在商业上这样做 - 你如何使用它并报告任何错误:)。

如果你想支持Linux客户端以及Windows,你当然可以同时支持MDNS和LLMNR。

配置通过网线直连笔记本的设备

可以假设,解决方案可以是一种通过网线配置直接连接到笔记本的设备并在设备的配置网页中获取对其的访问权限的解决方案,以及一种将笔记本连接到设备所在的本地网络的解决方案。也已连接,并且能够访问在网络中发现它的设备或通过替代的、奇异的和固定的地址访问它。

解决这个问题应该研究什么问题?人们对此有通用的方法吗?

我想说这个问题的第二个最常见的解决方案如上所述,只是你错过了一个技巧。

例如,如果设备已配置了静态地址(现在未知),则此技术非常有用。

解决方案是提供一个“恢复”按钮(可能是凹进的并且需要展开回形针才能按下)。您可以在恢复模式下启动设备,该模式使用特殊的固定 IP 地址。然后,您可以连接到已知地址(使用直接电缆并手动将笔记本电脑的地址设置为位于同一子网上)并重新配置设备。

相关内容