此工具使您能够使用 Wireshark 查看 ndiscap 和 pktmon 的数据包捕获。由于另一种流行的数据包捕获方法(WinPcap,包含在旧版 Wireshark 中)存在性能问题,因此应优先使用这些内置工具。
Windows 拥有多个能够进行数据包捕获的内置组件:
pktmon start --capture
<repro>
pktmon stop
netsh trace start capture=yes report=disabled
<repro>
netsh trace stop
这些工具生成的文件是 etl 文件,可以通过以 ETW 为中心的工具(如 Microsoft Message Analyzer)打开,但无法通过 Wireshark 打开,而 Wireshark 是许多工程师偏爱的工具。Etl2pcapng.exe 可以将 etl 文件转换为 pcapng 文件,以便使用 Wireshark 打开,或使用具有 pcapng 库的语言(如 Python 和 Rust)进行分析。
注:pktmon 有一个内置的 etl2pcap 转换实用程序("pktmon etl2pcap <filename>"),它也能够生成基本的 pcapng 文件。etl2pcapng 提供了与内置实用程序类似的转换功能,并增加了以下特性:
预构建的二进制文件可在 Releases 部分获取:https://github.com/microsoft/etl2pcapng/releases
运行工具命令:
etl2pcapng.exe in.etl out.pcapng
转换文件后,工具会打印一个表格,显示 Windows 接口索引与 pcapng 接口 ID 之间的映射。
输出的 pcapng 文件将在每个数据包上添加一条注释,指出记录数据包时当前进程的 PID。警告:这通常与实际发送或接收数据包的进程 PID 不同,因为数据包捕获提供程序通常运行在 DPC 中(它在任意进程中运行)。用户在使用 PID 信息时应牢记这一点。
在 src 目录的命令提示符中运行以下命令。至少需要 CMake 3.15。
mkdir build
cd build
cmake ..
cmake --build . --config Release
二进制文件将位于 build/Release/etl2pcapng.exe
1.12.0 - 添加对 pktmon 生成的 etl 文件的支持,并将其他提供程序事件输出为 systemd 日志导出块。
1.11.0 - 允许省略输出文件名(例如 "etl2pcapng.exe foo.etl"。输出文件名变为 "foo.pcapng")。
1.10.0 - 速度提升 10 倍。
1.9.0 - 添加对 Microsoft-Windows-Ras-NdisWanPacketCapture(VPN/远程访问)事件解码的支持,并在数据包注释中添加线程 ID(TID)
1.8.0 - 为 VMSwitch 数据包的数据包注释添加 RSS 哈希值。
1.7.0 - 在数据包注释中包含 VMSwitch 数据包信息。
1.6.0 - 启用 ControlFlowGuard。
1.5.0 - 将 iftype 和 ifindex 写入接口描述块,并静态链接 C 运行时,因此无需安装 vcredist。
1.4.1 - 修复导致写入损坏数据包的 bug。
1.4.0 - 如果捕获的分片被截断,自动推断原始分片长度。
1.3.0 - 为每个数据包添加包含进程 ID(PID)的注释。
1.2.0 - 写入每个数据包的方向信息(epb_flags)。
1.1.0 - 添加对来自 Win8 及更早版本跟踪中的多事件数据包的支持。
本项目欢迎您的贡献和建议。大多数贡献需要您同意一份贡献者许可协议(CLA),声明您有权并且确实授予我们使用您贡献的权利。有关详情,请访问 https://cla.opensource.microsoft.com。
当您提交拉取请求时,CLA 机器人会自动确定您是否需要提供 CLA,并适当装饰 PR(例如状态检查、评论)。只需按照机器人提供的说明操作即可。在所有使用我们 CLA 的仓库中,您只需执行一次此操作。
本项目采用了 Microsoft 开源行为准则。有关更多信息,请参阅行为准则常见问题解答或联系 [email protected] 提出任何其他问题或意见。