亢黾 發表於 2019-11-12 17:00:00

【DNS域名解析命令】 dig

<p><span style="font-size: 18pt">dig - DNS lookup utility</span></p>
<p>dig 命令主要用来从 DNS 域名服务器查询主机地址信息。</p>
<p>&nbsp;</p>
<p>Dig (domain information groper 域名信息搜索)是一个灵活的命令行工具, 它可以用来从域名系统服务器中收集信息。</p>
<p>&nbsp;</p>
<p>Dig 有两种模式:</p>
<p>&nbsp;</p>
<ul>
<li>简单交互模式用于简单的查询</li>
<li>批处理模式则可以对包含多个查询条目的列表执行查询。</li>
</ul>
<p>&nbsp;</p>
<p>所有查询选项都可以从命令行输入。</p>
<p><span style="font-size: 18pt">&nbsp;</span></p>
<p><span style="font-size: 18pt">语法:</span></p>
<p>dig [@server] [-b address] [-c class] [-f filename] [-k filename] [-m] [-p port#] [-q name] [-t type] [-x addr] [-y name:key] [-4] [-6] </p>
<p>dig [-h]</p>
<p>dig </p>
<p>&nbsp;</p>
<p><span style="font-size: 18pt">示例:</span></p>
<h3>查询单个域名的 DNS 信息</h3>
<p>dig 命令最典型的用法就是查询单个主机的信息。</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> dig www.baidu.com</span>
<span style="color: rgba(0, 0, 0, 1)">
; &lt;&lt;</span>&gt;&gt; DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 &lt;&lt;&gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> www.baidu.com
;; global options: </span>+<span style="color: rgba(0, 0, 0, 1)">cmd
;; Got answer:
;; </span>-&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 8328<span style="color: rgba(0, 0, 0, 1)">
;; flags: qr rd ra; QUERY: </span>1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0<span style="color: rgba(0, 0, 0, 1)">

;; QUESTION SECTION:
;www.baidu.com.               </span><span style="color: rgba(0, 0, 255, 1)">IN</span><span style="color: rgba(0, 0, 0, 1)">      A

;; ANSWER SECTION:
www.baidu.com.          </span>254   <span style="color: rgba(0, 0, 255, 1)">IN</span><span style="color: rgba(0, 0, 0, 1)">      CNAME   www.a.shifen.com.
www.a.shifen.com.       </span>30      <span style="color: rgba(0, 0, 255, 1)">IN</span>      A       183.232.231.172<span style="color: rgba(0, 0, 0, 1)">
www.a.shifen.com.       </span>30      <span style="color: rgba(0, 0, 255, 1)">IN</span>      A       183.232.231.174<span style="color: rgba(0, 0, 0, 1)">

;; Query time: </span>14<span style="color: rgba(0, 0, 0, 1)"> msec
;; SERVER: </span>192.168.1.1<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">53(192.168.1.1)</span>
;; WHEN: Tue Nov 12 17:00:00 2019<span style="color: rgba(0, 0, 0, 1)">
;; MSG SIZErcvd: </span>90<span style="color: rgba(0, 0, 0, 1)">

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> dig baidu.com</span>
<span style="color: rgba(0, 0, 0, 1)">
; &lt;&lt;</span>&gt;&gt; DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 &lt;&lt;&gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> baidu.com
;; global options: </span>+<span style="color: rgba(0, 0, 0, 1)">cmd
;; Got answer:
;; </span>-&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 7291<span style="color: rgba(0, 0, 0, 1)">
;; flags: qr rd ra; QUERY: </span>1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0<span style="color: rgba(0, 0, 0, 1)">

;; QUESTION SECTION:
;baidu.com.                     </span><span style="color: rgba(0, 0, 255, 1)">IN</span><span style="color: rgba(0, 0, 0, 1)">      A

;; ANSWER SECTION:
baidu.com.            </span>147   <span style="color: rgba(0, 0, 255, 1)">IN</span>      A       39.156.69.79<span style="color: rgba(0, 0, 0, 1)">
baidu.com.            </span>147   <span style="color: rgba(0, 0, 255, 1)">IN</span>      A       220.181.38.148<span style="color: rgba(0, 0, 0, 1)">

;; Query time: </span>13<span style="color: rgba(0, 0, 0, 1)"> msec
;; SERVER: </span>192.168.1.1<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">53(192.168.1.1)</span>
;; WHEN: Tue Nov 12 17:00:04 2019<span style="color: rgba(0, 0, 0, 1)">
;; MSG SIZErcvd: </span>59</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1162655/201911/1162655-20191112170058331-15019930.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。<br>第一部分显示 dig 命令的版本和输入的参数。<br>第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。<br>第三部分中的 "QUESTION SECTION" 显示我们要查询的域名。<br>第四部分的 "ANSWER SECTION" 是查询到的结果。<br>第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。</p>
<p>默认情况下 dig 命令查询 A 记录,上图中显示的 A 即说明查询的记录类型为 A 记录。在尝试查询其它类型的记录前让我们先来了解一下常见的 DNS 记录类型。</p>
<p>&nbsp;</p>
<h3>常见 DNS 记录的类型</h3>
<table border="0">
<tbody>
<tr class="firstRow">
<td>类型</td>
<td>目的</td>


</tr>
<tr>
<td>A</td>
<td>地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。</td>


</tr>
<tr>
<td>AAAA</td>
<td>用来指定主机名(或域名)对应的 IPv6 地址记录。</td>


</tr>
<tr>
<td>CNAME</td>
<td>如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录。</td>


</tr>
<tr>
<td>MX</td>
<td>如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。</td>


</tr>
<tr>
<td>NS</td>
<td>域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。</td>


</tr>
<tr>
<td>SOA</td>
<td>SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录。</td>


</tr>
<tr>
<td>TXT</td>
<td>可以写任何东西,长度限制为 255。绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件)。</td>


