为什么nslookup在ping时不使用mdns?

dnsmasq.conf中:

address=/local/127.0.0.1 

resolv.conf中:

 # Generated by NetworkManager domain example.com search example.com nameserver 127.0.0.1 nameserver 10.66.127.17 nameserver 10.68.5.26 

我可以使用nslookup:

 # nslookup www.local Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.local Address: 127.0.0.1 

但是我不能使用ping

 # ping www.local ping: unknown host www.local 

我使用tcpdump来捕获lo,同时ping www.local,没有数据包,而数据包像

 # tcpdump -i em1 -n | grep local tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:14:38.189335 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27) 20:14:39.190700 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27) 20:14:41.192979 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27) 

从物理界面出现。

这意味着ping使用mdns,但为什么nslookup不使用mdns? 为什么ping当mdns不返回有用的falue时不会使用普通的dns?

谢谢。

ping使用glibc的名字parsing系统,叫做Name Service Switch。 这使用/etc/nsswitch.conf文件来知道在哪里查找以便将名称parsing为IP。 该文件中的hosts:行表示每个服务的优先顺序。 例如, files表示本地/etc/hosts文件, dns使用/etc/resolv.conf文件联系DNS服务器,而mdns使用mdns。

但是, nslookup不使用它。 它直接与/etc/resolv.conf指定的DNS服务器通信,所以不能使用mdns

但是我不能回答你最后的问题。 如果你在/etc/nsswitch.confmdnsdns ,那么即使先使用mdns ,也应该首先用mdns来parsing名字,如果没有答案使用dns

这非常简单 – nslookup 特别是一个DNS工具 – 它是BIND工具的一部分。

它根本不知道库调用的其他名称服务,如gethostbyname可以通过NSS访问,因为nslookup不使用gethostbyname等。