如何从单个设备获取“Bonjour 服务名称”?

如何从单个设备获取“Bonjour 服务名称”?

我有两种类型的设备,我想通过以太网将其连接到主机。我想知道这两种设备类型中的哪一种已连接。

两种设备都使用 Avahi/Bonjour,并具有所谓的“Bonjour 服务名称”,其中包含可用于区分两种设备类型的有用信息,但网络要求意味着我无法使用统一的 mDNS 浏览,因为它会从主机的辅助网络端口发出(这是不允许的)。设备始终将此“Bonjour 服务名称”用作其广播的所有服务的第一部分(例如,,UsefulDeviceName._http._tcp.local等)。UsefulDeviceName._ftp._tcp.localUsefulDeviceName._telnet._tcp.local

两种类型的每种设备也都有自己独特的 DNS 名称,但这只是[GenericPrefix][MacAddress].local,不足以区分它们(它们来自同一制造商,因此两种类型的设备都使用相同的 MAC 块)。

到目前为止,我尝试过的每个工具都会在网络上进行 mDNS 广播并显示 Bonjour 服务名称,但不符合“不使用所有端口”的网络要求。运行类似返回正常的 DNS 名称,而不是 Bonjour 服务名称。

我们将知道设备的 IP。是否有一个简单的 Linux 命令可以询问设备“您的 Bonjour 服务名称是什么?”/“您有哪些 Bonjour 服务名称?”,可以依靠该命令仅通过设备将连接到的接口发送数据包,而不是更广泛的网络?

答案1

答案似乎是“没有可靠的方法可以做到这一点”。并非所有设备都会监听/响应另一个答案中列出的 dig 命令,并且在网络上查找 mDNS 名称的其他所有操作(例如avahi-browse和行为不当的mdns-scan)都需要多播/广播,不能用于探测单个机器。

答案2

dig应该可以工作,如果你发送与各种“mDNS浏览器”工具相同的查询:

_服务._dns-sd._udp.本地指针@IP地址-p 5353

(可选择添加+short。)

请注意,没有“Bonjour 服务名称”——每个设备可以自由地以各种名称注册多个服务。

相关内容