Linux之dig命令

2019-11-06 17:24:13 浏览数 (1)

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缓存,避免出现不准确的信息。

0 人点赞