ekneg54/loggen-rs

GitHub: ekneg54/loggen-rs

用 Rust 编写的高性能模板驱动日志生成器,支持内置攻击模式和多种输出目标,用于安全检测规则验证与日志管道压测。

Stars: 0 | Forks: 0

# loggen-rs 一个用 Rust 编写的高性能日志生成器。使用 Tera (Jinja2) 模板、内置随机变量和可配置的攻击模式生成逼真的日志条目——支持流式传输到 stdout、文件、HTTP 或 Kafka。 ## 快速开始 ``` loggen generate --count 100 # 100 basic entries loggen generate --templates ./templates/ --count 1000 --output out.log # Template mode loggen generate --config examples/template-example.yaml # From YAML ``` ## 内置变量 模板中自动可用的变量: | 变量 | 类型 | 描述 | |----------|------|-------------| | `{{ timestamp }}` | datetime | 当前 UTC 时间戳(使用 `| date(format="...")`) | | `{{ level }}` | string | 来自配置的日志级别(`log_level`) | | `{{ index }}` | u64 | 从 1 开始的条目计数器 | | `{{ message }}` | string | 来自配置的消息(`message`) | | `{{ ip }}` / `{{ ipv4 }}` | string | 随机 IPv4 地址 | | `{{ ipv6 }}` | string | 随机 IPv6 地址 | | `{{ user_agent }}` | string | 随机 User-Agent | | `{{ email }}` | string | 随机电子邮件 | | `{{ url }}` | string | 随机 URL 路径 | | `{{ port }}` | u16 | 随机端口号 | | `{{ status }}` | u16 | 加权随机 HTTP 状态码 | | `{{ user }}` | string | 随机用户名 | ## 配置 所有功能均通过 YAML 或 CLI 标志进行配置。查看完整参考: - [配置参考](docs/configuration-reference.md) - [模板与变量指南](docs/template-guide.md) - [攻击场景示例](docs/attack-gallery.md) - [CLI 备忘单](docs/cli-cheatsheet.md) ### 最小配置 ``` count: 100 log_level: INFO message: "Example log entry" ``` ### 带有随机变量的模板模式 ``` count: 1000 logs: - '{{ ipv4 }} - {{ email }} [{{ timestamp | date(format="%d/%b/%Y:%H:%M:%S %z") }}] "{{ method }} {{ url }} HTTP/1.1" {{ status }} {{ port }}' - '{{ level }} | {{ ipv4 }} | {{ user_agent }} | {{ message }}' template_vars: app_name: loggen random_intensity: 1.0 template_rotation: round_robin ``` ### 攻击模式 ``` attacks: - name: brute-force type: single_event template: '{{ ipv4 }} - POST /login {{ status }}' count: 50 interleave: true vars: status: values: ["401", "401", "401", "401", "200"] mode: weighted ipv4: values: ["192.168.1.100"] mode: cycle ``` ## 主要特性 - **模板引擎:** Tera(受 Jinja2 启发),支持 `{{ var }}`、过滤器、`{% if %}` 和 `{% for %}` - **自动随机化:** 用于生成逼真 IP、UA、电子邮件、URL、端口和状态码的内置生成器 - **攻击模式:** `single_event`、`multi_ordered`、`threshold_field`,支持交错插入 - **流式输出:** 内存高效的管道——不会将所有条目缓冲在内存中 - **并行生成:** 基于 Rayon 的并行批处理,实现高吞吐量 - **多目标输出:** stdout、文件(支持轮转)、HTTP(支持批处理/重试)、Kafka - **进度报告:** 针对大型生成任务向 stderr 实时输出统计信息 - **种子 RNG:** 通过 `seed` 配置或固定种子实现可复现的输出 - **Shell 补全:** 生成 bash/zsh/fish/powershell/elvish 补全脚本 ## 示例配置 浏览 `examples/` 目录以获取可直接运行的 YAML 文件: | 文件 | 描述 | |------|-------------| | `minimal.yaml` | 最小配置(5 个条目,默认值) | | `example.yaml` | 包含所有核心字段的基础配置 | | `file-output.yaml` | 文件输出目标 | | `file-output-enhanced.yaml` | 文件轮转、缓冲、截断 | | `template-example.yaml` | 带有内置随机变量的模板模式 | | `http-output.yaml` | 带 NDJSON 批处理的 HTTP 输出 | | `kafka-output.yaml` | Kafka 输出(需要 `--features kafka`) | | `attack-brute-force.yaml` | 暴力破解登录(single_event) | | `attack-port-scan.yaml` | 端口扫描(multi_ordered) | | `attack-ddos.yaml` | DDoS 逐步增强(threshold_field) | | `attack-sqli-probe.yaml` | SQL 注入探测(multi_ordered) | | `attack-credential-stuffing.yaml` | 凭证填充(single_event + common) | ## 默认模板 `templates/` 目录包含可直接使用的 Apache combined、Nginx combined 和 Syslog(RFC 3164)格式模板: ``` loggen generate --templates ./templates/ --count 100 ``` ## CLI 概览 ``` # 生成 loggen generate [-n COUNT] [-l LEVEL] [-m MESSAGE] [-o FILE] [--templates PATH] [--var KEY=VALUE] [--attack SPEC] [--attack-config FILE] [--attack-only] [--validate] [--progress] [--no-progress] [--threads N] # HTTP 输出 loggen http --url [-n COUNT] # Kafka 输出 loggen kafka [-n COUNT] # Shell 补全 loggen completions ``` ## 构建 ``` cargo build # Standard build cargo build --features kafka # With Kafka support (requires librdkafka) cargo test # Run all tests ``` ## 文档 - `docs/configuration-reference.md` — 所有配置字段,包括类型、默认值和约束 - `docs/template-guide.md` — Tera 模板语法、内置变量、过滤器和随机化 - `docs/attack-gallery.md` — 攻击模式类型、变量模式、通用字段和交错插入 - `docs/cli-cheatsheet.md` — CLI 标志、攻击规范格式和常见示例
标签:Apache, CISA项目, IP 地址批量处理, Jinja2模板, Kafka, Nginx, Rust, SIEM测试, SOC演练, SonarQube插件, Syslog, 可视化界面, 安全测试, 攻击性安全, 攻击模式, 日志模拟, 日志流, 日志生成器, 模板引擎, 流量生成, 网络流量审计, 蓝军工具, 通知系统