# nuclei2snort
**Repository Path**: liuxia0ming/nuclei2snort
## Basic Information
- **Project Name**: nuclei2snort
- **Description**: 批量转换nuclei规则为snort规则
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-11-08
- **Last Updated**: 2025-07-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Nuclei2Snort
## 📖 项目介绍
**Nuclei2Snort** 是一个高效的自动化工具,用于将 [Nuclei](https://github.com/projectdiscovery/nuclei) POC(Proof of Concept)模板批量转换为 [Snort](https://www.snort.org/) IDS/IPS 规则。该工具帮助安全研究人员和运维团队快速将 Nuclei 的漏洞检测模板转换为可部署的网络入侵检测规则。
### ✨ 主要特性
- 🚀 **批量转换**: 支持单文件和目录批量转换
- 🌐 **智能翻译**: 集成腾讯云翻译API,自动将英文漏洞描述翻译为中文
- 🔧 **自动分类**: 智能识别漏洞类型并映射到相应的Snort分类
- ⚡ **并发处理**: 支持多线程并发转换,提高处理效率
- 🛡️ **安全配置**: 支持环境变量配置API密钥,避免硬编码泄露
- 📊 **详细日志**: 完整的转换过程日志记录和错误追踪
- 🎯 **命令行界面**: 友好的CLI界面,支持多种参数配置
### 🎯 转换示例
**输入 (Nuclei YAML)**:
```yaml
id: CVE-2023-12345
info:
name: "Test XSS Vulnerability"
severity: high
classification:
cve-id: CVE-2023-12345
http:
- method: GET
path:
- "{{BaseURL}}/test?param=$$$$"
```
**输出 (Snort Rule)**:
```
alert http any any -> any any (msg:"Test XSS Vulnerability";msg_cn:"测试XSS漏洞";flow:to_server,established;content:"|3c 73 63 72 69 70 74 3e 61 6c 65 72 74 28 31 29 3c 2f 73 63 72 69 70 74 3e|";sid:200001;priority:8;classtype:attempted-recon;cve:CVE-2023-12345;success:0;attack_chain:intrusion;reliability:90;)
```
## 🛠️ 安装配置
### 环境要求
- Python 3.7+
- 腾讯云账号(用于翻译功能,可选)
### 1. 克隆项目
```bash
git clone https://github.com/your-username/nuclei2snort.git
cd nuclei2snort
```
### 2. 安装依赖
```bash
pip install -r requirements.txt
```
### 3. 配置API密钥(可选)
翻译功能需要腾讯云翻译API,如不配置将跳过翻译使用原文:
1. 访问 [腾讯云控制台](https://console.cloud.tencent.com/cam/capi) 获取API密钥
2. 复制配置模板文件:
```bash
cp config.env.example .env
```
3. 编辑 `.env` 文件,填入真实的API密钥:
```bash
TENCENT_SECRET_ID=your_actual_secret_id
TENCENT_SECRET_KEY=your_actual_secret_key
```
4. 加载环境变量:
```bash
source .env
```
或者直接设置系统环境变量:
```bash
export TENCENT_SECRET_ID="your_secret_id"
export TENCENT_SECRET_KEY="your_secret_key"
```
## 🚀 使用说明
### 基本用法
```bash
# 查看帮助信息
python run.py --help
# 转换单个文件
python run.py --file input/pocs/2023/CVE-2023-0001.yaml
# 转换整个目录
python run.py --dir input/pocs/2023/
# 使用8个并发线程转换目录
python run.py --dir input/cve_fail/ --workers 8
```
### 命令行参数
| 参数 | 短参数 | 描述 | 示例 |
|------|--------|------|------|
| `--file` | `-f` | 转换单个YAML文件 | `-f poc.yaml` |
| `--dir` | `-d` | 转换目录中的所有YAML文件 | `-d ./pocs/` |
| `--workers` | `-w` | 并发处理线程数(默认:4) | `-w 8` |
| `--version` | `-v` | 显示版本信息 | `-v` |
| `--help` | `-h` | 显示帮助信息 | `-h` |
### 输入文件格式要求
Nuclei YAML文件需要包含以下必要字段:
```yaml
id: unique-id
info:
name: "Vulnerability Name"
severity: medium|high|critical|low
classification:
cve-id: CVE-XXXX-XXXX
http:
- method: GET|POST|PUT|...
path:
- "{{BaseURL}}/path/with/$$payload$$"
```
**重要**: 需要检测的内容必须用 `$$content$$` 标记包围。
## 📁 项目结构
```
nuclei2snort/
├── run.py # 主程序入口
├── config/
│ ├── config.py # 配置管理
│ └── log.py # 日志配置
├── tools/
│ ├── cn2en.py # 翻译工具
│ └── ali_crawl.py # 阿里云爬虫工具
├── input/ # 输入文件目录
│ ├── pocs/ # POC模板文件
│ └── cve_fail/ # 失败处理文件
├── output/ # 输出规则文件
├── logs/ # 日志文件
├── requirements.txt # Python依赖
├── config.env.example # 环境变量配置示例
└── README.md # 说明文档
```
## 📊 执行效果

### 日志示例
```
16:30:15,123 [INFOR] run::45 - 环境验证通过
16:30:15,124 [INFOR] run:convert_directory:78 - 开始批量转换目录: input/pocs/2023
16:30:15,125 [INFOR] run:convert_directory:85 - 找到 150 个YAML文件
16:30:15,200 [INFOR] run:extract_poc_content:156 - 处理第1个标记: /admin/login.php?user=admin...
16:30:16,300 [ALERT] run:convert_single_file:234 - 成功生成规则:
alert http any any -> any any (msg:"Admin Panel Login Bypass";msg_cn:"管理面板登录绕过";flow:to_server,established;content:"/admin/login.php";nocase;sid:200001;priority:8;classtype:attempted-user;cve:CVE-2023-0001;success:0;attack_chain:intrusion;reliability:90;)
```
## ⚙️ 配置说明
### 漏洞类型映射
工具会根据中文描述自动映射Snort分类类型:
| 关键词 | Snort分类 |
|--------|-----------|
| SQL、sql | sql-injection |
| 执行、命令 | arbitrary-code-execution |
| 信息、泄露 | information-leak |
| 遍历、穿越 | directory-traversal |
| 任意文件 | webshell |
| 代码注入 | arbitrary-code-execution |
### 优先级映射
根据Nuclei严重程度自动映射优先级:
| Nuclei严重程度 | Snort优先级 |
|----------------|-------------|
| critical | 10 |
| high | 8 |
| medium | 6 |
| low | 3 |
## 🔧 常见问题
### Q: 为什么某些YAML文件没有被转换?
A: 请检查以下几点:
1. YAML文件格式是否正确
2. 是否包含必要的字段(info.name, http等)
3. 检测内容是否用`$$...$$`标记包围
4. 查看日志文件获取详细错误信息
### Q: 翻译功能不工作怎么办?
A: 翻译功能是可选的,如果不配置API密钥:
1. 工具会显示警告但继续运行
2. 使用原英文作为中文描述
3. 不影响规则生成的其他功能
### Q: 如何提高转换效率?
A: 可以通过以下方式优化:
1. 增加并发线程数:`--workers 8`
2. 确保网络连接稳定(翻译API调用)
3. 使用SSD硬盘提高文件读写速度
### Q: 生成的规则在哪里?
A: 转换后的Snort规则保存在 `output/` 目录下,文件名格式为 `YYYYMMDDHH_ips.rules`
## 🤝 贡献指南
欢迎提交Issue和Pull Request来帮助改进项目!
1. Fork 项目
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
## 📝 更新日志
### v2.0.0 (2024-11-08)
- 🔄 重构代码架构,采用面向对象设计
- ✨ 新增命令行参数支持
- ⚡ 添加并发处理功能
- 🛡️ 改进API密钥安全管理
- 📊 完善日志系统和错误处理
- 🐛 修复多个已知问题
### v1.0.0 (2023-02-21)
- 🎉 首次发布
- 📄 基础的YAML到Snort规则转换功能
- 🌐 集成腾讯云翻译API
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
---
如果这个项目对您有帮助,请给个⭐️支持一下!