Wireshark:是什么,流量分析与数据包捕获

作者: IT Sectr 发布日期: 2026-05-08 阅读时间: 9 分钟

Wireshark — 领先的开源网络流量分析器,用于实时捕获和检查数据包。该工具支持两千多种网络协议,并可在所有主流平台上运行。根据Wireshark User Guide (2026),该工具用于移动和 Web 开发中的网络诊断、API 调试和安全分析。

要点

  • Wireshark — 具有图形界面的免费数据包嗅探器,用于分析网络流量。
  • 流量捕获通过网络接口在混杂模式下于数据链路层进行。
  • 过滤数据包按 IP、端口、协议和内容进行,通过 BPF 语言和显示过滤器实现。
  • HTTPS 分析需要配置 SSLKEYLOGFILE 或中间代理来解密会话。
  • 移动端调试可通过设备上的 tcpdump 与远程数据包捕获相结合来实现。

什么是 Wireshark,它是如何工作的

Wireshark — 一个开源程序(GPLv2),用于捕获通过计算机网络接口的数据包。它基于 libpcap(Unix)或 Npcap(Windows)库在 OSI 模型的数据链路层进行捕获。

数据包捕获原理

网络接口卡在正常模式下只接收发往其 MAC 地址的帧。Wireshark 将接口切换到混杂(promiscuous)模式,在此模式下系统会处理所有经过的帧,而不管接收者是谁。捕获的数据通过原始套接字(raw socket)传送到内核,之后 libpcap 库将其复制到用户空间进行分析。

处理架构

Wireshark 采用模块化架构:每种协议都作为一个独立的解析器(dissector)实现——即解析二进制数据并以结构化形式显示的插件。截至 2026 年,该程序已为2874 种协议实现了解析器,包括 HTTP/2、QUIC、gRPC 和 MQTT。解析器通过协议树系统工作——每个数据包逐层解析:从以太网帧到应用层。

c
// 自定义协议的简单解析器示例
static int dissect_custom(tvbuff_t *tvb, packet_info *pinfo,
        proto_tree *tree, void *data) {
    proto_item *ti = proto_tree_add_item(tree, hf_custom_field,
            tvb, 0, tvb_captured_length(tvb), ENC_NA);
    return 0;
}

Wireshark 的主要功能

图形界面 Wireshark 分为三个面板:数据包列表(packet list)、协议详情(packet details)和十六进制转储(packet bytes)。每个面板实时更新并支持交互式导航——单击数据包行即可打开其完整结构。

支持的格式和协议

该工具可读取pcap、pcapng、snoop 和 NetMon 格式的捕获文件。可导出为 JSON、XML、CSV 和纯文本。关键的应用层协议包括:HTTP/HTTPS、DNS、DHCP、TCP、UDP、TLS、QUIC、WebSocket、MQTT、AMQP 和 Protobuf。对于移动开发,支持带流多路复用的 gRPC 和 HTTP/2 尤为重要。

分析工具

内置工具包括 Follow Stream(还原完整的 TCP/UDP/TLS 对话)、IO Graph(带宽图)、会话统计(Conversations)和协议层次(Protocol Hierarchy)。Flow Graph 功能可可视化节点之间的数据包顺序,这有助于在调试客户端-服务器交互时查找延迟原因。

如何通过 Wireshark 捕获流量

开始捕获从选择网络接口开始——以太网、Wi-Fi、蓝牙 PAN 或回环(Loopback)。在 Windows 上可能需要以 WinPcap API Compatible Mode 模式安装 Npcap。要在移动设备上捕获,可通过 SSH 隧道使用远程数据包捕获(Remote Packet Capture)。

在远程设备上捕获

在 Android 设备上,流量通过 tcpdump 或 PCAPdroid 捕获,然后将文件传送到工作计算机。通过 ADB 进行远程捕获的命令:

bash
# 通过 ADB shell 在 Android 上捕获流量
adb shell tcpdump -i wlan0 -s 0 -w /sdcard/capture.pcap
# 复制到计算机
adb pull /sdcard/capture.pcap .

捕获回环流量

