域名系统(DNS,Domain Name System)将主机名转换为IP地址,在互联网基础架构中发挥关键作用。在本实验中,我们将仔细查看DNS在客户端的细节。回想一下,客户端在DNS中的角色相对简单——客户端向其本地DNS服务器发送请求,并接收一个响应。由于DNS分层服务器之间相互通信,可以递归地或迭代地解析客户端的DNS查询请求,而大多数操作是不可见的。然而,从DNS客户端的角度来看,协议非常简 ——将查询指向为本地DNS服务器,并从该服务器接收到响应。

因为主要使用到DNS协议,那么我们需要用到 nslookup这个命令

nslookup

nslookup工具允许主机查询任何指定的DNS服务器的DNS记录。要完成此任务,nslookup将DNS查询发送到指定的DNS服务器,然后接收DNS回复,并显示结果。

WIRESHARK DNS异常 wireshark dns实验_wireshark


命令的响应提供两条信息:

  1. 提供响应的DNS服务器的名称和IP地址;
  2. 响应本身,即 www.baidu.com 的主机名和IP地址

第二种命令:

nslookup -type=NS baidu.com

WIRESHARK DNS异常 wireshark dns实验_DNS_02


我们添加了选项 -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地址。

WIRESHARK DNS异常 wireshark dns实验_网络_03


我们也从中知道 DNS记录有缓存,那么如果要清除缓存,就需要使用

ipconfig /flushdns命令。

WIRESHARK DNS异常 wireshark dns实验_DNS_04

使用WireShark 来追踪 DNS

先做如下准备:

  1. 使用ipconfig /flushdns清空主机中的DNS缓存。
  2. 打开浏览器并清空浏览器缓存。
  3. 打开Wireshark,然后在过滤器中输入ip.addr==你的IP地址,IP地址使用 ipconfig 命令去获取。比如我这里是 192.168.43.112 ,那就过滤 ip.addr==192.168.43.112,这样将删除既不从你主机发出也不发往你主机的所有数据包。

使用HTTP

然后我们访问www.baidu.com 来查看一个DNS的数据包:

WIRESHARK DNS异常 wireshark dns实验_WIRESHARK DNS异常_05

WIRESHARK DNS异常 wireshark dns实验_服务器_06

如图,可以发现DNS的查询报文是通过UDP 去发送的。然后查询报文的源端口号是随机的一个端口,目的端口号是53。响应报文相反。

WIRESHARK DNS异常 wireshark dns实验_DNS_07


查询报文的目的IP地址是 223.5.5.5,DNS查询报文的具体内容如下:

WIRESHARK DNS异常 wireshark dns实验_服务器_08


其中的Type值为 A ,查询类型字段A类型,意思是这是查询一个主机的IP地址。 Class的值为 IN,查询类字段, 这里指互联网地址(Internet)DNS的响应的报文具体内容如下:

WIRESHARK DNS异常 wireshark dns实验_服务器_09


可以看到了包含了三个 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命令,结果如下:

WIRESHARK DNS异常 wireshark dns实验_wireshark_10


该DNS的查询报文和响应报文和上面的内容一样,只不过目的IP地址不同,变成了默认本地DNS服务器的IP地址(114.114.114.114).当我使用 nslookup www.baidu.com dns.baidu.com命令去查询时,结果如下:

WIRESHARK DNS异常 wireshark dns实验_WIRESHARK DNS异常_11


目的的IP地址变成了 110.242.68.134,说明没有查默认的本地DNS服务器。