Skip to content

术语表

相关源文件

以下文件被用作生成此维基页面的上下文:

本页面提供了 eCapture 项目中使用的代码库特定术语、eBPF 领域概念和技术行话的定义。它为新加入的工程师提供参考,帮助其理解系统的实现细节和数据流。

eBPF 与内核概念

BTF (BPF Type Format)

一种描述 BPF 程序和 Linux 内核数据类型的元数据格式。eCapture 使用 BTF 来支持 CO-RE(一次编译,到处运行),允许单个二进制文件在不同的内核版本上运行而无需重新编译。

  • 代码指针: cli/cmd/root.go:163-163 中的 globalConf.BtfMode
  • 实现: eCapture 会检查 BTF 的可用性,以决定加载 CO-RE 还是 non-CO-RE 字节码。

CO-RE vs. Non-CO-RE

  • CO-RE: 使用 vmlinux.h 和 BPF 重定位。通过 kern/ecapture.h:18-26 中的 #ifndef NOCORE 块启用。
  • Non-CO-RE: 针对不支持 BTF 的内核的传统模式。它使用标准的 Linux 头文件,并且需要针对特定内核版本的特定字节码。定义在 kern/ecapture.h:28-88 中。

Uprobe / Uretprobe

用户态探针。eCapture 将这些探针挂载到共享库中的函数(如 OpenSSL 中的 SSL_read),以拦截明文数据。

TC (Traffic Control) Classifier

挂载到网络接口出口/入口(egress/ingress)钩子上的 eBPF 程序。在 eCapture 的 pcap 模式中用于捕获原始数据包。


eCapture 子系统

EventProcessor

用户态的中心枢纽,负责从 eBPF map 接收原始字节并将其分发给特定的 worker。

EventWorker

针对每个连接或每个线程的 worker,负责处理捕获数据的有状态重组和解析。它维护一个缓冲区(payload)和一个 IParser

IParser

特定协议解析器(如 HTTP/1.1、HTTP/2)的接口。它将原始字节流转换为结构化日志。

eCaptureQ

一个基于 WebSocket 的远程事件分发系统。它允许 eCapture 作为服务器运行,使用 Protobuf 将捕获的事件推送到远程客户端。


TLS 与加密术语

Master Secret / Keylog

用于派生 TLS 会话加密密钥的机密材料。eCapture 提取这些内容以允许 Wireshark 解密流量。

SSL/TLS Plaintext Fragment (明文分片)

SSL_readSSL_write 等库函数捕获的已解密数据。eCapture 将其限制为 MAX_DATA_SIZE_OPENSSL (16KB),以适应 eBPF map 的限制。


代码实体映射图

数据路径:从内核钩子到用户输出

此图连接了基于 C 的内核探针与基于 Go 的处理流水线之间的鸿沟。

Sources: pkg/event_processor/iworker.go:153-161, pkg/event_processor/iworker.go:174-227, kern/openssl.h:187-189, kern/tc.h:58-63

GoTLS 实现:符号到结构体映射

GoTLS 捕获依赖于 Go 运行时和 TLS 库中的特定偏移量。

Sources: kern/gotls_kern.c:31-48, kern/gotls_kern.c:132-144, kern/gotls_kern.c:162-165


构建系统词汇

术语定义代码参考
BYTECODE_FILESMakefile 变量,定义了哪些 eBPF 程序需要编译。variables.mk:36-36
go-bindata用于将 eBPF .o.nocore 文件嵌入到 Go 二进制文件中的工具。main.go:4-4
EXTRA_CFLAGSeBPF 程序的编译器标志,包括优化级别 (-O2)。variables.mk:236-240
TARGET_TAG用于区分 linuxecap_android 的构建标签。variables.mk:65-68

Sources: variables.mk:36-36, variables.mk:65-68, variables.mk:236-240, main.go:4-4

术语表 has loaded