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

jha*_*ott 16 domain-name-system cname-record host dig

我使用这个命令来验证我是否正确设置了 DNS 提供商:

host hostname.example.com ns1.example-nameserver.com
Run Code Online (Sandbox Code Playgroud)

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

dig @ns1.example-nameserver.com hostname.example.com
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果是错误的:

什么是我对DNS的误解和hostdig那些使我得出这个结论的命令?

示例输出:

$ 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
Run Code Online (Sandbox Code Playgroud)

Cel*_*ada 14

hostdignslookup都共享大部分相同的功能。在您询问(向特定名称服务器询问特定 DNS 问题)的情况下,dighost(实际上nslookup)行为完全相同。

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

如果您不碰巧需要其中一个命令有而其他命令没有的选项,或者其中一个命令输出而其他命令没有的信息,那么这归结为偏好问题。

  • 如果他们在网络端(实际查询)做同样的事情,我怎么能在使用 `host` 时找不到主机,但在使用 `dig` 时找到正确的答案?即使服务器是使用特定设置(通过选择或意外)配置的,它也必须能够区分请求。 (2认同)

wis*_*cky 6

如果您使用的是非 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
Run Code Online (Sandbox Code Playgroud)