域名系统(DNS,Domain Name System)将主机名转换为IP地址,在互联网基础架构中发挥关键作用。在本实验中,我们将仔细查看DNS在客户端的细节。回想一下,客户端在DNS中的角色相对简单——客户端向其本地DNS服务器发送请求,并接收一个响应。由于DNS分层服务器之间相互通信,可以递归地或迭代地解析客户端的DNS查询请求,而大多数操作是不可见的。然而,从DNS客户端的角度来看,协议非常简 ——将查询指向为本地DNS服务器,并从该服务器接收到响应。
因为主要使用到DNS协议,那么我们需要用到 nslookup
这个命令
nslookup
nslookup工具允许主机查询任何指定的DNS服务器的DNS记录。要完成此任务,nslookup将DNS查询发送到指定的DNS服务器,然后接收DNS回复,并显示结果。
命令的响应提供两条信息:
- 提供响应的DNS服务器的名称和IP地址;
- 响应本身,即 www.baidu.com 的主机名和IP地址
第二种命令:
nslookup -type=NS baidu.com
我们添加了选项 -type=NS
和域名 baidu.com
,首先显示了提供响应的DNS服务器(这是默认本地DNS服务器)以及三个baidu.com
的域名服务器。。然而,nslookup也表明该响应是非权威的,这意味着这个响应来自某个服务器的缓存。第三种命令:
nslookup www.baidu.com dns.baidu.com
这是希望将查询请求发送到DNS服务器 dns.baidu.com
,而不是默认的DNS服务器(public1.114dns.com
/114.114.114.114
)。因此,查询和响应事务直接发生在我们的主机和 dns.baidu.com
之间。在这个例子中,由DNS服务器 dns.baidu.com
直接提供主机 www.baidu.com 的IP地址。
我们也从中知道 DNS记录有缓存,那么如果要清除缓存,就需要使用
ipconfig /flushdns
命令。
使用WireShark 来追踪 DNS
先做如下准备:
- 使用
ipconfig /flushdns
清空主机中的DNS缓存。 - 打开浏览器并清空浏览器缓存。
- 打开Wireshark,然后在过滤器中输入
ip.addr==你的IP地址
,IP地址使用ipconfig
命令去获取。比如我这里是 192.168.43.112 ,那就过滤ip.addr==192.168.43.112
,这样将删除既不从你主机发出也不发往你主机的所有数据包。
使用HTTP
然后我们访问www.baidu.com 来查看一个DNS的数据包:
如图,可以发现DNS的查询报文是通过UDP 去发送的。然后查询报文的源端口号是随机的一个端口,目的端口号是53。响应报文相反。
查询报文的目的IP地址是 223.5.5.5
,DNS查询报文的具体内容如下:
其中的Type值为 A
,查询类型字段A类型,意思是这是查询一个主机的IP地址。 Class的值为 IN
,查询类字段, 这里指互联网地址(Internet)DNS的响应的报文具体内容如下:
可以看到了包含了三个 Answers
,我们拿出第二个来分析:
www.a.shifen.com: type A, class IN, addr 39.156.66.18
Name: www.a.shifen.com #域名字段, 这里请求的域名为 www.a.shifen.com
Type: A (Host Address) (1) #类型字段, 这里为A类型
Class: IN (0x0001) #类字段
Time to live: 181 (3 minutes, 1 second) #生存时间
Data length: 4 #数据长度
Address: 39.156.66.18 #回答的资源数据, 这里为IP地址
Name 的值为 www.a.shifen.com
,表示 DNS 请求的域名为 www.a.shifen.com
,类型为 A,表示要获取该域名对应的 IP 地址。Address 的值显示了该域名对应的 IP 地址。
使用nslookup
使用ipconfig /flushdns
清空主机中的DNS缓存。
Wireshark开始捕获,然后在命令行使用 nslookup www.baidu.com
命令,结果如下:
该DNS的查询报文和响应报文和上面的内容一样,只不过目的IP地址不同,变成了默认本地DNS服务器的IP地址(114.114.114.114).当我使用 nslookup www.baidu.com dns.baidu.com
命令去查询时,结果如下:
目的的IP地址变成了 110.242.68.134
,说明没有查默认的本地DNS服务器。