DNS协议分析
一、实验简介
本实验主要讲解DNS协议的应用,通过一次ping任务,抓取DNS协议数据报文,对DNS解析的请求和相应报文进行详细的分析。
二、实验目标
1.了解运输层DNS协议基本概念、报文结构;
2.分析DNS报文头部;
3.分析DNS请求和相应过程;
4.掌握使用wireshark进行DNS协议分析技术。
三、实验环境
实验主机:centos7和本地Windows
实验工具:Wireshark
四、实验步骤
- 在本地Windows上打开Wireshark,选择要抓取的网卡,我们虚拟机使用的是VMnet8,所以这里选择这个网卡。
- 打开centos7虚拟机,确保虚拟机可以上网。
- 虚拟机ping百度域名。
- 通过Wireshark抓取ping百度域名的数据包。
- 把DNS解析数据包过滤出来,右键点击页面,找到对话过滤器,选择UDP,因为DNS协议是使用UDP协议传输的,这样过滤比较快。
过滤之后的数据包,只有两条数据,分别是请求数据会响应数据
- 接下来我们对DNS的请求报文进行分析,这里我们可以看到DNS请求数据是由UDP协议发送的,端口号是53。
这是DNS报文的基础结构部分,每个字段含义如下:
事务ID(TransactionID):DNS报文的ID标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分DNS应答报文是对哪个请求进行响应的。
标志(Flags):DNS报文中的标志字段。
问题计数(Questions):DNS查询请求的数目。
回答资源记录数(AnswersRRs):DNS响应的数目。
权威名称服务器计数(AuthorityRRs):权威名称服务器的数目。
附加资源记录数(AdditionalRRs):额外的记录数目(权威名称服务器对应IP地址的数目)。
- 下图所示是DNS报文中的标志字段
其中Flags字段中每个字段的含义如下:
QR(Response):查询请求/响应的标志信息。查询请求时,值为0;响应时,值为1。
Opcode:操作码。其中,0表示标准查询;1表示反向查询;2表示服务器状态请求。
AA(Authoritative):授权应答,该字段在响应报文中有效。值为1时,表示名称服务器是权威服务器;值为0时,表示不是权威服务器。
TC(Truncated):表示是否被截断。值为1时,表示响应已超过512字节并已被截断,只返回前512个字节。
RD(RecursionDesired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
RA(RecursionAvailable):可用递归。该字段只出现在响应报文中。当值为1时,表示服务器支持递归查询。
Z:保留字段,在所有的请求和应答报文中,它的值必须为0。
rcode(Replycode):返回码字段,表示响应的差错状态。
当值为0时,表示没有错误;
当值为1时,表示报文格式错误(Formaterror),服务器不能理解请求的报文;
当值为2时,表示域名服务器失败(Serverfailure),因为服务器的原因导致没办法处理这个请求;
当值为3时,表示名字错误(NameError),只有对授权域名解析服务器有意义,指出解析的域名不存在;
当值为4时,表示查询类型不支持(NotImplemented),即域名服务器不支持查询类型;
当值为5时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答,,或者服务器不希望进行某些操作(比如区域传送zonetransfer);
6-15保留值,暂时未使用。
- 下面是DNS报文的问题查询部分,每个字段含义如下:
其中Queries字段中每个字段的含义如下:
查询名(Name):一般为要查询的域名,有时也会是IP地址,用于反向查询。
查询类型(Type):DNS查询请求的资源类型。通常查询类型为A类型,表示由域名获取对应的IP4地址。(更多类型如AAAA,CANME,SOA,PTR,NS等)
查询类(Class):地址类型,通常为互联网地址,值为1。
那么,对于上面报文内容,翻译过后的意思就是,“该报文为标准查询(Opcode=0)请求(QR=1)报文,向本地域名服务器(IP报文中目的地址为本地域名服务器地址,在上面准备工作中已经知道了)请求查询,发起请求内容为‘获取www.baidu.com(Name=www.baidu.com)所对应的IP4地址(Type=A)’,期待本地域名服务器递归查询(RD=1)请求”
- 下面是DNS响应数据包基础结构部分,报文中的标志字段,表示一次标准的查询响应,没有错误。
- 下图是DNS响应数据包回答资源记录
每个字段含义如下:
Questions:1#问题计数
AnswerRRs:3#回答计数
AuthorityRRs:0#域名服务器计数
AdditionalRRs:0#额外记录计数
- 响应报文中,Queries字段完全和请求报文相同
每个字段含义如下:
Name:DNS请求的域名。
Type:资源记录的类型,与问题部分中的查询类型值是一样的。
Class:地址类型,与问题部分中的查询类值是一样的。
- 最后我们来看看Answer字段,一共三个回答。
回答一:类型为CNAME,代表别名,其别名为www.a.shifen.com
回答二:类型为主机地址,其IP地址为120.232.145.144
回答三:类型为主机地址,其IP地址为120.232.145.185
本次解析没有Authoritativenameservers(权威名称服务器)和Additionalrecords(附加记录),这里就不做详细解释了。