Skip to content

支持的平台与版本

相关源文件

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

eCapture 专为现代 Linux 环境设计,利用 eBPF (Extended Berkeley Packet Filter) 拦截明文流量。由于 eBPF 特性与 Linux 内核紧密耦合,其支持情况主要由内核版本和架构决定,而非特定的发行版名称。

操作系统与架构支持

eCapture 支持以下操作系统和 CPU 架构。它明确不支持 Windows 或 macOS,因为这些系统缺少标准的 Linux eBPF 子系统。

操作系统架构最小内核版本备注
Linuxx86_64 (amd64)4.18+标准服务器/桌面环境。
Linuxaarch64 (arm64)5.5+AWS Graviton, 树莓派等。
Androidaarch64 (GKI)5.5+需要 GKI (通用内核镜像)。

平台验证列表

以下发行版通过 CI 或手动测试定期进行验证:

架构与代码映射

下图展示了平台特定逻辑如何在 Go 用户空间和 eBPF 内核空间中进行分支处理。

平台逻辑调度

标题:平台特定实体映射

Sources: internal/probe/openssl/config_linux.go:40-75, internal/probe/openssl/config_ecandroid.go:89-105, variables.mk:147-166

CO-RE 与 Non-CO-RE 模式

eCapture 提供两种运行模式来处理内核兼容性:

  1. CO-RE (一次编译,到处运行)
    • 要求:内核必须编译时开启 CONFIG_DEBUG_INFO_BTF=y
    • 机制:使用 BPF 类型格式 (BTF) 在加载时重定位结构体偏移量。
    • 二进制文件:使用嵌入在二进制文件中的标准 .o 文件。
  2. Non-CO-RE
    • 要求:当 BTF 不可用时使用(常见于较旧的 4.18+ 内核)。
    • 机制:专门针对目标内核的头文件进行编译/链接。
    • 二进制文件:使用在构建过程中生成的 .nocore 变体 variables.mk:233

不同平台的特性差异

虽然核心 TLS 捕获在所有支持的平台上均可工作,但某些高级功能受内核版本或操作系统变体的限制。

内核特性门控

探针可用性

探针Linux x86_64Linux arm64Android arm64
TLS (OpenSSL/BoringSSL)
GoTLS
Bash/Zsh 审计仅 Bash
MySQL / Postgres
GnuTLS / NSPR

Sources: variables.mk:215-227, README.md:12-16, CHANGELOG.md:20

实现细节:版本检测

eCapture 执行运行时环境检查以选择正确的 eBPF 字节码。

内核版本检查

pkg/util/kernel 包解析 /proc/version_signature (Ubuntu)、/proc/version (Debian) 或 uname 来确定 LINUX_VERSION_CODE pkg/util/kernel/kernel_version.go:113-131

Android BoringSSL 检测

在 Android 上,eCapture 读取 /system/build.prop 来识别操作系统版本(例如 ro.build.version.release=13),并将其映射到特定的 BoringSSL 钩子实现,如 boringssl_a_13 internal/probe/openssl/config_ecandroid.go:77-80

代码实体流

标题:内核与库版本映射

Sources: pkg/util/kernel/kernel_version.go:113-131, internal/probe/openssl/config_linux.go:40-75, .github/agents/pr-agent.md:115-118

支持的平台与版本 has loaded