如何在 OSX 上通过 IPv6 进行反向 mDNS?

如何在 OSX 上通过 IPv6 进行反向 mDNS?

我正在寻找一种仅通过 IPv6 在 OSX 上进行反向 mDNS 查询的方法。我对使用 IPv4 的解决方案不感兴趣。

以下内容适用于 Linux dig 9.16.1:

dig +short @ff02::fb -p 5353 -x 2001:db8::1

dig 在 OSX 上使用 homebrew 安装了 9.16.7,使用完全相同参数的命令会产生超时。Wireshark 上没有任何传出查询的迹象。

以下内容在 Linux 和 OSX 上均能正常运行:

dig +short @224.0.0.251 -p 5353 -x 192.168.1.23

该二进制文件avahi-resolve-address在 OSX 上不可用,而且我没找到使反向 DNS 起作用的方法dns-sd

以下是所使用的操作系统版本:

  • OSX版本:Catalina 10.15.7
  • Linux:Ubuntu 20.04

答案1

我找到了几种方法来实现这一点,但它们都有点丑陋。首先,您可以使用dns-sd -q并指定ptr记录类型……但您需要将要查找的地址转换为逐个半字节反转格式自己查找。例如,要查找,fe80::4e6:97e7:d892:d977您可以使用:

dns-sd -q 7.7.9.d.2.9.8.d.7.e.7.9.6.e.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa ptr

不幸的是,这似乎只适用于本地链接地址,而不适用于公共地址。我不知道为什么。另外,请注意,dns-sd在进行查找后不会自动退出,但会继续监视更改。您需要稍后将其终止。

您也可以使用dig,有点像您的原始命令,但您需要告诉它通过哪个接口发送查询,并且格式相当奇怪。“标准”的做法是添加一个区域索引对于接口,例如将其发送到您将使用ff02::fb。但是不喜欢这种格式,所以你必须更狡猾。基于 BSD 的 unix,包括 macOS,允许您在某些类型的地址的第二个 16 位字中放置数字区域索引,这在这里确实有效。这是一个(匿名)示例,我使用 来找出接口上的,该接口的链接号是,然后使用它进行查找(我添加了 ^^^s 来强调相关部分):en1@ff02::fb%en1dignetstat -rn -f inet62001:db8:1234:5678::/64en15

% netstat -rn -f inet6
Routing tables

Internet6:
Destination                             Gateway                         Flags         Netif Expire
[...]
2001:db8:1234:5678::/64                 link#5                          UC              en1       
                                        ^^^^^^                                          ^^^
[...]
% dig +short @ff02:5::fb -p 5353 -x 2001:db8:1234:5678:109f:8688:b2d1:3f12
                   ^
Gordons-MacBook.local.

相关内容