# Fatbeans WebHook 帮助文档

## 1. 功能简介

Fatbeans 的 WebHook 功能 允许用户通过自定义的 HTTP API 接口 实时拦截、修改或放行抓取到的网络数据包，也可以从数据包中提取所需的特定数据。

### *注意事项*

当WebHook开启后，Fatbeans原有的拦截器、修改器、回复器和取值器规则将不再生效，全部移交给用户自定义的API接口逻辑进行处理。

### 核心能力

- 实时回调：当开启了WebHook后，Fatbeans 在抓包时自动触发 WebHook，将封包信息推送至用户指定的 API
- 动态决策：用户可通过接口逻辑自由控制数据包的 拦截（Drop）、修改（Modify） 或 放行（Allow）
- 灵活扩展：支持 Python、Java、C# 等任意语言编写 WebHook 服务，无缝集成现有系统
- 安全传输：封包数据以 Base64 编码传输，确保二进制内容的完整性

### 典型应用场景

- 安全审计：实时监控敏感数据传输（如账号密码明文）
- 协议调试：动态修改请求/响应包，测试服务端兼容性
- 流量管控：限制特定 IP 或端口的访问频率
- 全自动化：配合Fatbeans的发送封包接口实现与应用服务端的自动化交互和测试

## 2. 运行原理

### 交互流程

1. Fatbeans 抓包 → 封装为 JSON（含 IP、端口、Base64 数据等）
2. POST 请求 → 发送至用户配置的 WebHook 接口
3. 用户逻辑处理 → 返回 `OpCode` 决定拦截、修改或放行
4. Fatbeans 执行 → 根据接口响应操作封包

## 3. 接口开发规则

### POST /WebHookApi （接口名称由用户开发时自行定义）

本 API 用于接收 Fatbeans 发送的封包信息并返回处理指令。

#### 请求头

    Content-Type: application/json

#### Fatbeans请求参数如下：

        {
        "Protocol": "Tcp",       // Tcp、Udp
        "SrcIP": "192.168.1.100",
        "SrcPort": 54321,
        "DstIP": "104.160.141.3",
        "DstPort": 5000,
        "Data": "aGVsbG8gd29ybGQ="  // Base64 编码的原始封包，解码后为封包的十六进制字节数组
        }

#### 用户API要响应的参数如下：

    {
      "ErrorCode": 0,             // 0=成功，非0=错误
      "ErrorMsg": "处理成功",      // 错误描述
      "OpCode": 1,                // 0=放行，1=拦截，2=修改
      "NewData": "aGVsbG8gRkFUUg==" // OpCode=2 时需返回修改后的Base64数据
    }

#### 操作码说明

- `0`: 放行数据包
- `1`: 拦截数据包
- `2`: 修改数据包（需提供NewData）

#### 注意事项

- 接口需在4秒内返回响应，超时将被视为放行
- 修改封包时需确保`NewData`符合协议格式
- 建议对高频请求做性能优化