DNS报文格式及抓包解析

报文结构

DNS的报文结构如下,其中黄色为基础部分,绿色为问题部分,蓝色为资源记录部分。资源记录部分只在响应包中出现。

DNS报文结构

基础部分

1.事务ID

16bit,DNS报文的标识,请求报文和对应的响应报文的事务ID应该相同。

2. 标志

16bit,分为8个字段:

字段长度/bit作用
QR1查询报文为0,响应报文为1
Opcode4标准查询为0,反向查询为2,请求服务器状态为2
AA1授权应答,在响应报文中有效
1表示名称服务器是权威服务器
0表示不是权威服务器
TC1是否被接断
1表示响应超过512个字节,只返回前512个字节
RD1期望递归,在查询报文中设置
1表示递归查询
0表示迭代查询
RA1可用递归,用于响应RD
1表示服务器支持递归查询
zero3保留字段,全为0
rcode4返回码
0表示没有错误
1表示请求报文格式错误
2表示域名服务器失败
3表示解析的域名不存在
4表示查询类型不支持
5表示拒绝应答

3. 问题计数

16bit,DNS查询请求的数量

4. 回答资源记录数

16bit,DNS响应的数量

5. 权威名称服务器计数

16bit,权威名称服务器的数量

6. 附加资源记录数

16bit,额外的记录数目(权威服务器对应的Ip地址)

问题部分

问题部分由三个字段组成:查询名,查询类型,查询类

1. 查询名

要查询的域名。长度不固定,由一段或多段标识符组成,首字节表示随后标识符的长度,单位为字节;每个域名结尾用一个0字节表示。例如baidu.com:

5baidu3com0
计数计数结尾

2. 查询类型

16bit,表示要查询的类型,常见的有:

助记符说明
1A由域名获得IPv4地址
28AAAA由域名获得IPv6地址
12PTR由IP地址获得域名

3. 查询类

16bit,表示地址类型,常用的是IN(值为1),表示互联网地址。

资源记录部分

资源记录部分包含回答问题区域、权威名称服务器区域、附加信息区域。这三部分的格式都为域名+类型+类+生存时间+资源数据长度+资源数据

1. 域名

长度可变,DNS请求的域名。当此域名与前文重复时,为减小报文的长度可以将此域名压缩为16bit的指针,指向前文中已经出现过的域名,方法为:

16bit指针的最高两位均置1,剩余14位的值表示前文中的域名相对于DNS报文头的偏移字节数。如:
域名指针

在上图中,回答问题区域的域名与问题部分的域名重复,因此使用了指针c0 0c。去掉最高两位后,指针表示重复域名距离DNS的报文头偏移了0c个字节。从图中可以看到,第十三个字节开始被蓝色框住的部分,即为问题部分的域名数据。

2. 类型

16bit,与问题部分的查询类型相同。

3. 类

16bit,与问题部分的查询类相同。

4. 生存时间

32bit,表示资源记录可以缓存的时间,单位为秒。

5. 资源数据长度

16bit,资源数据的长度。

6. 资源数据

按要求返回的资源数据。

抓包解析

基础部分

基础部分

问题部分

问题部分

资源记录部分

资源记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值