在 Windows 上,localhost(127.0.0.1)流量不会经过物理接口,因此 Wireshark 无法直接看到它。解决方案——安装带 Loopback Support 选项的 Npcap,或通过 RawCap 转发流量。在 Linux 和 macOS 上,回环接口(lo)无需额外设置即可捕获。

Wireshark 中的数据包过滤

Wireshark 提供两种类型的过滤器:捕获过滤器(capture filters,在捕获前于 libpcap 级别应用)和显示过滤器(display filters,应用于已捕获的数据)。捕获过滤器使用 BPF(伯克利数据包过滤器)语法,显示过滤器则使用 Wireshark 自己的语言并带自动补全。

捕获过滤器(BPF)

BPF 过滤器以 tcpdump 格式编写并在内核中执行,这在高负载时可最大限度地减少数据包丢失。过滤器示例:

过滤器 用途
tcp port 80 仅标准端口上的 HTTP 流量
host 192.168.1.1 来自特定主机的数据包
not arp 除 ARP 请求外的所有数据包

显示过滤器

显示过滤器事后应用,并支持带逻辑运算符 and、or、not 的复杂条件。示例: http.request.method == "POST" and ip.src == 192.168.0.100 将只过滤来自特定 IP 的 POST 请求。过滤器可以保存为收藏以便重复使用。

HTTP 和 HTTPS 流量分析

HTTP 流量在 Wireshark 中以可读形式显示:请求方法、URI、标头和响应正文。Follow TCP Stream 功能可在一个窗口中汇总客户端和服务器的完整对话。对于 HTTPS,需要解密 TLS 会话,因为内容已加密。

通过 SSLKEYLOGFILE 解密 HTTPS

Chrome 和 Firefox 浏览器支持 SSLKEYLOGFILE 环境变量,它会将 TLS 会话密钥写入文本文件。Wireshark 使用该文件来解密记录。配置通过 Preferences → Protocols → TLS → (Pre)-Master-Secret log filename 完成。

bash
# 启用 TLS 密钥记录启动 Chrome
export SSLKEYLOGFILE=/tmp/sslkeys.log
google-chrome .

# 捕获后在 Wireshark 中指定路径
# Edit → Preferences → Protocols → TLS → Log Filename

gRPC 和 Protobuf 分析

gRPC 使用 HTTP/2 作为传输层,并使用 Protobuf 进行数据序列化。如果提供了带结构定义的 .proto 文件,Wireshark 会解密 gRPC 消息。Protobuf 解析器将二进制字段与 proto 文件中的名称匹配,这在调试微服务架构时至关重要。

使用 Wireshark 调试移动应用

移动端调试通过 Wireshark 需要将设备流量代理到计算机。最可靠的方法是——在笔记本电脑上创建 Wi-Fi 接入点并通过 NAT 转发流量。在 Android 上,也可使用 PCAPdroid 应用的 VPN 方法,无需 root 权限。

在 Android 上进行无 root 配置

PCAPdroid 创建本地 VPN 服务,通过 UDP 流将应用流量转发到 Wireshark。该应用无需 root 访问权限,并支持按单个进程过滤。获取的 pcap 文件在 Wireshark 中打开以进行完整分析。

bash
# 在计算机上接收来自 PCAPdroid 的流量
# PCAPdroid → Settings → PCAP dumper → UDP Exporter
nc -l -u 192.168.0.10 12345 > capture.pcap

Wireshark 与替代方案的比较

Wireshark — 通用工具,但对于特定任务存在更专业的解决方案。tcpdump 更适合无图形界面的服务器捕获,Charles Proxy 更适合分析 HTTPS 流量,而 Fiddler 则适合检查 Web 流量并支持即时修改请求。

Charles Proxy 与 Wireshark

Charles Proxy 作为中间代理服务器运行,可通过自己的 SSL 证书捕获 HTTPS。与 Wireshark 不同,Charles 不需要配置 SSLKEYLOGFILE,并且不仅可以查看还可以修改流量——替换响应、模拟延迟和重复请求。

Fiddler Everywhere

Fiddler — 另一种代理工具,在 .NET 生态系统中很流行。它提供内置的请求编辑器、用于 mock 的 AutoResponder 支持,以及用于创建自定义请求的 composer。Fiddler 更适合分析浏览器 Web 流量,而 Wireshark 则适合低级网络分析。

