第 6 章 Wireshark 的工作原理
6.1. 介绍
本章将简要概述 Wireshark 的工作原理。
6.2. 概述
下面将向您简要介绍 Wireshark 的功能模块:
图 6.1 Wireshark 功能模块
各模块简介:
GUI
处理所有用户输入/输出(所有窗口、对话框等)。源代码可以在ui/qt目录中找到。
Core
将其他块组合在一起的主要“胶水代码”。源代码可以在根目录中找到。
Epan
增强型数据包分析器——数据包分析引擎。源代码可以在epan目录中找到。Epan 提供以下 API:
- 协议树(Protocol Tree)。单个数据包的剖析信息。
- 分析器(Dissectors)。epan/dissectors中的各种协议分析器。
- 分析器插件(Dissector Plugins) - 支持将分析器实现为单独的模块。源代码在plugins 中。
- 显示过滤器(Display Filters) - epan/dfilter中的显示过滤器引擎 。
Wiretap
监听库用于读写libpcap、pcapng 和许多其他文件格式的捕获文件。源代码在wiretap目录中。
Capture
捕获引擎的接口。源代码在根目录中。
Dumpcap
捕获引擎本身。这是唯一以提升的权限执行的部分。源代码在根目录中。
Npcap和libpcap
这些是在不同平台上提供数据包捕获和过滤支持的外部库。Npcap和libpcap中的过滤在比 Wireshark 的显示过滤器低得多的级别上工作,并且使用了截然不同的机制。这就是为什么有不同的显示和捕获过滤器语法的原因。
6.3. 抓包
抓包是指从网络适配器获取数据包并将它们保存到硬盘上的文件中。
由于原始网络适配器访问需要提升权限,因此将这些需要提权的功能统一置于dumpcap程序中。将捕获功能放入dumpcap允许其余代码(解剖器、用户界面等)以普通用户权限运行。
为了从Wireshark中隐藏所有底层机器相关的细节,使用了libpcap和Npcap(参见第 5.9 节,“libpcap或Npcap(可选,但强烈推荐)”)库。这些库提供了一个通用接口来捕获数据包,并被各种应用程序使用。
6.4. 捕获文件
Wireshark可以读取和写入其文件格式为pcapng和pcap的捕获文件,许多其他网络捕获工具(例如 tcpdump)都使用这些格式。此外,Wireshark 支持以其他网络捕获工具使用的格式读取和写入数据包捕获文件。这种支持是在Wireshark的wiretap库中实现的,它提供了一个通用接口来读写抓包格式,支持二十多种抓包格式。
6.5. 剖析数据包
Wireshark在所谓“双重”剖析中分析数据包。
Wireshark在所有数据包从文件加载时执行第一遍剖析。所有数据包都按顺序剖析,此信息用于填充 Wireshark的数据包列表窗格,并构建显示数据包时所需的状态和其他信息。
Wireshark随后对其所需的数据包执行“第二次”专门的剖析。这使Wireshark能够填写未来所需的字段,例如“帧#中的响应(response in frame #)”字段,并正确计算重组框架依赖性。
例如当用户选择数据包(以显示数据包详细信息)、计算统计数据(因此计算所有值)或执行需要数据包数据的其他操作时,Wireshark 将执行专门的剖析。但是由于Wireshark可能只解析需要的数据包,因此无法保证Wireshark会再次解析所有数据包,也无法保证解析数据包的顺序。