pcapng 模式
相关源文件
以下文件被用作生成此维基页面的上下文:
目的与范围
本页面涵盖了 eCapture 的 pcapng 捕获模式(使用 -m pcap 或 -m pcapng 参数)的技术设计、配置和操作流程。该模式通过 eBPF 探针(如流量控制 (TC) 过滤器或套接字钩子)记录网络数据包,并同时从核心加密库(tls, gotls, gnutls)中捕获 TLS 主密钥(Master Secrets)。它将这两个数据流序列化为一个单一的 pcapng 制品,其中包含标准的数据包块(Packet Blocks)和嵌入的 TLS 解密密钥块(Decryption Secrets Blocks, DSB)。这种格式允许 Wireshark 等工具自动解密 HTTPS 和 TLS 流量,而无需额外的密钥日志(keylog)文件。
Sources: internal/probe/base/handlers/pcapng_handler.go:88-101, internal/output/pcapng/session.go:46-76
核心 TLS 模块的验证命令
要使用 pcapng 格式执行捕获,请在选择目标模块(tls, gotls 或 gnutls)的同时指定 -m pcap 或 -m pcapng。
OpenSSL 与 BoringSSL (TLS 捕获 (OpenSSL/BoringSSL))
ecapture tls -m pcapng --pcapfile capture.pcapng -i eth0Go 原生 TLS (GoTLS 捕获)
ecapture gotls -m pcapng --pcapfile capture.pcapng --pid 12345GnuTLS (GnuTLS 捕获)
ecapture gnutls -m pcapng --pcapfile capture.pcapng -i eth0Sources: internal/probe/base/handlers/pcapng_handler.go:188-194, internal/output/pcapng/session.go:78-166
接口选择与输出规则
pcapng 会话通过调用 net.Interfaces() 检查系统网络接口来初始化,以构建接口描述块 (NgInterface) internal/output/pcapng/session.go:84-133。
- 接口选择 (
-i/--interface): 用户指定的接口被设为主捕获接口 (ifaceIdx)。所有其他活动接口也会自动添加到pcapng文件头中,以便正确映射跨网桥或回环设备产生的数据包 internal/output/pcapng/session.go:112-148。 - 输出接收端 (Destination Sinks): 捕获的数据被写入
ByteSink抽象层,该层支持多种输出目标,包括本地文件、TCP 流 (tcp://host:port)、WebSockets (ws://host:port/) 以及用于测试的内存缓冲区 internal/output/pcapng/destinations_test.go:43-105。
Sources: internal/output/pcapng/session.go:78-148, internal/output/pcapng/destinations_test.go:43-132
--pcapfile 兼容性与输出别名
在 pcap 或 pcapng 模式下运行时,--pcapfile 标志作为指定输出路径的向后兼容别名。在底层,CLI 解析此标志并初始化 PcapngHandler,该处理器包装了一个有状态的 pcapng.Session 并分配底层的 ByteSink internal/probe/base/handlers/pcapng_handler.go:120-137。
Sources: internal/probe/base/handlers/pcapng_handler.go:120-137, internal/output/pcapng/session.go:168-198
数据包块与 TLS 解密密钥块 (DSB) 的实现
Session 结构体管理网络数据包 (TcPacket) 和 TLS 密钥日志条目的并发摄取 internal/output/pcapng/session.go:47-76。在高吞吐量突发期间,数据包通过非阻塞通知通道 (queueReady) 排队而不会丢失 internal/output/pcapng/session.go:56-63。密钥日志条目被转换为 TLS 解密密钥块 (DSB_SECRETS_TYPE_TLS) 并写入编码器流中 internal/output/pcapng/session.go:220-234。
架构流程:自然语言到代码实体
Sources: internal/probe/base/handlers/pcapng_handler.go:139-169, internal/output/pcapng/keylog_adapter.go:40-47, internal/output/pcapng/session.go:168-230
Wireshark 检查与验证工作流
当生成的 .pcapng 文件加载到 Wireshark 中时:
- Wireshark 解析分段首部块(Section Header Block)和接口描述块(Interface Description Blocks)。
- 它会识别到嵌入的 解密密钥块 (DSB),其中包含 NSS 密钥日志行(如
CLIENT_TRAFFIC_SECRET_0等)。 - 在解析后续的增强型数据包块 (
EPB) 时,Wireshark 会自动使用嵌入的密钥来解密 TLS 1.3 和 TLS 1.2 的握手及应用数据记录。
会话生命周期与执行流程
Sources: internal/probe/base/handlers/pcapng_handler.go:119-137, internal/output/pcapng/session.go:78-166, internal/output/pcapng/session_test.go:59-107