查询特定的名称服务器时,dig和host之间有什么区别?


11

我使用此命令来验证是否可以通过DNS提供程序正确设置:

host hostname.example.com ns1.example-nameserver.com

据我所知,这要求ns1.example-nameserver.com查找hostname.example.com并报告答案。我收到了一个主机未找到的回复,所以我认为我做错了。然而,如果没有指定其名称服务器(从而使我的ISP的域名服务器来关注一下吧),我得到了正确的响应(hostnameCNAME如果它很重要)。我无法理解这一点,所以我四处搜索并找到了以下dig命令:

dig @ns1.example-nameserver.com hostname.example.com

据我所知,它与host命令具有相同的作用-要求特定的名称服务器查找主机。因此,我得出结论,他们必须以某种方式做不同的事情,并且缓存名称服务器必须使用与相同的方法dig

我的结论是对还是错,如果是对的话:

这两种查找方法有什么区别?

如果错误:

我对DNS和hostand 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

在这种情况下,两个命令应该以相同的方式工作。您可以显示每个命令的完整输出吗?
Renan

请注意如何既dighost报告NXDOMAIN。有了dig它,您可以在标题(输出的第5条非空白行)中看到它,并且host它更加明显。NXDOMAIN表示该域不存在。但是CNAME答案部分会返回a !我确实认为这是DNS服务器中的错误!
Celada

因此,在这种情况下,就dighost同时发送完全相同的查询报文,(从任何时间戳除外)获得完全相同的响应包,但不同的解释呢?host看到后是否会立即纾困NXDOMAIN
jhabbott

FWIW我在特定子域上有完全相反的问题。在此特定子域上使用主机将提供预期记录,该记录显示此特定子域解析为预期的规范主机名。但是,在此特定子域上使用dig时-我收到一条响应,指出该记录不存在。此外,无法使用浏览器导航到该子域。我已经尝试了多次,检查拼写错误等。这些命令显然不能以相同的方式工作。
user12345 2015年

Answers:


13

hostdignslookup共享大多数相同的功能。在您询问的情况下(向特定的域名服务器询问特定的DNS问题),dig并且host(实际上nslookup)行为完全相同。

对于DNS故障排除,dig首选它,因为它的输出格式更“原始”:在其输出中,它直接显示DNS响应中所有4个字段的内容:问题,答案,权限和其他部分(以及标头中的标志) ,并且还有更多选择。host另一方面,具有更人性化的输出格式。

如果您不需要碰巧需要一个命令有一个选项而其他命令没有的选项,或者其中一个命令输出而其他命令却没有的信息,那么这取决于优先级。


2
如果他们在网络端执行相同的操作(实际查询),如何在使用时找不到主机,而在使用时找到host正确的答案dig?即使使用特殊设置(通过选择或意外)配置服务器导致此问题,它也必须能够区分请求。
jhabbott

不!您在问题中给出的两个命令是等效的,它们应该产生相同的答案!确定dig要给您一个实际答案,而不是在“附加”或“权限”部分中记录吗?正如Renan所建议的那样,这可能有助于显示输出。
Celada

好的,我添加了一些示例输出。我在家里和工作上都得到相同的结果。当我未指定要使用的名称服务器并且我的ISP处理查询时,host效果很好。请自己尝试,让我知道结果。
jhabbott

只是回顾一下-ISP最终告诉我,他们的服务器配置为不响应直接客户端查询,仅响应其他要求信息传输的名称服务器-是否dig以不同的方式进行查询,例如名称服务器?
jhabbott 2014年

1
dig可以执行常规问题(除AXFR以外的所有类型)和区域传输(AXFR类型),但是DNS运营商通常将区域传输限制为授权的从属,因此您很可能希望使用常规问题
Celada 2014年

0

如果您使用的是非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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.