zoukankan      html  css  js  c++  java
  • dig命令:帮你记录DNS寻址全过程

    dig命令:帮你记录DNS寻址全过程

    在《DNS自述:我是如何为域名找到家的》这篇文章里,我们了解了域名的 DNS 解析过程。但整个过程都是我在说,你们在听,总感觉干巴巴的,没有实操来得记忆深刻。那有没有一些命令可以让我们看到 DNS 的解析过程呢?

    那肯定是有的,今天就带大家认识一些关于 DNS 解析的命令。简单地说,最常用的 DNS 解析命令有:

    • dig 命令
    • host 命令
    • nslookup 命令
    • whois 命令

    dig命令

    查询DNS寻址过程

    如果我们要查找某个网址的寻址过程,那么我们可以使用下面语法:dig 域名,例如:

    dig math.stackexchange.com
    

    运行的结果是:

    ; <<>> DiG 9.9.7-P3 <<>> math.stackexchange.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23221
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;math.stackexchange.com.		IN	A
    
    ;; ANSWER SECTION:
    math.stackexchange.com.	600	IN	A	151.101.65.69
    
    ;; Query time: 16 msec
    ;; SERVER: 10.xxx.xxx.253#53(10.xxx.xxx.253)
    ;; WHEN: Sun Dec 29 13:08:22 CST 2019
    ;; MSG SIZE  rcvd: 67
    

    上面的结果可以分为4个部分。

    第一部分是综述,说明此次命令一共查询了几次,有几个回答。

    ; <<>> DiG 9.9.7-P3 <<>> math.stackexchange.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23221
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    

    第二部分是 QUESTION SECTION,即说明此命令发送了什么样的指令。这里表示我们询问 math.stackexchange.com 域名的 A 记录。

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;math.stackexchange.com.		IN A
    

    第三部分是 ANSWER SECTION,即说明此命令执行后返回的结果。这里的结果表明 math.stackexchange.com. 域名的 A 记录指向了 151.101.65.69 这个 IP。

    ;; ANSWER SECTION:
    math.stackexchange.com.	600 IN A 151.101.65.69
    

    第四部分是总结,即说明此次查询的一些信息,例如:查询耗时,本地DNS地址,查询时间,返回消息包大小。

    ;; Query time: 16 msec
    ;; SERVER: 10.xxx.xxx.253#53(10.xxx.xxx.253)
    ;; WHEN: Sun Dec 29 13:08:22 CST 2019
    ;; MSG SIZE  rcvd: 67
    

    直接显示DNS寻址结果

    当我们用 dig 域名 查询时,会显示出整个寻址过程。但如果我们只想要看到最终的结果,那么我们可以加上 +short 参数。这样控制台直接返回该域名对应的 IP 地址。例如当我们执行下面的命令,其直接返回了 151.101.65.69 这个 IP 地址。

    [~]$ dig +short math.stackexchange.com
    151.101.65.69
    

    向特定DNS服务器寻址

    当我们使用 dig 域名 进行 DNS 寻址时,其默认向我们的本地 DNS 服务器寻址。如果我们想向特定的 DNS 服务器寻址,我们可以用下面的命令:

    dig @8.8.8.8 math.stackexchange.com
    

    上面的命令表明:向 8.8.8.8 DNS 服务器寻找 math.stackexchange.com 域名的 DNS 解析结果。其返回结果为:

    ; <<>> DiG 9.9.7-P3 <<>> @8.8.8.8 math.stackexchange.com
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12245
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION:
    ;math.stackexchange.com.		IN A
    
    ;; ANSWER SECTION:
    math.stackexchange.com.	3258 IN A 151.101.1.69
    math.stackexchange.com.	3258 IN A 151.101.65.69
    math.stackexchange.com.	3258 IN A 151.101.129.69
    math.stackexchange.com.	3258 IN A 151.101.193.69
    
    ;; Query time: 14 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Sun Dec 29 13:18:03 CST 2019
    ;; MSG SIZE  rcvd: 115
    

    从返回结果可以看到,当我们向 8.8.8.8 DNS 服务器寻址时,其返回了 4 个 IP 地址。但我们向本地 DNS 服务器寻址时,却会返回了 1 个 IP 地址。这说明了不同 DNS 服务器所存储的解析记录不同,并不说某个 DNS 服务器是错误的。这里 8.8.8.8 是谷歌的 DNS 服务器,所以拥有的解析记录更加全面。而本地 DNS 服务器是 ISP 运营商的,其解析记录相对来说少一些。

    查询某种解析类型的记录

    在之前「A记录都不懂,怎么做开发Leader?」中我们讲过,域名解析有许多种类型,包括:NS类型、A 类型、MX 类型等。而我们可以使用 dig 命令去查询其解析类型的值,其语法为:

    dig 解析类型 域名
    

    例如我们查看下 shuyi.me 这个域名的 NS 记录,那么其执行命令及其结果为:

    [~]$ dig ns shuyi.me
    ; <<>> DiG 9.9.7-P3 <<>> ns shuyi.me
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22809
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;shuyi.me.			IN	NS
    
    ;; ANSWER SECTION:
    shuyi.me.		21599	IN	NS	f1g1ns2.dnspod.net.
    shuyi.me.		21599	IN	NS	f1g1ns1.dnspod.net.
    
    ;; ADDITIONAL SECTION:
    f1g1ns2.dnspod.net.	542	IN	A 14.215.155.203
    f1g1ns1.dnspod.net.	762	IN	A 14.215.155.156
    
    ;; Query time: 91 msec
    ;; SERVER: 10.102.201.253#53(10.102.201.253)
    ;; WHEN: Sun Dec 29 13:24:42 CST 2019
    ;; MSG SIZE  rcvd: 123
    

    可以看到 shuyi.me 一共有 2 个 NS 解析结果,指向了 f1g1ns2.dnspod.net.f1g1ns1.dnspod.net.

    我们继续看下 shuyi.me 这个域名的 A 记录,其执行结果为:

    [~]$ dig a shuyi.me
    
    ; <<>> DiG 9.9.7-P3 <<>> a shuyi.me
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7823
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;shuyi.me.			IN	A
    
    ;; ANSWER SECTION:
    shuyi.me.		599	IN	A	192.30.252.153
    
    ;; Query time: 268 msec
    ;; SERVER: 10.102.201.253#53(10.102.201.253)
    ;; WHEN: Sun Dec 29 13:27:34 CST 2019
    ;; MSG SIZE  rcvd: 53
    

    可以看到,其只有一个结果,指向的 IP 为:192.30.252.153。我们继续看看 shuyi.me 的 MX 记录:

    [~]$ dig mx shuyi.me
    
    ; <<>> DiG 9.9.7-P3 <<>> mx shuyi.me
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40996
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;shuyi.me.			IN	MX
    
    ;; AUTHORITY SECTION:
    shuyi.me.		180	IN	SOA	f1g1ns1.dnspod.net. freednsadmin.dnspod.com. 1517495328 3600 180 1209600 180
    
    ;; Query time: 43 msec
    ;; SERVER: 10.102.201.253#53(10.102.201.253)
    ;; WHEN: Sun Dec 29 13:28:14 CST 2019
    ;; MSG SIZE  rcvd: 114
    

    可以看到其返回了一条类型为 SOA 的记录,这表明 shuyi.meMX 记录不存在。

    反向查询IP对应的域名

    我们上面都是通过域名查询 IP,但其实我们也可以通过 IP 去查询其对应的域名。

    [~]$ dig -x 192.30.252.153
    
    ; <<>> DiG 9.9.7-P3 <<>> -x 192.30.252.153
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15495
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;153.252.30.192.in-addr.arpa.	IN	PTR
    
    ;; ANSWER SECTION:
    153.252.30.192.in-addr.arpa. 3110 IN PTR lb-192-30-252-153-iad.github.com.
    
    ;; Query time: 15 msec
    ;; SERVER: 10.102.201.253#53(10.102.201.253)
    ;; WHEN: Sun Dec 29 13:31:04 CST 2019
    ;; MSG SIZE  rcvd: 102
    

    上面我们查询 192.30.252.153 对应的域名,其查询结果表明该 IP 对应的域名为:lb-192-30-252-153-iad.github.com.,其实一个 github 的二级域名。

    除了 dig 命令能显示 DNS 寻址的过程,host 命令以及 nslookup 命令也有这样的功能。

    host命令

    host 命令可以直接返回域名的各种记录,例如:

    [~]$ host shuyi.me
    shuyi.me has address 192.30.252.153
    

    上面的命令直接返回了 shuyi.me 域名对应的 A 记录地址。我们再试试 baidu.com 这个网址:

    [~]$ host www.baidu.com
    www.baidu.com is an alias for www.a.shifen.com.
    www.a.shifen.com has address 14.215.177.39
    

    可以看到,其返回了两条记录。第 1 条表示 www.baidu.com 有一个别名(CNAME记录)指向了 www.a.shifen.com。第 2 条表示 www.a.shifen.com 有一个地址(A记录)指向了 IP 地址 14.215.177.39

    host 命令也可以通过 IP 地址逆向查询对应的域名,例如:

    [~]$ host 192.30.252.153
    153.252.30.192.in-addr.arpa domain name pointer lb-192-30-252-153-iad.github.com.
    

    上面的结果表示 192.30.252.153 指向了域名 lb-192-30-252-153-iad.github.com.

    nslookup命令

    除了 dig 和 host 命令之外,我们也可以用 nslookup 命令查询域名的记录,例如:

    [~]$ nslookup shuyi.me
    Server:		10.xxx.xxx.253
    Address:	10.xxx.xxx.253#53
    
    Non-authoritative answer:
    Name:	shuyi.me
    Address: 192.30.252.153
    

    上面返回的结果表示,其向 10.xxx.xxx.253 DNS 服务器询问 shuyi.me 域名对应的 IP 地址,结果是:192.30.252.153

    查询域名的注册情况

    当我们想知道域名的注册情况时,我们可以使用 whois 命令,例如:

    省略其他……
    Domain Name: SHUYI.ME
    Registry Domain ID: D425500000017849766-AGRS
    Registrar WHOIS Server: whois.godaddy.com
    Registrar URL: http://www.godaddy.com
    Updated Date: 2018-04-02T21:15:42Z
    Creation Date: 2018-02-01T10:30:33Z
    Registry Expiry Date: 2020-02-01T10:30:33Z
    Registrar Registration Expiration Date:
    Registrar: GoDaddy.com, LLC
    Registrar IANA ID: 146
    Registrar Abuse Contact Email: abuse@godaddy.com
    Registrar Abuse Contact Phone: +1.4806242505
    Reseller:
    Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
    Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
    Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
    Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
    Registrant Organization:
    Registrant State/Province: Guangdong
    Registrant Country: CN
    Name Server: F1G1NS1.DNSPOD.NET
    Name Server: F1G1NS2.DNSPOD.NET
    DNSSEC: unsigned
    URL of the ICANN Whois Inaccuracy Complaint Form  https://www.icann.org/wicf/)
    >>> Last update of WHOIS database: 2019-12-29T05:39:51Z <<<
    >>> 省略其他……
    

    通过 whois 命令,我们可以知道该域名通过哪个服务商注册以及注册地点等信息。

    总结

    最后,我们总结一下本篇文章的内容。我们想查询域名对应的 IP,可以通过 dig、host、nslokup 命令。一般来说,dig 命令就已经足够使用,可以完全覆盖日常使用需求。而需要查询域名注册信息,则可以使用 whois 命令。

    下面对本篇文章的所有命令做个汇总,方便查阅。

    dig命令:

    • dig math.stackexchange.com 查询DNS寻址过程
    • dig +short math.stackexchange.com 直接显示DNS寻址结果
    • dig @8.8.8.8 math.stackexchange.com 向特定DNS服务器寻址
    • dig ns com 查询com顶级域名的ns记录
    • dig a com 查询com顶级域名的a记录
    • dig -x 192.30.252.153 用于查询PTR记录(用IP查域名)

    host命令:

    • host github.com 返回域名的各种记录
    • host 192.30.252.153 逆向查询IP地址对应的域名

    nslookup命令:

    • nslookup github.com 查询域名记录

    whois命令:

    • whois shuyi.me 查询域名的注册情况

    参考资料

  • 相关阅读:
    数据挖掘、数据分析的书籍推荐
    跳槽时间如何选择
    求职网站总结
    Eclipse中Applet程序运行时Applet小程序大小的设置
    统计学习导论:基于R应用——第五章习题
    统计学习导论:基于R应用——第四章习题
    统计学习导论:基于R应用——第三章习题
    Windows环境下安装IPython NoteBook
    centos7上mysql无法启动也没有日志
    CentOS 6.4下Squid代理服务器的安装与配置
  • 原文地址:https://www.cnblogs.com/chanshuyi/p/dns_dig_command.html
Copyright © 2011-2022 走看看