当前位置:首页 > 文章列表 > 文章 > 软件教程 > Wireshark 如何用显示过滤器追踪一次 DNS 查询

Wireshark 如何用显示过滤器追踪一次 DNS 查询

来源:17golang原创 2026-10-09 18:03:07 0浏览 收藏

用 Wireshark 追踪一次 DNS 查询,最稳妥的办法是先用 dns.qry.name 留下目标域名的查询和响应,再选中查询帧查看 Response In,或读取事务 ID 后用 dns.id 把同一对报文固定下来。最后核对响应码、应答记录与 dns.time,就能判断这次解析是否成功、返回了什么以及耗时多久。

下面用一个已经保存为 dns-demo.pcapng 的抓包文件演示完整操作。示例目标域名是 example.com。显示过滤器只会隐藏不匹配的数据包,不会删除原文件里的其他流量,因此可以放心逐步缩小范围。

官方网站:https://www.wireshark.org/

开始前准备:确认抓包里有可解析的 DNS

本教程适合传统明文 DNS 报文,例如 UDP 或 TCP 上可被 Wireshark 识别为 DNS 的流量。准备文件时注意三点:

  • 优先保留 .pcapng 原始抓包,分析前复制一份工作副本;
  • 记住要查的完整域名,例如 example.com,不要先猜某个 DNS 服务器地址;
  • 如果客户端使用 DNS over HTTPS 或 DNS over TLS,未解密时通常看不到普通 dns.qry.name 字段,这种情况不能按本文方法直接筛选域名。

这里使用“导入抓包—显示过滤—核对详情—导出精简文件”的路线。它比直接在大文件中滚动列表更适合复盘,也便于把最小证据包交给同事。

步骤一:打开准备好的抓包文件

  1. 启动 Wireshark,在菜单栏选择 File → Open。
  2. 在 Open Capture File 对话框中选择 dns-demo.pcapng。
  3. 点击 Open,等待数据包列表完成载入。
原创网络分析软件界面中通过 File 和 Open 打开 dns-demo.pcapng 抓包文件的操作状态
图1:通过 File → Open 载入 pcapng 的原创操作示意图,不是 Wireshark 真实截图。

确认成功:主窗口中出现数据包列表,底部状态栏能看到抓包内的数据包数量。如果列表为空,先确认文件没有损坏,并检查是否打开了错误文件。

步骤二:先按域名留下查询和响应

窗口顶部的显示过滤器输入框用于筛选当前列表。输入下面的表达式:

dns.qry.name == "example.com"

输入时 Wireshark 会检查语法。过滤器背景变成有效状态后,按 Enter/Return,或者点击右侧 Apply。由于 DNS 响应通常也包含原查询问题区,这个条件一般会同时留下查询和对应响应。

原创网络分析软件界面中应用 dns.qry.name 等于 example.com 显示过滤器并保留 DNS 查询响应的状态
图2:按 dns.qry.name 过滤目标域名后的原创界面示意图,绿色输入状态表示表达式语法有效。

确认成功:数据包列表的 Protocol 列主要显示 DNS,Info 列中能看到一条查询和一条响应,底部显示的数据包数量明显减少。

如果目标域名出现很多次,可以先只看查询:

dns.qry.name == "example.com" && dns.flags.response == 0

其中 dns.flags.response 是布尔字段,0 表示查询,1 表示响应。这个条件适合先挑出你关心的那一次查询,但下一步配对响应时要改用事务 ID,不能一直保留“仅查询”条件。

步骤三:用事务 ID 配对查询与响应

  1. 在列表中选中目标查询帧。
  2. 展开中间的 Domain Name System 详情。
  3. 找到 Transaction ID,示例假设为 0x4a21。
  4. 同时查看查询详情中的 Response In。该字段指向匹配响应所在的帧号。
  5. 把显示过滤器改为 dns.id == 0x4a21 并应用。

同一个 DNS 事务的查询与响应使用相同事务 ID,因此这个过滤器通常会留下成对的两帧。若列表中还有更多帧,可能是重传、相同 ID 在不同会话中复用,或者抓包跨越了较长时间;此时再结合客户端/服务器 IP、UDP/TCP 会话与帧关联字段判断。

原创网络分析软件界面中使用 dns.id 配对 DNS 查询响应并查看 Request In、Response In 和 Time 字段
图3:用 dns.id 与关联字段配对 DNS 查询和响应的原创结果示意图,不是实际抓包截图。