工具 类型 无密钥 HTTPS 修改流量
Wireshark 嗅探器 否(需要 SSLKEYLOGFILE) 仅查看
Charles 代理 是(自定义证书)
Fiddler 代理 是(自定义证书)
tcpdump 嗅探器 仅查看

使用 Wireshark 的实用技巧

Wireshark 需要理解流量捕获的基本原则。常见场景之一是通过 tcp.analysis.ack_rtt 过滤器查找移动应用中的延迟来源。要查找缓慢的 HTTP 请求,请使用 http.time 大于 1 的条件。

查找慢速请求

要查找慢速 HTTP 请求,请过滤 http.time 大于 1 —— Wireshark 将显示响应时间超过 1 秒的请求。与 ip.addr 组合以分析特定服务器。间隔为 1 秒的 IO Graph 将清晰显示负载峰值。

导出与报告

Wireshark 支持通过 File 菜单导出为 CSV、JSON 和 XML。要进行自动分析,请使用 tshark —— 可在 CI/CD 流水线中运行的命令行版本。Tshark 支持与图形版本相同的过滤器和输出格式。

使用 Wireshark 的实用技巧

Wireshark 需要理解流量捕获的基本原则。常见场景之一是通过 tcp.analysis.ack_rtt 过滤器查找移动应用中的延迟来源。要查找缓慢的 HTTP 请求,请使用 http.time 大于 1 的条件。

查找慢速请求

要查找慢速 HTTP 请求,请过滤 http.time 大于 1 —— Wireshark 将显示响应时间超过 1 秒的请求。与 ip.addr 组合以分析特定服务器。间隔为 1 秒的 IO Graph 将清晰显示负载峰值。

导出与报告

Wireshark 支持通过 File 菜单导出为 CSV、JSON 和 XML。要进行自动分析,请使用 tshark —— 可在 CI/CD 流水线中运行的命令行版本。Tshark 支持与图形版本相同的过滤器和输出格式。

常见问题

Wireshark 与 tcpdump 有什么区别?

Wireshark 提供带有数据包可视化、内置过滤器和统计信息的图形界面。tcpdump — 没有 GUI 的命令行工具,适合通过 SSH 进行服务器捕获。Wireshark 可以读取 tcpdump 文件,反之亦然。

如何在 Wireshark 中捕获 HTTPS 流量?

要解密,需要 TLS 会话密钥文件(SSLKEYLOGFILE)。Chrome 和 Firefox 在带环境变量启动时会导出密钥。文件路径在 Wireshark 的 Protocols → TLS 设置中指定。

为什么 Wireshark 在 Windows 上看不到 localhost 流量?

Windows 上的回环流量默认不通过 Npcap 驱动程序。解决方案——安装启用 Loopback Support 选项的 Npcap,或使用 RawCap 工具捕获本地流量。

Wireshark 可以用于移动应用吗?

可以,通过将流量代理到计算机。Android 支持通过 PCAPdroid(无 root)或 tcpdump(有 root)捕获。iOS 需要 RVI(远程虚拟接口)通过 macOS 或越狱(jailbreak)来捕获。

如何在 Wireshark 中按内容过滤数据包?

显示过滤器 frame contains 会在整个数据包中搜索字符串或十六进制序列。示例: frame contains "password" 将找到任何字段中包含 password 子串的数据包。要按字段精确搜索,请使用 http.request.uri contains "api"

总结

  • Wireshark — 开发中分析网络流量的主要工具,支持超过 2800 种协议。
  • 数据包捕获在混杂模式下通过 libpcap 或 Npcap 库在数据链路访问层进行。
  • 过滤分为捕获过滤器(BPF,内核级)和显示过滤器(Wireshark 语言,带自动补全)。
  • HTTPS 解密可通过 SSLKEYLOGFILE 用于 Chrome 和 Firefox 浏览器。
  • 移动端调试通过 PCAPdroid(Android)或远程虚拟接口(iOS)实现,无需 root。
  • gRPC 和 Protobuf 通过加载 .proto 文件来反序列化二进制数据。
  • Flow Graph 和 IO Graph 帮助可视化延迟并发现客户端-服务器交互中的瓶颈。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读