我使用此命令来验证我是否已与 DNS 提供商正确设置:
host hostname.example.com ns1.example-nameserver.com
据我所知,这要求ns1.example-nameserver.com
查找hostname.example.com
并报告答案。我收到了主机未找到的响应,所以我认为我做错了。但是,没有指定他们的名称服务器(从而允许我的 ISP 的名称服务器查找它),我得到了正确的响应(hostname
如果CNAME
它很重要)。我无法理解这一点,所以我四处搜索并找到了命令dig
:
dig @ns1.example-nameserver.com hostname.example.com
据我所知,此命令的作用与host
命令相同 - 要求特定名称服务器查找主机。因此,我得出结论,它们必须以某种方式以不同的方式执行此操作,并且缓存名称服务器必须使用与相同的方法dig
。
我的结论要么正确,要么错误,如果正确的话:
这两种查找方法有什么区别?
如果错误:
host
我对 DNS 以及和命令的哪些误解dig
导致我得出这个结论?
示例输出:
$ host cardiff.tzmchapters.org ns1.livedns.co.uk
Using domain server:
Name: ns1.livedns.co.uk
Address: 213.171.192.250#53
Aliases:
Host cardiff.tzmchapters.org not found: 3(NXDOMAIN)
$ dig @ns1.livedns.co.uk cardiff.tzmchapters.org
; <<>> DiG 9.8.3-P1 <<>> @ns1.livedns.co.uk cardiff.tzmchapters.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23620
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;cardiff.tzmchapters.org. IN A
;; ANSWER SECTION:
cardiff.tzmchapters.org. 3600 IN CNAME ghs.google.com.
;; AUTHORITY SECTION:
google.com. 3600 IN SOA ns1.livedns.co.uk. admin.google.com. 1354213742 10800 3600 604800 3600
;; Query time: 27 msec
;; SERVER: 213.171.192.250#53(213.171.192.250)
;; WHEN: Mon Apr 22 23:47:05 2013
;; MSG SIZE rcvd: 128
答案1
host
、dig
和nslookup
都具有大部分相同的功能。如果您询问的是(向特定名称服务器询问特定 DNS 问题),dig
和host
(以及nslookup
)的行为完全相同。
对于 DNS 故障排除,dig
是首选,因为它的输出格式更“原始”:在其输出中,它直接显示 DNS 响应中所有 4 个字段的内容:问题、答案、权限和附加部分(加上标题中的标志),并且它还有更多选项。host
另一方面,具有更用户友好的输出格式。
如果您恰好不需要某个命令具有而其他命令没有的选项,或者不需要某个命令输出而其他命令不输出的某条信息,那么这就取决于个人偏好了。
答案2
如果您使用非 FQDN 主机名,结果可能会有所不同,因为host
将使用中的搜索域resolv.conf
,而dig
默认情况下则不会。
如果您想使用(或将其添加到) ,则必须使用该+search
选项。dig
resolv.conf
~/.digrc
例如:
$ host foo
foo.myfqdn.com has address 10.1.2.3
$ dig +short foo
# (no result)
$ dig +short +search foo
10.1.2.3
答案3
该nslookup
命令包含在 Windows 和 BusyBox 中,用于路由器或电视盒等嵌入式设备。这使得它更适合跨平台脚本编写。请参阅https://en.wikipedia.org/wiki/Nslookup
比较的输出示例:
$ nslookup example.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
Name: example.com
Address: 2606:2800:220:1:248:1893:25c8:1946
dig 以 BIND 区域格式提供响应,其中包含许多详细信息:
$ dig example.com
; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41996
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 7147 IN A 93.184.216.34
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Dec 28 23:44:07 EET 2022
;; MSG SIZE rcvd: 56
主机命令尝试给出解释:
$ host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 0 .