我正在从 WiFi 模块广播 mDNS 服务。我需要在我的 Linux PC 上发现它并获取其 IP 地址。
- 我使用了 mdns-scan 命令并列出了服务名称。
- 我使用了 avahi-browse --all 并列出了我的服务名称。
- 但是我如何获取该服务的 IP 地址?这是我的要求。
- 在 Android 应用程序中,我能够获取服务的完整详细信息。如何在 Linux 中获取它?
- 我也尝试了 config -a 和 nmap。
答案1
我使用了 avahi-browse --all 并列出了我的服务名称。
使用avahi-resolve --name
将主机名映射到其 IP 地址。
或者,要使 mDNS*.local
主机名在系统范围内可解析,您可以使用nss-mdns(使用 Avahi 后端)或 nss-resolve(使用 systemd-resolved 后端)。这将允许任何应用程序使用 mDNS 名称,就像它们是常规 DNS 一样。
在 Android 应用程序中,我能够获取服务的完整详细信息。如何在 Linux 中获取它?
在 Android 应用程序中,您使用的是操作系统提供的 API。同样,在 Linux 中,您应该使用正确的操作系统提供的 API –libavahi-客户端或者libavahi-glib–不是随机 CLI 工具粘在一起。您列出的所有工具都是供系统管理员手动使用的,而不是用于编写脚本。
DNS-SD 将服务的附加信息存储在 TXT 记录中。如 API 示例所示,“解析回调”函数将自动接收 TXT 记录数组作为参数,无需执行任何额外操作。
答案2
我不确定您是否需要这个自动化脚本,在这种情况下这可能不是最好的解决方案,但一个简单的ping
命令也会让您获得 IP 地址。
看看这个例子:
$ ping lightpizero.local
PING lightpizero.local (192.168.0.104) 56(84) bytes of data.
本例中的地址显然是192.168.0.104