首页/网络/抓包与流量分析速查/DNS 查询报文结构判读
应用层报文判读71 条

DNS 查询报文结构判读

一次查询含问题段(名称+类型+类)与可能附加段:用 dns.qry.name / dns.qry.type 过滤定位域名与记录类型,问题段是分析起点。

DNS 查询报文结构

一次 DNS 查询报文由报头、问题段,以及可能出现的回答、授权和附加段组成。抓包分析通常从问题段入手:用 dns.qry.name 定位域名、dns.qry.type 区分记录类型、dns.id 把请求与响应配对。问题段是理解「这次解析在问什么」的最短路径。

基本信息

适用平台Wireshark(dns 协议解析)
关键字段dns.qry.name、dns.qry.type、dns.id
常见类型值1 是 A,28 是 AAAA,5 是 CNAME,15 是 MX
协议依据RFC 1035(DNS 实现与规范)

典型使用场景

  • 确认在问什么:域名与记录类型是判读的起点
  • 配对请求与响应:用事务 ID 把两条报文关联起来
  • 分析解析链:把 CNAME 指向与最终地址记录串起来看
  • 统计查询分布:按域名聚合找出查询量最大的目标
  • 排查名字差异:抓包中的名字可能带上了搜索域后缀

常用过滤

常用过滤
dns.qry.name == "api.example.com"   # 指定域名
dns.qry.type == 28                    # AAAA 记录
dns.flags.response == 0               # 只看查询方向
dns.id == 0x1234                      # 按事务 ID 配对请求与响应

常见记录类型

类型值名称含义
1AIPv4 地址记录
28AAAAIPv6 地址记录
5CNAME别名指向
15MX邮件交换记录
查询名不区分大小写,并且可能被客户端补上搜索域后缀。过滤之前先看一眼原文,直接用应用里写的短名字去匹配往往命中不到。
同一个域名同时查 A 与 AAAA 会产生两条独立查询,统计查询次数时要分别计数,否则会得出翻倍的解析量。
事务 ID 用于把请求与响应配对,重试时该值可能相同也可能变化,取决于实现。配对时把 ID、源端口与查询名放在一起看更可靠。
回答段、授权段与附加段分别是解析结果、权威服务器提示与随附数据。只看问题段会漏掉「是谁回答了这条查询」这类关键信息,判断解析来源时要把几段合起来看。

易错点

  • 抓包看到的名字可能是补全后的完整域名,与应用写法不同属正常
  • 同名不同型(A/AAAA)是两条独立查询,统计次数要分别计
  • 用短域名去过滤补全后的查询名会命中为零,先复制原文再写表达式
  • 只看问题段不看回答段,容易漏掉别名链导致实际目标与预期不符
  • 把响应回答段里的内容当成请求问题段,会把别名链的中间目标误认成最终解析结果

数据来源与参考

  • RFC 1035(DNS)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