</tr>


</tbody>


</table>
<p>&nbsp;</p>
<h3>查询 CNAME 类型的记录CNAME</h3>
<p>除了 A 记录,常见的 DNS 记录还有 CNAME,我们可以在查询时指定要查询的 DNS 记录类型:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> dig www.baidu.com CNAME</span>
<span style="color: rgba(0, 0, 0, 1)">
; &lt;&lt;</span>&gt;&gt; DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 &lt;&lt;&gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> www.baidu.com CNAME
;; global options: </span>+<span style="color: rgba(0, 0, 0, 1)">cmd
;; Got answer:
;; </span>-&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 64615<span style="color: rgba(0, 0, 0, 1)">
;; flags: qr rd ra; QUERY: </span>1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0<span style="color: rgba(0, 0, 0, 1)">

;; QUESTION SECTION:
;www.baidu.com.               </span><span style="color: rgba(0, 0, 255, 1)">IN</span><span style="color: rgba(0, 0, 0, 1)">      CNAME

;; ANSWER SECTION:
www.baidu.com.          </span>96      <span style="color: rgba(0, 0, 255, 1)">IN</span><span style="color: rgba(0, 0, 0, 1)">      CNAME   www.a.shifen.com.

;; Query time: </span>15<span style="color: rgba(0, 0, 0, 1)"> msec
;; SERVER: </span>192.168.1.1<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">53(192.168.1.1)</span>
;; WHEN: Tue Nov 12 17:03:03 2019<span style="color: rgba(0, 0, 0, 1)">
;; MSG SIZErcvd: </span>58</pre>
</div>
<p>这样结果中就只有 CNAME 的记录。其实我们可以在查询中指定任何 DNS 记录的类型。</p>
<h1>&nbsp;</h1>
<h3>从指定的 DNS 服务器上查询 @dns_ip</h3>
<p>由于一些原因,希望从指定的 DNS 服务器上进行查询(从默认的 DNS 服务器上获得的结果可能不准确)。指定 DNS 服务器的方式为使用 @ 符号:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> dig @8.8.8.8 www.baidu.com</span>
<span style="color: rgba(0, 0, 0, 1)">
; &lt;&lt;</span>&gt;&gt; DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 &lt;&lt;&gt;&gt; @8.8.8.8<span style="color: rgba(0, 0, 0, 1)"> www.baidu.com
; (</span>1<span style="color: rgba(0, 0, 0, 1)"> server found)
;; global options: </span>+<span style="color: rgba(0, 0, 0, 1)">cmd
;; Got answer:
;; </span>-&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 13723<span style="color: rgba(0, 0, 0, 1)">
;; flags: qr rd ra; QUERY: </span>1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0<span style="color: rgba(0, 0, 0, 1)">

;; QUESTION SECTION:
;www.baidu.com.               </span><span style="color: rgba(0, 0, 255, 1)">IN</span><span style="color: rgba(0, 0, 0, 1)">      A

;; ANSWER SECTION:
www.baidu.com.          </span>212   <span style="color: rgba(0, 0, 255, 1)">IN</span><span style="color: rgba(0, 0, 0, 1)">      CNAME   www.a.shifen.com.
www.a.shifen.com.       </span>262   <span style="color: rgba(0, 0, 255, 1)">IN</span>      A       183.232.231.172<span style="color: rgba(0, 0, 0, 1)">
www.a.shifen.com.       </span>262   <span style="color: rgba(0, 0, 255, 1)">IN</span>      A       183.232.231.174<span style="color: rgba(0, 0, 0, 1)">

