浅仔 發表於 2020-4-25 02:10:00

Wireshark实验——DNS 域名系统

<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>DNS 域名系统</li><li>nslookup<ul><li>初识 nslookup 工具</li><li>nslookup 命令语法</li><li>实验操作</li></ul></li><li>ipconfig</li><li>使用 Wireshark 追踪 DNS<ul><li>实验操作</li><li>问题解答</li></ul></li><li>nslookup 的 DNS 查询①<ul><li>实验步骤</li><li>问题解答</li></ul></li><li>nslookup 的 DNS 查询②<ul><li>实验步骤</li><li>问题解答</li></ul></li><li>nslookup 的 DNS 查询③<ul><li>实验步骤</li><li>问题解答</li></ul></li><li>参考资料</li></ul></div><p></p>
<h1 id="dns-域名系统">DNS 域名系统</h1>
<p>域名系统 <strong>DNS(Domain Name System)</strong> 是互联网使用的命名系统,用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS,但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字,并使用<strong>分布式的域名系统 DNS</strong>。DNS 被设计为一个联机式数据库系统,并采用客户服务器方式,使大多数名字都在本地进行<strong>解析</strong>。名字到 IP 地址的解析是由若干个<strong>域名服务器程序</strong>完成的,域名服务器程序在专设的结点上运行,运行该程序的机器称为<strong>域名服务器</strong>。<br>
当一个应用进程需要把主机名解析为 IP 地址是,该用户进程就调用<strong>解析程序</strong>,并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 用户数据报的方式发给本地域名服务器。本地域名服务器查找域名后,把对应的 IP 地址放在回答报文中返回。若本地域名服务器不能回答该请求,则该本地域名服务器就暂时成为 DNS 中的另一个客户,并向其他域名服务器发出查询请求。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425003308341-408825160.png" alt="" loading="lazy"></p>
<h1 id="nslookup">nslookup</h1>
<h2 id="初识-nslookup-工具">初识 nslookup 工具</h2>
<p><strong>nslookup</strong> 工具允许主机查询任何指定的 DNS 服务器的 DN S记录。DNS 服务器可以是根 DNS 服务器,顶级域 DNS 服务器,权威 DNS 服务器或中间 DNS 服务器。要完成此任务,nslookup 将 DNS 查询发送到指定的 DNS 服务器,然后接收 DNS 回复,并显示结果。要在 Windows 中运行,请打开命令提示符并在命令行上运行 nslookup。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200424235850918-2031365034.png" alt="" loading="lazy"><br>
接下来我们来测试 3 个命令,首先我们想得到集美大学的官网:“ https://www.jmu.edu.cn/ ”的 IP 地址。</p>
<pre><code>nslookup www.jmu.edu.cn
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425001831539-763394482.png" alt="" loading="lazy"><br>
说这个命令的作用是获取主机 www.jmu.edu.cn 的 IP 地址。此命令的响应提供两条信息:</p>
<ol>
<li>提供响应的 DNS 服务器的名称和 IP 地址;</li>
<li>响应本身,即 www.jmu.edu.cn 的主机名和 IP 地址。本地 DNS 服务器很可能会迭代地联系其他几个 DNS 服务器来获得结果。</li>
</ol>
<p>现在我们要获取发送 jmu.edu.cn 的 DNS 主机名:</p>
<pre><code>nslookup -type=NS mit.edu
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425002516293-19478788.png" alt="" loading="lazy"><br>
通过添加选项 "<strong>-type=NS</strong> "和域名 "jmu.edu.cn"。命令的含义为 nslookup 将 NS 记录发送到默认的本地 DNS 服务器,转换为“人话”的含义为“获取发送 jmu.edu.cn 的权威 DNS 的主机名”,当不使用 -type 选项时,nslookup 将使用默认值,即查询 A 类记录。<br>
来看看回显的数据,首先是提供响应的 DNS 服务器,即默认本地 DNS 服务器。紧随其后是以及 7 个 MIT 域名服务器,这些服务器中的每一个都是集美大学校园主机的权威 DNS 服务器。不过 nslookup 显示这些是非权威应答,表示着这个响应来自某个服务器的缓存,而不是来自权威 MIT DNS 服务器。最后显示了集美大学权威 DNS 服务器的 IP 地址。<br>
接下来我们想试试不通过默认服务器,而是通过 DNS 服务器 bitsy.mit.edu 看看能不能成功解析集美大学官网。</p>
<pre><code>nslookup www.jmu.edu.cu bitsy.mit.edu
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425003642244-1956889394.png" alt="" loading="lazy"><br>
看来不行哦,这个服务器上没有集美大学官网的信息。下面看一个成功的例子:<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425003815942-875328668.png" alt="" loading="lazy"></p>
<h2 id="nslookup-命令语法">nslookup 命令语法</h2>
<pre><code>nslookup [-option1] [-option2] host-to-find dns-server
</code></pre>
<p>nslookup 可以不添加选项,或者添加一两个甚至更多选项。</p>
<h2 id="实验操作">实验操作</h2>
<ol>
<li>运行 nslookup 以获取一个亚洲的 Web 服务器的 IP 地址。该服务器的IP地址是什么?</li>
</ol>
<p>刚刚做过啦!<br>
2. 运行 nslookup 来确定一个欧洲的大学的权威 DNS 服务器。</p>
<p>我选择的是剑桥大学 https://www.cam.ac.uk/<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425004341704-1071050733.png" alt="" loading="lazy"><br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425004713770-1166102883.png" alt="" loading="lazy"><br>
3.运行 nslookup,使用上一个操作中一个已获得的 DNS 服务器,来查询 Yahoo! 邮箱的邮件服务器。它的 IP 地址是什么?</p>
<p>雅虎邮箱的域名为 “mail.yahoo.com”,我选择服务器 “auth0.dns.cam.ac.uk” 来找。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425010155627-511903173.png" alt="" loading="lazy"><br>
查找成功。这里也可以用递归来找:<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425010422922-1165453417.png" alt="" loading="lazy"></p>
<h1 id="ipconfig">ipconfig</h1>
<blockquote>
<p>IPConfig 实用程序和它的等价图形用户界面—— Windows 95/98 中的 WinIPCfg 可用于显示当前的 TCP/IP 配置的设置值。这些信息一般用来检验人工配置的 TCP/IP 设置是否正确。但是,如果你的计算机和所在的局域网使用了动态主机配置协议(Dynamic Host Configuration Protocol,DHCP——Windows NT 下的一种把较少的 IP 地址分配给较多主机使用的协议,类似于拨号上网的动态 IP 分配),这个程序所显示的信息也许更加实用。——百度百科</p>
</blockquote>
<p><strong>ipconfig</strong> 是主机中最实用的程序之一,调试网络问题时作用很大。ipconfig 可用于显示您当前的TCP/IP信息,包括您的地址,DNS服务器地址,适配器类型等。我们来看几个指令:</p>
<pre><code>ipconfig /all
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425010932479-427727542.png" alt="" loading="lazy"><br>
主机可以缓存最近获得的 DNS 记录,使用 ipconfig 可以查看这些缓存记录:</p>
<pre><code>ipconfig /displaydns
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425011157633-1280927344.png" alt="" loading="lazy"><br>
显示了一堆数据。每个条目显示剩余的生存时间(TTL)(秒)。<br>
当我想要清除这些缓存,就需要使用这个指令:</p>
<pre><code>ipconfig /flushdns
</code></pre>
<p>该指令将清除所有条目并从 hosts 文件重新加载条目。</p>
<h1 id="使用-wireshark-追踪-dns">使用 Wireshark 追踪 DNS</h1>
<h2 id="实验操作-1">实验操作</h2>
<p>熟悉 <strong>nslookup</strong> 和 <strong>ipconfig</strong> 之后,首先让捕获一些由常规上网活动生成的 DNS 数据包:</p>
<ol>
<li>使用ipconfig清空主机中的DNS缓存。<br>
由于我不想搞没这些数据,所以跳过。</li>
</ol>
<p>2.打开浏览器并清空浏览器缓存。</p>
<ol start="3">
<li>打开 Wireshark,然后在过滤器中输入:</li>
</ol>
<pre><code>ip.addr==your_IP_address
</code></pre>
<p>先使用 ipconfig 获取 IP 地址。此过滤器将删除既从你主机不发出也不发往你主机的所有数据包。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425012042985-167351604.png" alt="" loading="lazy"><br>
4. 在 Wireshark 中启动数据包捕获。</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425012355080-1829665459.png" alt="" loading="lazy"><br>
emm……看样子干扰挺大!<br>
5. 使用浏览器访问网页: http://www.ietf.org</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425012224228-1713536708.png" alt="" loading="lazy"><br>
6. 停止数据包捕获。</p>
<h2 id="问题解答">问题解答</h2>
<p>由于干扰很大,我使用现成的包来分析。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425012811898-1109600479.png" alt="" loading="lazy"><br>
4. 找到DNS查询和响应消息。它们是否通过UDP或TCP发送?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425012951631-1985897847.png" alt="" loading="lazy"><br>
由此可见是 UDP。<br>
5. DNS是查询消息的目标端口是什么? DNS响应消息的源端口是什么?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425013106097-76881645.png" alt="" loading="lazy"><br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425013121627-913483534.png" alt="" loading="lazy"><br>
由此可见都是 53 端口。<br>
6. DNS 查询消息发送到哪个 IP 地址?使用 ipconfig 来确定本地 DNS 服务器的 IP 地址。这两个 IP 地址是否相同?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425013320220-1080710217.png" alt="" loading="lazy"><br>
由于这不是我抓的包,此处无法验证。<br>
7. 检查 DNS 查询消息。DNS 查询是什么 "Type" 的?查询消息是否包含任何 "answers"?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425013732621-494688543.png" alt="" loading="lazy"><br>
Type 为 “A”,表示查询 IP 地址,没有任何 "answers"。<br>
8. 检查DNS响应消息。提供了多少个"answers"?这些答案具体包含什么?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425013552550-900087202.png" alt="" loading="lazy"><br>
提供了 2 个 "answers",是该域名的 2 个 IPV4 地址。<br>
9. 考虑从您主机发送的后续 TCP SYN 数据包。 SYN 数据包的目的 IP 地址是否与 DNS 响应消息中提供的任何 IP 地址相对应?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425014225610-555227256.png" alt="" loading="lazy"><br>
是相对应的。<br>
10. 这个网页包含一些图片。在获取每个图片前,您的主机是否都发出了新的 DNS 查询?</p>
<p>并没有,因为本机 DNS 已经被缓存了,因此不需要发起新的 DNS 查询。</p>
<h1 id="nslookup-的-dns-查询">nslookup 的 DNS 查询①</h1>
<h2 id="实验步骤">实验步骤</h2>
<p>现在抓取 nslookup 产生的包。</p>
<ol>
<li>启动数据包捕获。</li>
<li>使用nslookup查询 www.mit.edu</li>
</ol>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425014636093-1691052444.png" alt="" loading="lazy"><br>
3. 停止数据包捕获。</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425014801773-743483062.png" alt="" loading="lazy"><br>
我们只分析其中一个包。</p>
<h2 id="问题解答-1">问题解答</h2>
<ol>
<li>DNS查询消息的目标端口是什么? DNS响应消息的源端口是什么?</li>
</ol>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015041843-969618306.png" alt="" loading="lazy"><br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015115994-1930719628.png" alt="" loading="lazy"><br>
目标端口和源端口都是 53。<br>
2. DNS 查询消息的目标 IP 地址是什么?这是你的默认本地 DNS 服务器的 IP 地址吗?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015239891-1930469848.png" alt="" loading="lazy"><br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015305402-839223155.png" alt="" loading="lazy"><br>
192.168.67.1,是我的默认本地 DNS 服务器的 IP 地址。<br>
3. 检查 DNS 查询消息。DNS 查询是什么 "Type" 的?查询消息是否包含任何 "answers"?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015401920-1438181701.png" alt="" loading="lazy"><br>
Type 为 “A”,表示查询 IP 地址,没有任何 "answers"。<br>
4. 检查 DNS 响应消息。提供了多少个 "answers"?这些答案包含什么?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015451932-420711018.png" alt="" loading="lazy"><br>
提供了 1 个 "answers",是该域名的 IPV4 地址。</p>
<h1 id="nslookup-的-dns-查询-1">nslookup 的 DNS 查询②</h1>
<h2 id="实验步骤-1">实验步骤</h2>
<p>重复上一个实验,但换成以下命令:</p>
<pre><code>nslookup -type=NS mit.edu
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015742321-1101667704.png" alt="" loading="lazy"><br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015808521-1273413346.png" alt="" loading="lazy"></p>
<h2 id="问题解答-2">问题解答</h2>
<ol>
<li>DNS 查询消息发送到的 IP 地址是什么?这是您的默认本地 DNS 服务器的 IP 地址吗?</li>
</ol>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015946755-344945626.png" alt="" loading="lazy"><br>
192.168.67.1,是我的默认本地 DNS 服务器的 IP 地址。<br>
2. 检查DNS查询消息。DNS 查询是什么 "Type" 的?查询消息是否包含任何 "answers"?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425020230742-1339130478.png" alt="" loading="lazy"><br>
Type 为 “NS”,表示查询<strong>权威 DNS 服务器</strong>,没有任何 "answers"。<br>
3. 检查 DNS 响应消息。响应消息提供的 MIT 域名服务器是什么?此响应消息还提供了 MIT 域名服务器的 IP 地址吗?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425020440456-201813311.png" alt="" loading="lazy"><br>
响应消息没提供 MIT 的域名的 IP 地址。</p>
<h1 id="nslookup-的-dns-查询-2">nslookup 的 DNS 查询③</h1>
<h2 id="实验步骤-2">实验步骤</h2>
<p>重复上一个实验,但换成以下命令:</p>
<pre><code>nslookup www.aiit.or.kr bitsy.mit.edu
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425020635362-122576644.png" alt="" loading="lazy"><br>
<img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425020647373-933398842.png" alt="" loading="lazy"></p>
<h2 id="问题解答-3">问题解答</h2>
<ol>
<li>DNS 查询消息发送到的 IP 地址是什么?这是您的默认本地 DNS 服务器的 IP 地址吗?</li>
</ol>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425015946755-344945626.png" alt="" loading="lazy"><br>
18.0.72.3,不是我的默认本地 DNS 服务器的 IP 地址。<br>
2. 检查DNS查询消息。DNS 查询是什么 "Type" 的?查询消息是否包含任何 "answers"?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425020733021-412708694.png" alt="" loading="lazy"><br>
Type 为 “A”,表示查询 IP 地址,没有任何 "answers"。<br>
3. 检查 DNS 响应消息。提供了多少个 "answers"?这些答案包含什么?</p>
<p><img src="https://img2020.cnblogs.com/blog/1774310/202004/1774310-20200425020845943-152589546.png" alt="" loading="lazy"><br>
提供了 1 个 "answers",是该域名的 IPV4 地址。</p>
<h1 id="参考资料">参考资料</h1>
<p>《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社<br>
域名系统(服务)协议<br>
ipconfig</p><br><br>
来源:https://www.cnblogs.com/linfangnan/p/12771157.html
頁: [1]
查看完整版本: Wireshark实验——DNS 域名系统