我正在寻找一种仅通过 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%en1
dig
netstat -rn -f inet6
2001:db8:1234:5678::/64
en1
5
% 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.