英文:
Dumping Avahi & Bonjour, DNS-SD Zone Files
问题
我正在寻求改进Go语言的mDNS库:https://github.com/davecheney/mdns/
我已经与作者交谈过,他只是说“我把它做到了能够满足我的需求”,这很好,完全符合开源精神。
他提到了Avahi、Bonjour和dns-sd发现工具之间的一些互操作性问题,这些工具无法找到他导出的服务。
我想了解在进行简单的服务时,Avahi发布了哪些记录,包括端口和简单名称。
我原本期望通过以下适当版本的命令来导出Avahi的区域:
dig @localhost .local -t AXFR
但是对我来说没有起作用(提示“你做错了!”)- 我想了解典型Avahi服务导出的最小记录,并检查从我的笔记本上自动导出的Lee-Hambleys-Macbook.local
的相同记录,以便我可以改进Go语言对mDNS的支持。
当其他人使用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
英文:
I'm looking to make improvements to the Go library for mDNS: https://github.com/davecheney/mdns/
I've spoken with the author, who simply says "I got it to a point where it worked for me", and that's fine, well within the spirit of open source.
He mentioned some interoperability problems with Avahi, Bonjour and dns-sd discovery tools not finding the services he has exported.
I'm looking to understand what records are published by Avahi when doing a simple service with a port, and a simple name.
I had expected an appropriate version of:
dig @localhost .local -t AXFR
Might have Avahi export it's zone, but it didn't work for me (cue "you are doing it wrong"!) - I'd like to understand the minimum records exported by a typical Avahi service, and examine the same from the automatically exported Lee-Hambleys-Macbook.local
from the Apple implementation on my notebook that I might be able to improve the Go lang support for mDNS.
When other people are working with Avahi/Bonjour/mDNS, what tools do they use to dig in and check that things are working as expected?
The kind folks of #avahi were kind enough to give me the following tip:
killall -USR1 avahi-daemon
That causes avahi-daemon
to dump it's zone file to the syslog
.
But ideally I'd like to know how best to query the server, tcpdump
also looks promising, but it's still only showing records that get lookedup, not a complete dump of everything that's in the zone:
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
答案1
得分: 1
mDNS由于协议的工作方式,不支持区域传输。据我所知,有两种可能的方法:
**1)**尝试蛮力方法,通过查询目标(服务器/子网)。您可以使用dig来执行此操作,只需将查询发送到多播地址并查询您的目标,例如:
> 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)来更改进程的日志过滤器。例如,要启用日志级别Emergency - Debug:
>
> %sudo syslog -c mDNSResponder -d
>
> SIGUSR2信号切换数据包日志记录:
>
> %sudo killall -USR2 mDNSResponder
>
> SIGINFO信号将将内部状态的快照摘要转储到/var/log/system.log:
>
> %sudo killall -INFO mDNSResponder
此外,Wireshark可以用于调试协议错误。这应该足以解决互操作性错误。
英文:
mDNS does simply not support zone transfers due the way the protocol works. As far as I can tell there are two possible approaches:
1) Try brute force approach, by querying the target (server/subnet). You can do this with dig, just send the query to multicast address and query for your target, eg.
> dig -x 192.168.0.10 -p 5353 @224.0.0.251
There are also a few ready scripts and tools that assist in enumerating mDNS targets. Some examples include
- MDNSRecon
- avahi-browse
- mdns-scan
- Bonjour Dumper
- dns-sd -Z and friends
2) Force the daemon to dump its zone file (or settings). You already found out that Avahi obeys
>killall -USR1 avahi-daemon
Apple's Bonjour includes mDNSResponder which does not implement dumping zone information. However you can add more logging for similar benefits
> A SIGUSR1 signal toggles additional logging, with Warning and Notice
> enabled by default:
>
> % sudo killall -USR1 mDNSResponder
>
> Once this logging is enabled, users can additionally use syslog(1) to
> change the log filter for the process. For example, to enable log
> levels Emergency - Debug:
>
> % sudo syslog -c mDNSResponder -d
>
> A SIGUSR2 signal toggles packet logging:
>
> % sudo killall -USR2 mDNSResponder
>
> A SIGINFO signal will dump a snapshot summary of the internal state
> to /var/log/system.log:
>
> % sudo killall -INFO mDNSResponder
Also, Wireshark might be used to debug protocol errors. This should be enough for solving interoperability errors.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论