docs/remote-config-update-api-zh_Hans.md
本文档介绍 eCapture 运行过程中如何通过 HTTP 接口远程修改配置,面向调用方(HTTP Client),说明如何构造请求和 payload 与 eCapture 通讯。
说明:
- 默认:禁用(不启动 HTTP 服务)。通过
--listen启用,例如:--listen 127.0.0.1:28256- 设置
--listen ""可显式禁用 HTTP 服务(运行时配置更新将不可用)- 所有接口均为 HTTP POST + JSON,路径不带前缀,直接是模块名(例如
/tls、/gotls)
POSTapplication/jsonconfig.*Config 一致)eCapture 在不同平台支持的配置更新路径略有差异:
Linux 下可以通过以下 HTTP 路径更新配置:
| 路径 | 用途简述 |
|---|---|
/tls | OpenSSL / TLS 模块 |
/openssl | 同 /tls,别名 |
/boringssl | 同 /tls,别名 |
/gotls | Go TLS 模块 |
/gnutls | GnuTLS 模块 |
/nss | NSS / NSPR 模块 |
/nspr | 同 /nss,别名 |
/bash | Bash 命令捕获(仅 Linux) |
/mysqld | MySQLd 协议捕获(仅 Linux) |
/postgress | PostgreSQL 协议捕获(仅 Linux) |
提醒:
/openssl、/boringssl是/tls的别名,配置结构完全一致;/nss与/nspr使用同一套配置结构;/bash、/mysqld、/postgress在 Android GKI 平台上 不可用。
Android GKI 下支持的路径为:
| 路径 | 用途简述 |
|---|---|
/tls | OpenSSL / TLS 模块 |
/openssl | 同 /tls,别名 |
/boringssl | 同 /tls,别名 |
/gotls | Go TLS 模块 |
/gnutls | GnuTLS 模块 |
/nss | NSS / NSPR 模块 |
/nspr | 同 /nss,别名 |
提醒:
- Android 平台 没有
/bash、/mysqld、/postgress这些配置更新接口;- 如果你的管理程序需要同时兼容 Linux 和 Android,请在调用前根据平台做一次能力判断。
所有模块配置更新接口都使用相同的 HTTP 请求格式:
POSThttp://<listen-address>/<path>http://127.0.0.1:28256/tlsContent-Type: application/jsonpid、uid、debug、hex、btf、per_cpu_map_size、truncate_size 等配置字段请以实际版本中
user/config/*.go的结构体为准,下面示例仅用于演示调用方式。
所有接口的响应体为统一结构:
{
"code": 0,
"module_type": "openssl",
"msg": "RespOK",
"data": null
}
字段说明:
code (number):状态码
0:成功(RespOK)4:配置 JSON 解码失败(RespConfigDecodeFailed)5:配置检查失败(RespConfigCheckFailed)6:后台通道写入失败(RespSendToChanFailed)module_type (string):模块名称(如 openssl、gotls、gnutls 等),用于标识本次更新对应的模块msg (string):code 对应的简短字符串,便于日志和调试data:当前接口未使用,一般为 nullHTTP 状态码与 code 的关系(调用侧可以按以下逻辑判断):
code == 0:更新成功,后台已开始按新配置重启模块;code 通常是 4 或 5);下面示例都假设 eCapture 运行在本机,使用默认监听地址 127.0.0.1:28256。
注意:示例 JSON 的字段仅用于展示调用方式,不代表完整或最终字段列表,请与实际结构体对齐。
/tls / /openssl / /boringssl)适用于基于 OpenSSL / BoringSSL / 通用 TLS 的应用。三个路径效果相同,可任选其一。
curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{
"pid": 0,
"uid": 0,
"debug": false,
"hex": false,
"btf": 0,
"per_cpu_map_size": 1024,
"truncate_size": 0,
"filters": {
"target_process": ["nginx", "curl"],
"ignore_process": ["ecapture"]
}
}' \
http://127.0.0.1:28256/tls
可能的成功响应:
{
"code": 0,
"module_type": "openssl",
"msg": "RespOK",
"data": null
}
package main
import (
"bytes"
"encoding/json"
"log"
"net/http"
)
type TlsConfig struct {
Pid uint64 `json:"pid"`
Uid uint64 `json:"uid"`
Debug bool `json:"debug"`
Hex bool `json:"hex"`
Btf uint8 `json:"btf"`
PerCpuMapSize int `json:"per_cpu_map_size"`
TruncateSize uint64 `json:"truncate_size"`
// 这里可以继续补充你真正使用的字段
}
type Resp struct {
Code uint8 `json:"code"`
ModuleType string `json:"module_type"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
func main() {
cfg := TlsConfig{
Pid: 0,
Uid: 0,
Debug: false,
Hex: false,
Btf: 0,
PerCpuMapSize: 1024,
TruncateSize: 0,
}
body, _ := json.Marshal(cfg)
resp, err := http.Post(
"http://127.0.0.1:28256/tls",
"application/json",
bytes.NewReader(body),
)
if err != nil {
log.Fatalf("request failed: %v", err)
}
defer resp.Body.Close()
var r Resp
if err := json.NewDecoder(resp.Body).Decode(&r); err != nil {
log.Fatalf("decode resp failed: %v", err)
}
log.Printf("status=%d code=%d module=%s msg=%s",
resp.StatusCode, r.Code, r.ModuleType, r.Msg)
}
/gotls)适用于 Go 程序使用的 TLS 实现。
curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{
"pid": 0,
"uid": 0,
"debug": true,
"per_cpu_map_size": 2048
}' \
http://127.0.0.1:28256/gotls
/gnutls)适用于使用 GnuTLS 的应用程序。
curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{
"pid": 0,
"uid": 0,
"debug": false
}' \
http://127.0.0.1:28256/gnutls
/nss / /nspr)适用于基于 NSS / NSPR 的 TLS 实现(例如部分浏览器、系统组件)。
curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{
"pid": 0,
"uid": 0,
"debug": false
}' \
http://127.0.0.1:28256/nss
/nspr 用法完全相同,只是路径不同:
curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{ ... }' \
http://127.0.0.1:28256/nspr
/bash)Android GKI 平台不支持此接口,如你的程序需要兼容多平台,请在调用前判断。
curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{
"pid": 0,
"uid": 0,
"debug": true
}' \
http://127.0.0.1:28256/bash
/mysqld)curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{
"pid": 0,
"uid": 0,
"debug": false
}' \
http://127.0.0.1:28256/mysqld
/postgress)注意路径拼写为
/postgress(双 s)。
curl -v \
-H "Content-Type: application/json" \
-X POST \
--data '{
"pid": 0,
"uid": 0,
"debug": false
}' \
http://127.0.0.1:28256/postgress
调用方可以结合 HTTP 状态码与 code 字段做判断:
| HTTP 状态 | code | 含义说明 | 调用方建议 |
|---|---|---|---|
| 200 | 0 | 成功,配置已被后台接受并进入重启流程 | 正常处理 |
| 200 | 1 | 请求无效 | 请求包构建异常,修正 |
| 200 | 2 | 服务器内部错误 | 间隔一段时间后重试 |
| 200 | 4 | JSON 解析失败(语法错误或字段类型错误) | 修正请求体后重试 |
| 200 | 5 | 配置校验失败(必填字段缺失、值非法等) | 根据错误日志修正配置后再发送 |
| 200 | 6 | 后台通道已满,暂时无法接受新的配置 | 间隔一段时间后重试 |
| 其他 | 1 / 2 | 无效请求 / 内部错误(当前接口不常用) | 视情况记录日志并报警 |
更多相应码见 cli/http/resp.go 中的定义。
503 时可指数退避重试;bash / mysqld / postgress 等 仅 Linux 支持 的路径做条件调用;user/config/*.go 中的字段可能会有微调;| 版本 | 日期 | 说明 |
|---|---|---|
| 0.1.0 | 2025-12-07 | 初版:远程配置修改 HTTP API 说明 |