【问题标题】:Dumping Avahi & Bonjour, DNS-SD Zone Files转储 Avahi & Bonjour、DNS-SD 区域文件
【发布时间】:2013-07-17 00:27:58
【问题描述】:

我希望改进 mDNS 的 Go 库:https://github.com/davecheney/mdns/

我和作者谈过,他只是说“我把它弄到了对我有用的地步”,这很好,完全符合开源精神。

他提到了 Avahi、Bonjour 和 dns-sd 发现工具无法找到他导出的服务的一些互操作性问题。

我希望了解 Avahi 在使用端口和简单名称执行简单服务时会发布哪些记录。

我期待一个合适的版本:

dig @localhost .local -t AXFR

可能有 Avahi 导出它的区域,但它对我不起作用(提示“你做错了”!) - 我想了解典型 Avahi 服务导出的最少记录,并检查相同从我笔记本上的 Apple 实现自动导出的 Lee-Hambleys-Macbook.local 中,我可能能够改进对 mDNS 的 Go 语言支持。

当其他人在使用 Avahi/Bonjour/mDNS 时,他们使用什么工具来挖掘并检查事情是否按预期工作?

#avahi 的好心人给了我以下提示:

 killall -USR1 avahi-daemon

这会导致avahi-daemon 将其区域文件转储到syslog

但理想情况下,我想知道如何最好地查询服务器,tcpdump 看起来也很有希望,但它仍然只显示被查找的记录,而不是该区域中所有内容的完整转储:

sudo tcpdump dst port 53
Password:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:43:28.883763 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
09:43:29.046201 IP 192.168.178.41.61989 > resolver2.opendns.com.domain: 55378+ PTR? 251.0.0.224.in-addr.arpa. (42)
09:43:29.123784 IP 192.168.178.41.56659 > resolver2.opendns.com.domain: 26471+ A? p05-btmmdns.icloud.com.akadns.net. (51)
09:43:29.819277 IP 192.168.178.41.53504 > resolver2.opendns.com.domain: 32010+ PTR? 220.220.67.208.in-addr.arpa. (45)
09:43:47.379251 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
09:43:55.900406 IP 192.168.178.41.60511 > resolver2.opendns.com.domain: 32846+ AAAA? lc22.prod.livefyre.com. (40)
09:44:04.115159 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
^C
7 packets captured
3187 packets received by filter
0 packets dropped by kernel

【问题讨论】:

  • mDNS 在端口 5353 上运行,因此您必须对其进行过滤,而不是端口 53。:-)
  • 我认为区域传输不应该与 mDNS 一起使用。我认为您可能将 mDNS/DNS-SD 与 Avahi 混淆了一点,也许?花几个小时浏览 RFC 可能是值得的:tools.ietf.org/html/rfc6762tools.ietf.org/html/rfc6763
  • 谢谢,据我所知,dns-sd 希望将 DNS 记录导出到标准 DNS,而 mDNS 在不同的端口上运行,但记录看起来像 DNS 记录?

标签: dns go multicast mdns avahi


【解决方案1】:

由于协议的工作方式,mDNS 根本不支持区域传输。据我所知,有两种可能的方法:

1) 通过查询目标(服务器/子网)尝试蛮力方法。您可以使用 dig 执行此操作,只需将查询发送到多播地址并查询您的目标,例如。

挖 -x 192.168.0.10 -p 5353 @224.0.0.251

还有一些现成的脚本和工具可以帮助枚举 mDNS 目标。一些例子包括

2) 强制守护程序转储其区域文件(或设置)。你已经发现 Avahi 服从了

killall -USR1 avahi-daemon

Apple 的 Bonjour 包括 mDNSResponder,它没有实现转储区信息。但是,您可以添加更多日志以获得类似的好处

SIGUSR1 信号切换额外的日志记录,带有警告和通知 默认启用:

   % sudo killall -USR1 mDNSResponder

启用此日志记录后,用户还可以使用 syslog(1) 更改进程的日志过滤器。例如,启用日志 级别紧急 - 调试:

   % sudo syslog -c mDNSResponder -d

SIGUSR2 信号切换数据包记录:

   % sudo killall -USR2 mDNSResponder

SIGINFO 信号将转储内部状态的快照摘要 到 /var/log/system.log:

   % sudo killall -INFO mDNSResponder

另外,Wireshark 可能用于调试协议错误。这应该足以解决互操作性错误。

【讨论】:

  • 我没有尝试过,但这似乎都是可靠的建议,尤其是diging 多播地址
猜你喜欢
  • 2012-03-05
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多