eCapture 开发者如何运行 e2e 端到端测试验证各模块捕获功能并排查失败?

📅 发布时间:2026/9/15 14:04:34
eCapture 开发者如何运行 e2e 端到端测试验证各模块捕获功能并排查失败?
eCapture 开发者如何运行 e2e 端到端测试验证各模块捕获功能并排查失败【免费下载链接】ecaptureCapturing SSL/TLS plaintext without a CA certificate using eBPF. Supported on Linux/Android kernels for amd64/arm64.项目地址: https://gitcode.com/GitHub_Trending/ec/ecapture如果你在修改 eCapture 的探针、事件处理或构建流程改动之后最直接的验证方式就是跑仓库自带的 e2e 测试套件它在真实 Linux 内核上启动 eCapture 各模块发起 HTTPS 或数据库请求检查捕获输出中是否出现明文内容。测试需要 root 权限要求 Linux 内核 x86_64 架构 4.18、aarch64 架构 5.5并具备CAP_SYS_ADMIN和CAP_BPF能力。完整说明见 docs/e2e-tests.md。测试套件覆盖哪些模块套件按被验证的模块分为两组全部通过 Makefile 目标驱动见 Makefile类型模块验证内容简单探针bashbash 命令捕获readline hooks简单探针zshzsh 命令捕获需安装 zsh简单探针mysqldMySQL 查询捕获需 MySQL/MariaDB 服务简单探针postgresPostgreSQL 查询捕获需 PostgreSQL 服务TLS/SSLtlsOpenSSL/BoringSSL 明文流量捕获TLS/SSLgnutlsGnuTLS 库流量捕获TLS/SSLgotlsGo 原生 crypto/tls 捕获TLS 类测试以https://github.com为目标站点客户端分别是 curlTLS、wget 或 curlGnuTLS、以及仓库自带的 Go 客户端 test/e2e/go_https_client.goGoTLS。Makefile 中的目标组合为e2e-basice2e-bash e2e-tls e2e-gnutls e2e-gotls四个目标e2ee2e-basice2e-advanced即全量套件e2e-zsh、e2e-mysql、e2e-postgres不在e2e全量目标里需要单独执行。准备条件内核与权限按上述要求准备。工具链方面两套文档给出的版本基线略有差异这里分别标注来源编译 eCapture 本身docs/compilation.mdgolang 1.21、clang 9.0、cmake 3.18.4、llvm 9.0e2e 测试套件额外列出的工具版本docs/e2e-tests.mdgo 1.24 或更新、clang 12 或更新以及openssl生成证书、nc端口检查模块专属依赖zsh shellmysql 客户端 运行中的 MySQL/MariaDBpsql 客户端 运行中的 PostgreSQLpython3、curlTLS/GnuTLS 测试wget可选GnuTLS 客户端可选库libgnutls30/libgnutls28、libssl1.1/libssl3。二进制方面先构建make all # 或 make nocore内核不支持 BTF 的系统make all会在/usr/local/lib下不存在libpcap.a时把 libpcap 安装到系统目录可能影响系统已有的 libpcap 头文件这一点 docs/compilation.md 有明确提示。也可以跳过手动构建e2e 脚本的公共函数 test/e2e/common.sh 会在bin/ecapture不存在时自动先执行make all失败后回退make nocore。运行测试最短路径是跑完整套件约 10–20 分钟sudo make e2e只验证四个基础模块sudo make e2e-basic按模块单独运行适合定位到具体模块后再执行# 简单探针 sudo make e2e-bash # 测试 bash 命令捕获 sudo make e2e-zsh # 需要 zsh sudo make e2e-mysql # 需要 MySQL/MariaDB 服务 sudo make e2e-postgres # 需要 PostgreSQL 服务 # TLS/SSL 探针 sudo make e2e-tls # OpenSSL/BoringSSL 捕获 sudo make e2e-gnutls # GnuTLS 捕获 sudo make e2e-gotls # GoTLS 捕获跳过 Makefile 直接执行脚本也可以脚本需要先有可执行权限chmod x test/e2e/*.sh sudo bash test/e2e/tls_e2e_test.sh如果需要更细粒度的验证HTTP/1.1 与 HTTP/2、PID/UID 过滤、pcap/keylog 模式、tshark/tcpdump 集成等Makefile 还提供了 advanced 目标例如sudo make e2e-tls-text-advanced、sudo make e2e-tls-pcap-advanced、sudo make e2e-gotls-advanced以及e2e-advanced聚合目标详见 test/e2e/QUICK_REFERENCE.md。判断测试结果每个 e2e 脚本走相同的五段流程前置检查root、内核版本、工具→ 构建 → 后台启动 eCapture 并等待 2–3 秒初始化、执行客户端请求 → 校验捕获输出 → 清理进程与临时文件。结果标记含义标记含义✓ PASS测试完成且达到预期结果⚠ WARN完成但验证受限或依赖可选功能✗ FAIL测试失败需查看日志⊘ SKIP因缺少依赖被跳过测试通过的输出形如文档示例[INFO] TLS E2E Test [INFO] Step 1: Prerequisites Check [INFO] Kernel version: 5.15.0 (OK) [INFO] All required tools are present ... [SUCCESS] ✓ TLS E2E test PASSED [SUCCESS] eCapture successfully captured TLS plaintext traffic校验逻辑是检查输出文件中是否出现预期的明文内容HTTP 头/请求体等。以 test/e2e/tls_e2e_test.sh 为例text/pcap/keylog 三种模式各有独立的 PASSED 判定其中 keylog 模式在环境依赖条件不满足时会给出⚠ PASSED (ecapture configured correctly, capture is environment-dependent)这类警告级通过。失败时按错误信息排查脚本失败时会输出带上下文的错误信息、完整服务日志、eCapture 输出日志和客户端请求日志。docs/e2e-tests.md 的 Troubleshooting 一节覆盖了六类常见现象1. 权限不足报This test requires root privileges时加sudo运行例如sudo make e2e-tls。2. 内核过旧报Kernel version 4.15.0 is too old. Required: 4.18时升级内核或换用更新的系统可用uname -r核对当前版本。3. 缺少工具报Missing required tools: curl python3时安装对应包# Ubuntu/Debian sudo apt-get install curl python3 openssl netcat-openbsd # RHEL/CentOS sudo yum install curl python3 openssl nc4. 端口被占用报Port 8443 did not open within 10s时先检查端口占用情况sudo netstat -tlnp | grep 8443确认占用进程后sudo kill pid会终止该进程——pid需要替换为上一条命令输出中实际占用 8443 端口的进程号且只能针对你确认可以终止的进程执行。5. 构建失败报Failed to build ecapture时安装构建依赖并手动重建sudo apt-get install clang llvm libelf-dev pkg-config golang-go make clean make all6. eCapture 进程退出报eCapture process died时按文档检查 eBPF 支持sudo dmesg | grep -i bpf # 查看 BPF 相关错误 ls /sys/kernel/btf/vmlinux # 确认内核有 BTF 支持进一步调试文档给出的三个深入手段# 1. 查看测试日志失败时保留在临时目录 ls -la /tmp/ecapture_*_e2e_*/output/ # 2. 用 bash -x 跟踪脚本执行路径 sudo bash -x ./test/e2e/tls_e2e_test.sh # 3. 前台手动运行 eCapture 观察输出 sudo ./bin/ecapture tls -m text日志目录的完整形式是/tmp/ecapture_module_test_pid/output/例如/tmp/ecapture_tls_text_advanced_12345/output/。另外可用./bin/ecapture tls -h、./bin/ecapture gnutls -h、./bin/ecapture gotls -h核对各模块支持的参数test/e2e/QUICK_REFERENCE.md 还给出了一次性调试输出方式sudo ecapture tls -m text -d debug.log 21。已知限制文档Known Limitations部分说明测试连接https://github.com需要外网GitHub 不可达时测试会失败同文档Security Notes部分又写All traffic is localhost-only两处描述不一致离线环境下请先确认目标站点可达性再判定失败原因。GnuTLS 测试中 wget/curl 实际可能链接 OpenSSL 而非 GnuTLS此时测试仍验证 GnuTLS 模块能启动和捕获但 GnuTLS 完整链路需要用链接 libgnutls 的应用验证。测试依赖sleep延时等待进程启动在慢速系统上可能需要调整。eCapture 输出格式会随捕获模式text/pcap/keylog、库版本和流量形态变化校验失败时先对比输出格式。执行耗时参考QUICK_REFERENCE 数据基础测试 2–5 分钟全量套件约 10–20 分钟。下一步接入 CI如果你希望每次提交都自动回归docs/e2e-tests.md 给出了 GitHub Actions 示例安装clang llvm libelf-dev pkg-config golang-go curl python3 openssl netcat-openbsd后执行sudo make e2e也给出了 Docker 方案用--privileged模式挂载源码目录在 ubuntu:22.04 容器内make all make e2e。修改 e2e 测试本身的提交文档要求先本地sudo make e2e验证、遵循现有脚本模式并在提 issue 时附上uname -r、cat /etc/os-release和测试日志。【免费下载链接】ecaptureCapturing SSL/TLS plaintext without a CA certificate using eBPF. Supported on Linux/Android kernels for amd64/arm64.项目地址: https://gitcode.com/GitHub_Trending/ec/ecapture创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考