# mock-data-generate **Repository Path**: rk795/mock-data-generate ## Basic Information - **Project Name**: mock-data-generate - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-26 - **Last Updated**: 2026-06-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mock Data Generate — wa-dbus 流量日志生成器 为 `wa-dbus` 项目提供模拟流量日志数据,包含两个独立生成器和一个共享库。 ## 项目结构 ``` ├── common/ # 共享模块 (wa-dbus-testdata/common) │ ├── format/format.go # 随机数据池 (IP、端口、URI、时间戳...) + Generator 类型 │ └── rate/server.go # HTTP 控制台 & 调速 API,内嵌 Web Dashboard │ ├── syslog-gen/ # Syslog 日志生成器 (TCP → :18988) │ ├── main.go # 入口:TCP 连接池 + goroutine worker + 令牌桶限速 │ ├── config.yaml # 配置文件 │ ├── pool/pool.go # Syslog 数据池 (New, resolve) │ └── format/ │ ├── nsfocus.go # 绿盟 NSFOCUS 格式 │ ├── topsec.go # 天融信 TopSec 格式 │ ├── qax.go # 奇安信 QAX 格式 │ └── ccsc.go # CCSC 格式 │ ├── restapi-gen/ # REST API 日志生成器 (HTTP → /adapter/device/logs) │ ├── main.go # 入口:HTTP 认证 + 批量 JSON POST worker │ ├── config.yaml # 配置文件 │ ├── pool/pool.go # REST 数据池 │ └── format/rest.go # REST 日志条目生成 │ └── go.work # Go workspace (./common ./syslog-gen ./restapi-gen) ``` ## 快速开始 ### 环境要求 - Go 1.25+ - 目标服务已启动(Syslog 端口 18988 / REST API 端口 18987) ### 构建 ```bash # 构建两个生成器 go build -o bin/syslog-gen.exe ./syslog-gen go build -o bin/restapi-gen.exe ./restapi-gen ``` ### 启动 ```bash # 1. 启动 Syslog 生成器 (TCP → :18988, Web控制台 :9101) cd syslog-gen && ../bin/syslog-gen.exe --config config.yaml # 2. 启动 REST API 生成器 (HTTP → /adapter/device/logs, Web控制台 :9201) cd restapi-gen && ../bin/restapi-gen.exe --config config.yaml ``` | 生成器 | 协议 | 目标端口 | Web 控制台 | |--------|------|---------|------------| | syslog-gen | TCP | 18988 | http://localhost:9101 | | restapi-gen | HTTP POST | 18987 | http://localhost:9201 | --- ## 一、syslog-gen — Syslog 日志生成器 ### 配置文件 `syslog-gen/config.yaml` ```yaml target: "127.0.0.1:18988" # 目标地址:端口 rate: 10 # 初始速率 (条/秒) http_addr: ":9101" # Web 控制台监听地址 connections: 8 # TCP 并发连接数 (每个连接一个 goroutine) pool_size: 200000 # 预生成数据池大小 (行数) formats: # 启用的 Syslog 格式,可选: nsfocus, topsec, qax, ccsc - nsfocus - topsec - qax - ccsc ``` ### Syslog 格式说明 | 格式 | 说明 | 源文件 | |------|------|--------| | `nsfocus` | 绿盟 NSFOCUS 格式 | [nsfocus.go](syslog-gen/format/nsfocus.go) | | `topsec` | 天融信 TopSec 格式 | [topsec.go](syslog-gen/format/topsec.go) | | `qax` | 奇安信 QAX 格式 | [qax.go](syslog-gen/format/qax.go) | | `ccsc` | CCSC 格式 | [ccsc.go](syslog-gen/format/ccsc.go) | ### 运行架构 ``` config.yaml → 预生成 200000 行数据池 → 建立 8 个 TCP 连接 → 启动 8 个 goroutine worker → 令牌桶限制 (10/s) → 每连接从池中随机取一行 → c.Write(line) → 每秒输出统计日志 ``` --- ## 二、restapi-gen — REST API 日志生成器 ### 配置文件 `restapi-gen/config.yaml` ```yaml target: "http://192.168.11.105:18987" # 目标地址 rate: 10 # 初始速率 (条/秒) http_addr: ":9201" # Web 控制台监听地址 api_key: "device-api-key-001" # 设备 API Key (需在目标端注册) batch_size: 2000 # 每次批量发送条数 (目标端限制 ≤ 2000) connections: 8 # 并发 goroutine 数 pool_size: 200000 # 预生成数据池大小 (条数) ``` ### 认证流程 ``` 启动 → GET /adapter/device/auth (Authorization header: api_key) → 获取 token → 所有数据请求带 Authorization: token → 401 时自动刷新 token ``` ### 数据格式 发送到 `/adapter/device/logs` 的 JSON 数组,每条包含: | 字段 | 说明 | |------|------| | `source_endpoint_ip` | 源 IP | | `destination_endpoint_ip` | 目的 IP | | `source_endpoint_port` | 源端口 | | `destination_endpoint_port` | 目的端口 | | `event_name` | 事件名 (SQL注入/XSS攻击/端口扫描/暴力破解...) | | `protocol` | 协议 (TCP/UDP) | | `event_time` | 事件时间 (ISO 8601) | | `event_desc` | 事件描述 | | `source_payload` | 源载荷 (hex) | | `destination_payload` | 目的载荷 (hex) | --- ## 三、Web 控制台操作 两个生成器都内嵌 Web 控制台页面(`common/rate/server.go`)。 ### 访问 - Syslog 生成器:http://localhost:9101 - REST API 生成器:http://localhost:9201 ### 界面功能 | 功能 | 操作 | |------|------| | 调整速率 | 输入 QPS 值 → 点击 **应用** | | 切换格式 | 点击格式标签选中/取消 → 点击 **应用格式** (仅 Syslog) | | 启动/停止 | 点击 **▶ 开始** / **⏹ 停止** | | 实时统计 | 自动刷新:目标速率、实际速率、累计发送、错误数 | ### REST API 接口 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/` | Web 控制台页面 | | GET | `/stats` | 实时统计 JSON | | POST | `/start` | 启动数据生成 | | POST | `/stop` | 停止数据生成 | | POST | `/rate?qps=N` | 调整目标速率 (条/秒) | | POST | `/format` | 切换格式,body: `["nsfocus","topsec"]` | --- ## 四、生产 vs 开发配置建议 | 场景 | rate | connections | pool_size | |------|------|-------------|-----------| | 开发调试 | 10 | 2~4 | 50000 | | 功能测试 | 100~1000 | 8 | 200000 | | 性能压测 | 10000~50000 | 16~32 | 500000 | > **注意**:REST API 生成器的 `batch_size` 受目标端限制,最大 2000。 --- ## 五、添加新 Syslog 格式 1. 在 `syslog-gen/format/` 下添加 `GenXxx() []byte` 函数 2. 在 `syslog-gen/pool/pool.go` 的 `resolve()` map 中注册 3. (可选) 在 `common/rate/server.go` 的 `AVAILABLE` 数组中添加,Web 控制台即可显示 ```go // 1. 新建 syslog-gen/format/xxx.go package format import fm "wa-dbus-testdata/common/format" func GenXxx() []byte { m := map[string]interface{}{ "timestamp": fm.RandomTimestamp(), "src_ip": fm.RandomIP(), // ... 构造你的格式 } return fm.JSONLine(m) } // 2. 在 syslog-gen/pool/pool.go resolve() 注册 "xxx": sysfmt.GenXxx, // 3. 在 server.go pageHTML 的 AVAILABLE 数组添加 const AVAILABLE = ["nsfocus","topsec","qax","ccsc","xxx"]; ``` --- ## 六、退出 在终端按 `Ctrl+C`,程序会: 1. 停止所有发送 2. 关闭所有 TCP/HTTP 连接 3. 等待 goroutine 退出 4. 打印总计发送和错误统计后退出