sh1vmani/trapnet

GitHub: sh1vmani/trapnet

轻量级异步蜜罐框架,可模拟 15 种网络服务并自动识别扫描器指纹,适用于在网络边界快速部署以捕获攻击行为、收集威胁情报。

Stars: 0 | Forks: 0

# trapnet 异步蜜罐框架,可模拟 15 种网络服务,识别扫描器指纹,并记录附带 GeoIP 上下文的每次连接尝试。 ## 功能特性 - **15 种服务模拟器** - SSH、FTP、Telnet、HTTP、HTTPS、MySQL、PostgreSQL、Redis、MongoDB、SMB、RDP、SMTP、POP3、VNC、Memcached - **扫描器指纹识别** - 识别 Nmap、Masscan、Metasploit、Shodan/Censys 以及撞库攻击工具,并附带置信度评分 - **GeoIP 丰富化** - 通过 ip-api.com(免费版,按会话缓存)获取每个源 IP 的国家和城市信息 - **双重日志记录** - SQLite 数据库和换行分隔的 JSON,并发写入 - **Web 仪表盘** - 在 `http://localhost:5000` 查看实时统计信息(基于 Flask,带密码保护) - **Snort 集成** - 可选功能:读取 Snort 告警日志并与蜜罐事件进行关联 - **零拦截** - 所有服务处理程序和 I/O 均运行在单个 asyncio 事件循环上 ## 快速开始 ### 从源码安装 ``` git clone https://github.com/sh1vmani/trapnet.git cd trapnet pip install -e . ``` 复制并编辑默认配置: ``` cp config.yml my-config.yml # 编辑 my-config.yml:更改 dashboard 密码,禁用不需要的 services ``` 运行(对于小于 1024 的端口,需要 root 权限或 cap_net_bind_service): ``` sudo trapnet --config my-config.yml ``` 首次运行将显示法律确认提示。输入 `yes` 以继续。该回复会保存到 `.trapnet_accepted` 文件中,因此之后不会再提示您。 ### Docker ``` docker compose up -d ``` 详情请参阅下方的 [Docker](#docker)。 ## 配置说明 所有设置均位于 `config.yml` 中。该文件为 YAML 格式,并在启动时进行验证。 ``` services: ssh: enabled: true port: 22 # change if another service already owns this port ftp: enabled: true port: 21 # ... one block per service dashboard: host: "127.0.0.1" # bind to 0.0.0.0 to expose on the network port: 5000 password: "changeme" # CHANGE THIS before deploying logging: sqlite_path: "logs/trapnet.db" json_log_path: "logs/trapnet.json" max_log_size_mb: 100 detection: enabled: true alert_threshold: 3 # events from one IP in the window before tagging as scanner snort: enabled: false alert_file: "/var/log/snort/alert" ``` ### 禁用服务 在服务块下设置 `enabled: false`。trapnet 将完全跳过该处理程序,并且不绑定该端口。 ## 架构 ``` ┌──────────────────────────────────────────────────────┐ │ asyncio loop │ │ │ │ HoneypotEngine │ │ per-service asyncio.start_server() listeners │ │ │ │ │ ├── service handler (services.py) │ │ │ sends realistic banner / handshake │ │ │ reads client data │ │ │ closes connection │ │ │ │ │ ├── AttackDetector (detector.py) │ │ │ per-IP event tracking (last 60 s) │ │ │ payload signature matching │ │ │ returns scanner_type + confidence │ │ │ │ │ └── Logger (logger.py) │ │ writes to SQLite + JSON simultaneously │ │ enriches record with GeoIP data │ │ │ │ Flask dashboard (daemon thread) │ │ / - status page │ │ /api/stats - JSON stats from SQLite │ └──────────────────────────────────────────────────────┘ ``` ## Docker `docker-compose.yml` 映射了所有服务端口,并挂载了本地的 `logs/` 目录。 ``` # 构建并启动 docker compose up -d # 查看 logs docker compose logs -f # 停止 docker compose down ``` 容器以非 root 用户(uid 1000)运行。低于 1024 的端口由 Docker 的网络栈暴露,因此容器内部不需要特殊的 Linux 权能。 ## 记录字段 每次连接尝试都会向 SQLite 写入一条记录,并向 JSON 文件写入一行数据: | 字段 | 描述 | |---|---| | `timestamp` | ISO 8601 UTC | | `src_ip` | 攻击者 IP | | `src_port` | 攻击者端口 | | `dst_port` | 命中的蜜罐端口 | | `service` | 服务名称 (ssh, ftp, ...) | | `payload` | 接收到的原始字节的十六进制编码 | | `credentials` | 捕获到的 username:password(用户名:密码) | | `scanner_type` | NMAP / MASSCAN / METASPLOIT / SHODAN / CREDENTIAL_STUFFER / GENERIC_SCANNER | | `country` | GeoIP 国家 | | `city` | GeoIP 城市 | ## 系统要求 - Python 3.10+ - Python 依赖项请参见 `requirements.txt` ## 贡献指南 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 安全 参见 [SECURITY.md](SECURITY.md)。 ## 许可证 MIT。参见 [LICENSE](LICENSE)(待添加)。
标签:Beacon Object File, Docker, ETW劫持, Flask, FTP仿真, GeoIP, HTTP仿真, IP 地址批量处理, PFX证书, Python, RDP仿真, Scrypt密钥派生, SMB仿真, Snort集成, SQLite, SSH仿真, Telnet仿真, 凭证收集, 多服务仿真, 威胁情报, 安全防御评估, 实时仪表盘, 开发者工具, 异步编程, 扫描器检测, 插件系统, 攻击检测, 数据库仿真, 数据统计, 无后门, 日志记录, 服务指纹识别, 端口扫描, 网络安全, 蜜罐, 计算机取证, 证书利用, 请求拦截, 轻量级蜜罐, 逆向工具, 隐私保护