什么是DNS

DNS指的是域名系统,它在内部有一个存储域名和对应IP地址的数据库,用于将网站的域名转换为服务器的具体IP地址。

例如,我们在浏览器打开baidu.com时,浏览器需要先请求DNS服务器获取域名baidu.com对应服务器的IP地址,然后浏览器与该IP建议消息通道来传输数据。

我们可以在系统命令行中通过nslookup命令来查询某个域名的DNS的记录,如下图所示:

wireshark dns域名解析分析 用wireshark分析dns_IP


这里我们指定使用阿里云的DNS服务器 223.5.5.5 来查询域名baidu.com映射的IP地址。从图中可以看到,查询结果返回了baidu.com映射的两个IP地址。

接下来我们使用Wireshark来抓包看看这个过程发生了什么。

Wireshark抓包

首先,我们打开Wireshark,选择正确的网卡并点击开始录制。

wireshark dns域名解析分析 用wireshark分析dns_服务器_02


wireshark dns域名解析分析 用wireshark分析dns_IP_03

然后在命令行中使用如下命令先清除DNS缓存,以便我们可以看到无缓冲下的请求情况。

sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder;say flushed

输入密码后,听到flushed的语音表示清除DNS缓存成功。

接着再次输入 nslookup baidu.com 223.5.5.5 命令来让Wireshark进行抓包,并在抓包结果中输入dns关键字来过滤结果中所有的dns查询记录,如下图所示:

wireshark dns域名解析分析 用wireshark分析dns_wireshark dns域名解析分析_04

从图中可以看到,在输入上面的命令后,从172.20.81.29发送了一条DNS请求到223.5.5.5,并且223.5.5.5给172.20.81.29进行了回复。

在info一栏,可以看到请求解析的域名和返回的IP地址列表。

点击请求和返回的记录,能在详情中看到更多的信息,如下图所示:

request:

wireshark dns域名解析分析 用wireshark分析dns_wireshark dns域名解析分析_05


response:

wireshark dns域名解析分析 用wireshark分析dns_服务器_06

关键信息

Transcation ID

Transcation ID 为查询事物标识,它与返回记录中的Transcation ID 想对应。如果两条DNS通信记录中的Transcation ID 相同 ,可以判断它们是一对请求和返回。

Recursion desired

Recursion desired如果标志为1,则表示该DNS请求可以在服务器链路中递归的进行查询。在中间服务器查询不到记录时,一直递归的DNS根服务器。

Queries

Queries包含DNS request的域名的字符串,在本示例中为baidu.com。

Reply code

DNS response的状态码,可以在这个字段的信息中查看response是否成功。在失败的情况下也可以查看失败对应的原因。

Answers

DNS服务器返回的IP地址列表。点开Answers详情,还可以看到该DNS缓存的有效时间,如下图所示:

wireshark dns域名解析分析 用wireshark分析dns_IP_07