如本文第2.4节所述,域名系统(DNS)将主机名转换为IP地址,在互联网基础设施中发挥着关键作用。在本实验中,我们将仔细研究DNS的客户端。回想一下,客户端在DNS中的角色相对简单—客户端向其本地DNS服务器发送查询,并收到响应。如教科书中的图2.19和图2.20所示,很多事情可以“隐藏”进行,对DNS客户端是不可见的,因为分层DNS服务器相互通信,以递归或迭代地解析客户端的DNS查询。然而,从DNS客户机的角度来看,该协议非常简单——向本地DNS服务器制定查询,然后从该服务器接收响应。
在开始本实验之前,您可能希望通过阅读本文第2.4节来复习DNS。特别是,您可能希望查看有关本地DNS服务器、DNS缓存、DNS记录和消息以及DNS记录中的TYPE字段的资料。
1. 网路资讯查询
在本实验中,我们将广泛使用nslookup工具,该工具目前在大多数Linux/Unix和Microsoft平台上都可以使用。要在Linux/Unix中运行nslookup,只需在命令行中键入nslookup命令。要在Windows中运行它,打开命令提示符并在命令行上运行nslookup。
nslookup工具在其最基本的操作中,允许运行该工具的主机在指定的DNS服务器上查询一条DNS记录。查询的DNS服务器可以是根DNS服务器、顶级域DNS服务器、权威DNS服务器或中间DNS服务器(这些术语的定义参见教科书)。为了完成此任务,nslookup向指定的DNS服务器发送DNS查询,并从同一DNS服务器接收DNS应答,并显示结果。
上面的屏幕截图显示了三个独立的nslookup命令的结果(显示在Windows命令提示符中)。在本例中,客户端主机位于布鲁克林理工大学的校园内,其中默认的本地DNS服务器是DNS -prime.poly.edu。当运行nslookup时,如果没有指定DNS服务器,则nslookup将查询发送到默认的DNS服务器,在本例中是dnsprime.poly.edu。考虑第一个命令:
nslookup www.mit.edu
换句话说,这个命令的意思是“请给我发送主机www.mit.edu的IP地址”。如截图所示,该命令的响应提供了两条信息:(1)提供应答的DNS服务器的名称和IP地址;(2)答案本身,即www.mit.edu的主机名和IP地址。虽然响应来自理工大学的本地DNS服务器,但很有可能这个本地DNS服务器迭代地联系了其他几个DNS服务器来获得答案,如教科书第2.4节所述。
现在考虑第二个命令:
nslookup –type=NS mit.edu
在本例中,我们提供了选项“type=NS”和域“mit.edu”。这会导致nslookup向默认的本地DNS服务器发送type-NS记录的查询。换句话说,这个查询说,“请把mit。edu的权威DNS主机名发给我”。(当不使用type选项时,nslookup使用默认值,即查询A类记录。)在上面的屏幕截图中显示的答案首先指示了提供答案的DNS服务器(这是默认的本地DNS服务器)以及三个MIT名称服务器。每个服务器都是MIT校园主机的权威DNS服务器。然而,nslookup还表明答案是“非权威的”,这意味着该答案来自某些服务器的缓存,而不是来自权威的MIT DNS服务器。最后,答案还包括MIT权威DNS服务器的IP地址。(尽管nslookup生成的type-NS查询没有明确要求IP地址,但本地DNS服务器会“免费”返回这些地址,nslookup会显示结果。)
现在最后考虑第三个命令:
nslookup www.aiit.or.kr bitsy.mit.edu
在本例中,我们希望将查询发送到 DNS 服务器 bitsy.mit.edu 而不是默认 DNS 服务器 (dns-prime.poly.edu)。因此,查询 和回复事务直接发生在查询主机和 bitsy.mit.edu 之间。在 本例中,DNS 服务器 bitsy.mit.edu 提供了主机 的 IP 地址。www.aiit.or.kr 的 IP 地址,它是韩国信息技术高级研究所的网络服务器。技术高级研究所(位于韩国)的网络服务器。
现在我们已经看了一些说明性的例子,您可能想知道nslookup命令的一般语法。语法是:
nslookup –option1 –option2 host-to-find dns-server
通常,nslookup可以使用零个、一个、两个或多个选项运行。正如我们在上面的例子中看到的,dns服务器也是可选的;如果没有提供,查询将被发送到默认的本地DNS服务器。
现在我们已经提供了nslookup的概述,现在是您自己测试驱动它的时候了。做以下事情(并写下结果):
- 执行nslookup获取亚洲的Web服务器的IP地址。服务器的IP地址是什么?
我这里用的linux测试baidu.com的IP地址。
百度的IP的地址为 39.156.66.10 和 110.242.68.66
- 运行nslookup命令确定欧洲某大学的权威DNS服务器。
-
运行nslookup,以便在问题2中获得的一个DNS服务器上查询Yahoo!邮件。它的IP地址是什么?
最开始linux中nslookup mail.yahoo.com use5.akam.net查询不到结果。
后面那本地windows的结果。
2.ipconfig
ipconfig(适用于Windows)和ifconfig(适用于Linux/Unix)是主机中最有用的小实用程序,特别是用于调试网络问题。这里我们只进行描述ipconfig,尽管Linux/Unix的ifconfig非常相似。ipconfig可以用来显示当前的TCP/IP信息,包括地址、DNS服务器地址、适配器类型等等。例如,如果您要获取所有关于主机的信息,只需输入
ipconfig /all
输入命令提示符,如下面的截图所示。
ipconfig对于管理存储在主机中的DNS信息也非常有用。在2.5节中,我们了解到主机可以缓存它最近获得的DNS记录。要查看这些缓存的记录,在提示符C:>之后提供以下命令:
ipconfig /dispalydns
每个条目以秒为单位显示剩余的生存时间(TTL)。清空缓存,输入
ipconfig /flushdns
刷新DNS缓存将清除所有条目,并重新加载hosts文件中的条目。
3. 使用Wireshark跟踪DNS
现在我们已经熟悉了nslookup和ipconfig,我们准备开始一些严肃的工作。让我们首先捕获由普通网络冲浪活动生成的DNS数据包。
- 使用ipconfig清空主机中的DNS缓存。
- 打开浏览器并清空浏览器缓存。(使用ie浏览器,进入“工具”菜单,选择“Internet选项”;然后在常规选项卡中选择删除文件。)
- 打开Wireshark,输入“ip”。addr == your_IP_address”输入过滤器,通过ipconfig获取your_IP_address。此过滤器将删除所有既不是发送也不是发送到您的主机的数据包。
- 启动Wireshark抓包。
- 使用浏览器访问Web页面:http://www.ietf.org
- 停止抓包。
如果您无法在实时网络连接上运行Wireshark,您可以下载在作者的一台计算机上执行上述步骤时捕获的数据包跟踪文件。回答以下问题。只要有可能,在回答下面的问题时,你应该在你回答问题的过程中提交一份打印出来的包。在打印出来的材料上加上注释来解释你的答案。要打印数据包,请使用文件 - >打印,选择仅选定数据包,选择数据包摘要行,然后选择回答问题所需的最小数据包详细信息量。
- 定位DNS查询和响应消息。然后通过UDP或TCP发送?
UDP
- DNS查询消息的目的端口是什么?DNS响应消息的源端口是什么?
目的端口和响应端口都是53
- DNS查询报文发送到哪个IP地址?使用ipconfig来确定本地DNS服务器的IP地址。这两个IP地址是一样的吗?
DNS查询报文发送到IP为114.114.114.114。
与本地DNS服务器IP地址一样
- 检查DNS查询消息。DNS查询的“Type”是什么?查询消息是否包含任何“answers”?
Type = A 没有任何 answers
- 检查DNS响应消息。提供了多少“答案”?这些答案都包含了什么?
两个 Answers。
- 考虑主机发送的后续TCP SYN包。SYN报文的目的IP地址与DNS响应消息中提供的IP地址是否对应?
我这里做了几次确实没有后续的TCP SYN包,我不知道为什么。
- 这个网页包含图片。在检索每个映像之前,您的主机是否发出新的DNS查询?
没有。
现在我们来看看nslookup。
- 开始抓包。
- 对www.mit.edu进行nslookup
- 停止抓包。
您应该得到如下所示的跟踪:
从上面的截图中我们可以看到nslookup实际上发送了三个DNS查询并收到了三个DNS响应。出于本任务的目的,在回答以下问题时,请忽略前两组查询/响应,因为它们特定于nslookup,通常不是由标准Internet应用程序生成的。相反,您应该关注最后的查询和响应消息。
- DNS查询消息的目的端口是什么?DNS响应消息的源端口是什么?
目的端口和响应的源端口都是53
- DNS查询报文发送到哪个IP地址?这是您的默认本地DNS服务器的IP地址吗?
发送到114.114.114.114
我本地的默认DNS服务器IP地址
-
检查DNS查询消息。DNS查询的“类型”是什么?查询消息是否包含任何“答案”?
Type 是 A。 没有任何answers -
检查DNS响应消息。提供了多少“答案”?这些答案都包含了什么?
提供了3个answers -
提供截图。
现在重复前面的实验,但是发出命令:
nslookup –type=NS mit.edu
回答以下问题:
- DNS查询报文发送到哪个IP地址?这是您的默认本地DNS服务器的IP地址吗?
发送到114.114.114.114和8.8.8.8(我查了下8.8.8.8 - 这是Google提供的公共DNS服务。)
这两个都是我本地的DNS服务器IP地址。
- 检查DNS查询消息。DNS查询的“类型”是什么?查询消息是否包含任何“答案”?
Type = A 没有answers
- 检查DNS响应消息。响应消息提供了哪些MIT名称服务器?此响应消息是否也提供MIT命名者的IP地址?
提供了use5.akam.net等很多个名称服务器。
没有提供MIT命名者的IP地址。
- 提供截图。
现在重复前面的实验,但是发出命令:
nslookup www.aiit.or.kr bitsy.mit.edu
回答以下问题:
- DNS查询报文发送到哪个IP地址?这是您的默认本地DNS服务器的IP地址吗?如果不是,IP地址对应什么?
不是,IP地址为18.0.72.3.应该是bitsy.mit.edu的IP地址。
- 检查DNS查询消息。DNS查询的“类型”是什么?查询消息是否包含任何“答案”?
没有answers
- 检查DNS响应消息。提供了多少“答案”?这些答案都包含了什么?
看到包含了应该是aiit.or.kr的IP地址
- 提供截图。