;; Query time: </span>12<span style="color: rgba(0, 0, 0, 1)"> msec
;; SERVER: </span>8.8.8.8<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">53(8.8.8.8)</span>
;; WHEN: Tue Nov 12 17:04:08 2019<span style="color: rgba(0, 0, 0, 1)">
;; MSG SIZErcvd: </span>90</pre>
</div>
<p>从上图可以看到本次查询的 DNS 服务器为 8.8.8.8。</p>
<p>如果不指定 DNS 服务器,dig 会依次使用 /etc/resolv.conf 里的地址作为 DNS 服务器:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> cat /etc/resolv.conf</span>
; generated by /sbin/dhclient-<span style="color: rgba(0, 0, 0, 1)">script
nameserver </span>192.168.1.1<span style="color: rgba(0, 0, 0, 1)">
nameserver </span>192.168.0.1<span style="color: rgba(0, 0, 0, 1)">
<br></span></pre>
</div>
<p>&nbsp;</p>
<h1>反向查询-x</h1>
<p>在前面的查询中我们指定了查询服务器为 8.8.8.8,这是谁家的 DNS 服务器?其实我们可以使用 dig 的 -x 选项来反向解析 IP 地址对应的域名:</p>
<pre>&nbsp;      dig&nbsp;-x&nbsp;8.8.8.8&nbsp;+short</pre>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> dig -x 8.8.8.8 +short</span>
8.8.8.8.<span style="color: rgba(0, 0, 255, 1)">in</span>-<span style="color: rgba(0, 0, 0, 1)">addr.arpa.<br></span></pre>
</div>
<p>&nbsp;</p>
<h1>控制显示结果+short</h1>
<p>dig 命令默认返回的结果展示详细的信息,如果要获得精简的结果可以使用 +short 选项:</p>
<pre>$&nbsp;dig&nbsp;+short&nbsp;abc.filterinto.com</pre>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> dig +short www.baidu.com</span>
111.45.3.177
111.45.3.176<span style="color: rgba(0, 0, 0, 1)"><br></span></pre>
</div>
<p>&nbsp;</p>
<p>这下显示的结果就清爽多了。<br>其实我们还可以通过更多选项来控制输出的内容,比如只想显示 "ANSWER SECTION" 的内容:</p>
<pre>$&nbsp;dig&nbsp;abc.filterinto.com&nbsp;+nocomments&nbsp;+noquestion&nbsp;+noauthority&nbsp;+noadditional&nbsp;+nostats</pre>
<p>&nbsp;</p>
<h1>查看 TTL(Time to Live) +ttlid</h1>
<p>TTL 是 DNS 解析中很重要的指标,主要是控制 DNS 记录在 DNS 服务器上的缓存时间:</p>
<pre>$&nbsp;dig&nbsp;abc.filterinto.com</pre>
<p><img src="https://img2018.cnblogs.com/blog/1162655/201911/1162655-20191118114634571-1154054296.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>查询结果中的单位是秒。通过下面的命令可以显示精简一些测结果:</p>
<pre>$&nbsp;dig&nbsp;+nocmd&nbsp;+noall&nbsp;+answer&nbsp;+ttlid&nbsp;abc.filterinto.com</pre>
<p><img src="https://img2018.cnblogs.com/blog/1162655/201911/1162655-20191118114757605-1404744000.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>跟踪整个查询过程+trace</h1>
<p>如果你好奇 dig 命令执行查询时都经历了哪些过程,你可以尝试使用 +trace 选项。它会输出从根域到最终结果的所有信息:</p>
<pre>$&nbsp;dig&nbsp;+trace&nbsp;abc.filterinto.com</pre>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1162655/201911/1162655-20191118114840082-1643945816.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>上图中显示的并不是一个完整的结果,感兴趣的朋友可以自己尝试。</p>
<h1>总结</h1>
<p>dig 是一个很给力 DNS 查询工具,本文仅介绍了其常见用法,更多的命令选项及使用方法请查看 man page。</p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    本站仅用于个人学习的笔记和记录,有时候是阅读别人的文章的时候做着笔记整理,有些是在实际工作中遇到的问题以及解决小问题的记录。
当前仅用于作为一个萌新程序媛的查漏补缺地检索地。<br><br>
来源:https://www.cnblogs.com/zoe233/p/11843213.html
頁: [1]
查看完整版本: 【DNS域名解析命令】 dig