Lee*_*ley 6 dns mdns multicast go avahi
我正在寻求改进mDNS的Go库:https://github.com/davecheney/mdns/
我和作者谈过,他简单地说"我把它弄到了适合我的地步",这很好,完全符合开源的精神.
他提到Avahi,Bonjour和dns-sd发现工具的一些互操作性问题没有找到他导出的服务.
我想了解Avahi在使用端口进行简单服务时发布的记录,以及简单的名称.
我曾预料到适当的版本:
dig @localhost .local -t AXFR
Run Code Online (Sandbox Code Playgroud)
可能让Avahi导出它的区域,但它对我不起作用(提示"你做错了"!) - 我想了解典型Avahi服务导出的最小记录,并自动检查Lee-Hambleys-Macbook.local
从笔记本上的Apple实现中导出,我可以改进对mDNS的Go lang支持.
当其他人正在使用Avahi/Bonjour/mDNS时,他们使用什么工具来挖掘并检查事情是否按预期工作?
#avahi的善良人士非常友好地给我以下提示:
killall -USR1 avahi-daemon
Run Code Online (Sandbox Code Playgroud)
这导致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
Run Code Online (Sandbox Code Playgroud)
由于协议的工作方式,mDNS 根本不支持区域传输。据我所知,有两种可能的方法:
1)通过查询目标(服务器/子网)尝试暴力方法。您可以使用 dig 来完成此操作,只需将查询发送到多播地址并查询您的目标,例如。
挖 -x 192.168.0.10 -p 5353 @224.0.0.251
还有一些现成的脚本和工具可以帮助枚举 mDNS 目标。一些例子包括
2)强制守护程序转储其区域文件(或设置)。你已经发现 Avahi 服从了
Killall -USR1 avahi 守护进程
Apple 的 Bonjour 包括mDNSResponder,它不实现转储区域信息。但是,您可以添加更多日志记录以获得类似的好处
SIGUSR1 信号切换附加日志记录,默认情况下启用警告和通知:
Run Code Online (Sandbox Code Playgroud)% sudo killall -USR1 mDNSResponder
启用此日志记录后,用户还可以使用 syslog(1) 更改进程的日志过滤器。例如,要启用日志级别“紧急 - 调试”:
Run Code Online (Sandbox Code Playgroud)% sudo syslog -c mDNSResponder -d
SIGUSR2 信号切换数据包日志记录:
Run Code Online (Sandbox Code Playgroud)% sudo killall -USR2 mDNSResponder
SIGINFO 信号会将内部状态的快照摘要转储到 /var/log/system.log:
Run Code Online (Sandbox Code Playgroud)% sudo killall -INFO mDNSResponder
此外,Wireshark还可用于调试协议错误。这应该足以解决互操作性错误。