游乐游手机版
首页/数据库/文章详情

使用Wireshark分析DNS协议过程与报文解析

时间:2026-08-20 16:55
一 准备工作实验环境为 Windows 8 1 Pro抓包分析工具使用 WireShark 1 10 8 Stable Version通过系统自带的 Ping 命令发送 ICMP 报文。二 开始操作打开 CMD exe 并输入:ping www oschina net系统会自动进行 DNS 域名解析

一.准备工作

实验环境为 Windows 8.1 Pro

抓包分析工具使用 WireShark 1.10.8 Stable Version

通过系统自带的 Ping 命令发送 ICMP 报文。

二.开始操作

打开 CMD.exe 并输入:

ping www.oschina.net

系统会自动进行 DNS 域名解析,并默认发送 4 个 ICMP 报文。

启动 Wireshark,选择一个可用网卡并开始抓包。

在控制台执行完成后停止抓包监控。

三.分析阶段

截获到的全部报文如下:

整体来看,共有 2 个 DNS 数据包(对应一次域名解析过程)以及 8 个 ICMP 数据包(对应四次 ping 请求与响应)

下面开始具体分析 DNS 的工作流程:

先打开第一个数据包:

可以看到,DNS 属于应用层协议,下层传输层使用 UDP,再下层网络层为 IP 协议,最底层则是数据链路层的以太网帧。

这里重点需要关注的是应用层实现,也就是 DNS 协议本身。

在分析 DNS 之前,可以先从下层协议中获取一些必要信息:

UDP(User Datagram Protocol)报文中:DNS 的目的端口(Dst Port)为 53

IPv4(Internet Protocol Version 4)报文中的目的 IP 为 192.168.1.1(局域网路由器)

由于 IP 报文在网络层需要经过路由选择,因此数据会先发送到路由器,而不是直接发往最终的 DNS 服务器,这一点其实很好理解。

第一个包是 DNS 请求包,因此其中通常不会直接包含最终 DNS 服务器的地址。

展开 DNS 数据:

首先看到的是 Transaction ID 标识字段,长度为 2 字节,用于标识 DNS 应答报文对应的是哪一个请求报文。

第二个字段是 Flags 标志位,长度同样是 2 字节,每一位都有不同含义,具体可以参考上面那张图,也可以结合下面这张图理解:

QR: 查询/响应,1 表示响应,0 表示查询

Opcode: 查询或响应类型,这里 0 表示标准查询,1 表示反向查询,2 表示服务器状态请求

AA: 授权回答,仅在响应报文中有效,后面再看

TC: 截断,1 表示报文超过 512 字节并已被截断,0 表示未发生截断

RD: 是否希望获得递归回答

RA: 在响应报文中为 1 时表示支持并已得到递归响应

zero: 全 0 保留字段

rcode: 返回码,在响应报文中各取值含义如下:

0 - 无差错

1 - 格式错误

2- 域名服务器出现错误

3 - 域名引用问题

4 -查询类型不支持

5 - 被禁止

6 ~ 15 保留

紧接在标志位后面的字段是

Quetions(问题数),2 字节,通常为 1

Answer RRs(资源记录数)、Authority RRs(授权资源记录数)、Additional RRs(附加资源记录数)通常为 0

字段 Queries 为查询或响应的正文部分,主要分为 Name、Type、Class

Name(查询名称): 这里就是 ping 后面的域名参数,长度不固定,并以 0 结束

Type(查询类型): 2 字节,这里查询的是主机 A 记录。其常见取值含义如下:

值 助记符 说明

1 A IPv4地址。

2 NS 名字服务器。

5 CNAME 规范名称。定义主机的正式名字的别名。

6 SOA 开始授权。标记一个区的开始。

11 WKS 熟知服务。定义主机提供的网络服务。

12 PTR 指针。把IP地址转化为域名。

13 HINFO 主机信息。给出主机使用的硬件和操作系统的表述。

15 MX 邮件交换。把邮件改变路由送到邮件服务器。

28 AAAA IPv6地址。

252 AXFR 传送整个区的请求。

255 ANY 对所有记录的请求。

Class(类): 2 字节,IN 表示 Internet 数据,通常值为 1

下面是截获到的第二个 DNS 数据包:

可以看到,与第一个请求包相比,响应包中多出了一个 Answers 字段,同时 Flags 字段中的每一位也都有了明确含义。

重点关注一下,Flags 中显示 AnswerRRs 为 4,这说明对应的 Answers 字段中会返回 4 项解析结果。

Answers 字段可以理解为一个 List,集合中的每一项都是一个资源记录。除了前面提到的 Name、Type、Class 之外,还包括 Time to

Live、Data length、Addr。

生存时间 TTL(Time to Live):它表示该资源记录在缓存中的有效时长,也就是从取出记录到缓存失效之间经历的时间,单位为秒。这里显示为 0x00 00 00 fd,换算后为 253 秒。

Data length(资源数据长度): 以字节为单位,这里的 4 表示 IP 地址长度为 4 字节,也就是下面 Addr 字段的长度。

Addr(资源数据): 返回的 IP 地址,也就是这次 DNS 解析真正得到的结果。

可以看到一共返回了 4 条资源记录,也就是 4 个不同的 IP 地址,说明域名 www.oschina.net 对应了 4 个 IP 地址,分别是:

112.124.5.74

219.136.249.194

61.145.122.155

121.9.213.124

CMD 中显示的是第一条 IP 地址。我也尝试直接访问上面这些地址的 80 端口(HTTP),

第一个和第二个返回 403 Forbidden

第三个和第四个返回 404 Not Found

每个地址对应的 Server 也并不相同,例如 oscali、oscdb、liubc、ep2。第一个看起来像阿里云服务器,第二个似乎更像数据库服务器,其他几个就暂时无法准确判断了。

Web 服务器看起来像是 Tengine,

暂时还不清楚为什么通过 IP 地址无法直接访问对应的 Web 站点,后面有时间再继续研究一下。

关于 ICMP 协议报文分析,后续会在下一篇文章中继续展开。今天先写到这里。

最后,欢迎大家留言评论交流,也欢迎一起讨论一下 OSC 这里的解析和服务器配置到底是怎么回事。

来源:https://apiv1.oschina.net/oschinapi/blog/detail?id=290922
上一篇Spring Boot结合Redis实现分布式任务队列的方法 下一篇MongoDB分片键如何结合业务模型进行合理选择
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。