确认成功:列表中保留同一事务的查询与响应;查询详情能看到 Response In,响应详情能看到 Request In,两者分别指向对方的帧号。选中响应后,还可以看到 dns.time,它表示该响应与关联请求之间的时间差。

步骤四:核对响应码、查询类型和应答记录

选中响应帧,在 Domain Name System (response) 中依次检查:

  • Transaction ID:必须与查询帧一致;
  • Response code:No error 表示协议层返回成功,NXDomain 表示域名不存在;
  • Queries:核对 Name 与 Type,例如 A、AAAA、CNAME;
  • Answers:查看地址、别名、TTL 等实际应答;
  • Request In / Response In:确认 Wireshark 已建立查询与响应关联;
  • Time:观察这次 DNS 往返在抓包中的响应时间。

如果只想看 A 记录查询,可以把过滤器收窄为:

dns.qry.name == "example.com" && dns.qry.type == 1

如果重点是错误响应,可使用:

dns.qry.name == "example.com" && dns.flags.response == 1 && dns.flags.rcode != 0

确认成功:查询名和类型符合预期,响应码可以解释结果,Answers 中包含目标记录;若无 Answers,也应能从响应码、权威区或附加区判断原因。不要把“收到了响应”直接等同于“解析成功”。

步骤五:只导出当前显示的两帧

为了保留最小证据包,先确认过滤器仍是精确事务条件,例如 dns.id == 0x4a21,并检查列表只显示准备导出的帧。然后:

  1. 选择 File → Export Specified Packets。
  2. 在 Packet Range 中选择 Displayed,不要选 Captured。
  3. 范围保持 All packets,含义是“所有当前显示的数据包”。
  4. 输入文件名 dns-example-only.pcapng,选择 pcapng 格式。
  5. 点击 Save。
原创网络分析软件导出对话框中选择 Displayed 和 All packets 保存两条 DNS 数据包
图4:导出当前显示 DNS 数据包的原创操作示意图,Displayed 只保存匹配当前显示过滤器的帧。

确认成功:导出对话框显示的数据包数量与当前列表一致,新文件可以重新打开,并且只包含目标查询、响应及必要的关联帧。官方说明中,Packet Range 默认选择 Displayed;操作时仍建议主动看一眼,避免误导出整份抓包。

常见问题排查

输入 dns.qry.name 后一条都没有

先只输入 dns,确认抓包中是否存在能被解析为 DNS 的报文。如果 dns 也没有结果,可能抓包时间不对、抓包点不对,或者客户端使用了加密 DNS。若有 DNS 但域名条件为空,展开一帧查看实际查询名,注意完整域名、末尾点、大小写和 CNAME 链。

只有查询,没有响应

检查查询详情里是否出现 dns.response_missing 或是否存在 dns.retransmission。也可能是抓包在响应到达前停止、只抓到单向流量、响应走了另一接口,或者端口/协议没有被正确识别。

同一个 dns.id 出现不止两帧

事务 ID 只有 16 位,长时间抓包中可能重复。将它与目标域名、IP 地址和传输会话一起限定。例如先保留 dns.id == 0x4a21,再对照 Source、Destination 和时间,不要仅凭 ID 跨会话配对。

显示过滤器和捕获过滤器有什么区别

显示过滤器作用于已经抓到的数据,只改变当前看到哪些帧;捕获过滤器在抓包时决定哪些帧会被写入文件,语法也不同。本文所有 dns.* 表达式都是显示过滤器,应该输入主窗口顶部的 Display Filter 工具栏。

操作速查

目的显示过滤器结果判断
显示全部 DNSdns确认抓包里存在可解析的 DNS
锁定目标域名dns.qry.name == "example.com"通常同时保留查询和响应
只看目标查询dns.qry.name == "example.com" && dns.flags.response == 0用于挑选具体查询帧
配对同一事务dns.id == 0x4a21结合 Request In 与 Response In 核对
查错误响应dns.flags.response == 1 && dns.flags.rcode != 0查看非成功响应码

完整路线可以压缩成一句话:先用域名找到目标查询,再用事务 ID 配对响应,最后用关联字段、响应码、Answers 和响应时间完成核对。需要分享时,只导出 Displayed 数据包,就能得到体积小、上下文明确的 DNS 证据文件。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
用 ResponseController 在代理中逐块刷新数据用 ResponseController 在代理中逐块刷新数据
上一篇
用 ResponseController 在代理中逐块刷新数据
设置写截止时间后流式响应为何仍然阻塞
下一篇
设置写截止时间后流式响应为何仍然阻塞
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    393次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    472次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    478次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    421次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    248次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码