Linux之dig命令
今天说点儿概念性的东西,关于linux的dig命令,这个命令主要是用来从DNS域名服务器查询主机的地址信息的。也就是说,针对给定的域名,解析出实际的IP地址,下面我们看看他的输出:
代码语言:javascript复制[dba_mysql ~]$dig www.baidu.com
###第一部分
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> www.baidu.com
;; global options: cmd
###第二部分,可使用 nocomments选项来控制是否显示
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40510
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
###第三部分,可使用 noquestion选项来控制是否显示
;; QUESTION SECTION:
;www.baidu.com. IN A
###第四部分,可使用 noanswer选项来控制是否显示
;; ANSWER SECTION:
www.baidu.com. 117 IN CNAME www.a.shifen.com.
www.a.shifen.com. 117 IN A 220.181.38.150
www.a.shifen.com. 117 IN A 220.181.38.149
###第五部分,可使用 nostats选项来控制是否保留
;; Query time: 58 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Oct 8 22:29:56 2019
;; MSG SIZE rcvd: 90
当我们直接使用dig命令 一个域名的时候,输出的结果如上图所示,结果中分为了5个部分,分别解释一下这5个部分:
第一部分:该部分是显示dig命令的版本和输入的参数
第二部分:该部分像是服务返回的一些技术信息,其中比较重要的参数是status,如果返回成功,则status的值是NOERROR,否则可能是NXDOMAIN等输出结果。
第三部分:该部分是指发送的请求域名
第四部分:该部分指的是返回的IP地址
第五部分:该部分query time指的是耗费时间,server指的是解析的DNS服务器地址、后面的53指的是端口号,以及具体的命令触发时间when。
我们可以看到,当我们dig www.baidu.com的时候,实际上是将百度的域名转发到了一个叫www.a.shifen.com的域名上,然后使用再去解析这个域名,从而得到IP地址,这里我们把这种域名到域名之间的转发用cname类型来表示,A类型表示直接从域名查IP。这样,就比较容易理解上面的A类型记录和cname类型记录。
dig命令包含很多参数,常用的几个参数如下:
1 @<服务器地址>:指定进行域名解析的域名服务器;
举例如下:
dig @127.0.0.1 www.baidu.com
2 -b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
3 -f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
4 -p:指定域名服务器所使用端口号,默认是53端口;
5 -t<类型>:指定要查询的DNS数据类型;
eg:
dig -t a www.baidu.com noall answer
代码语言:javascript复制[dba_mysql ~]$dig -t a www.baidu.com noall answer
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> -t a www.baidu.com noall answer
;; global options: cmd
www.baidu.com. 14 IN CNAME www.a.shifen.com.
www.a.shifen.com. 443 IN A 182.61.200.6
www.a.shifen.com. 443 IN A 182.61.200.7
其中,noall和answer表示返回的信息是剪短信息。
6 -x<IP地址>:执行逆向域名查询;
eg:
dig -x 域名
7 -4:使用IPv4;
8 -6:使用IPv6;
9 -h:显示指令帮助信息。
10 short:这个选项可以让你直接获得剪短的IP信息,而没有那些多余的内容。
代码语言:javascript复制[dba_mysql ~]$dig www.baidu.com short
www.a.shifen.com.
220.181.38.150
220.181.38.149
时间原因,具体的例子这里不做演示,给出一些常用的方法即可,我们需要知道dig命令是将域名解析成IP的一个命令,常用的命令如下:
# dig 最基本的用法 dig @server www.baidu.com # 用 dig 查看反向解析 dig -x 124.42.102.203 @server # 查找一个域的授权 dns 服务器 dig www.baidu.com nssearch # 从根服务器开始追踪一个域名的解析过程 dig www.baidu.com trace
最后介绍一个DNS缓存的概念:
假如 DNS 服务器每次都需要迭代或递归查询上一级的 DNS 服务器,那么 DNS 可能就不堪重负,考虑到域名的 DNS 信息不会频繁的修改,所以每一级中的 DNS 服务器都会缓存结果(包括浏览器这样的客户端也会缓存 DNS 结果)。缓存带来的弊端可能就是 DNS 信息可能不是最新的,比如某个域名管理员修改了某个域名的 A 记录,由于每一级的 DNS 服务器都有缓存,所以最后客户端拿到的结果不是最新的,为了获取到最新的结果,可以直接向权威域名服务器进行信息查询。所以使用dig命令的时候,尽量关闭本机的DNS缓存,避免出现不准确的信息。