Wereluna/CodeAlpha_Network-Intrusion-Detection-System-using-Suricate-Snort-and-Python

GitHub: Wereluna/CodeAlpha_Network-Intrusion-Detection-System-using-Suricate-Snort-and-Python

一个基于 Python Scapy 的轻量级网络入侵检测系统,通过自定义规则引擎实时嗅探并识别常见网络攻击,提供可视化 Web 仪表板和自动化报告。

Stars: 0 | Forks: 0

# 🛡️ NIDS — Python 网络入侵检测系统 这是一个生产级别的、基于 Scapy 的网络入侵检测系统 (NIDS),它可以嗅探实时网络流量,使用自定义的 Snort 风格规则引擎检测常见攻击模式,记录所有事件,并在实时 Web 仪表板上可视化结果。 作为 CodeAlpha 网络安全实习项目 — 任务 4 构建。 ## ✨ 功能 - 使用 Scapy **捕获实时数据包**(源/目的 IP、协议、端口、TCP 标志、大小、时间戳、负载) - **自定义检测规则引擎**(无需安装 Snort/Suricata): - 端口扫描检测 - Ping 扫描检测 - ICMP 泛洪检测 - SYN 泛洪检测 - 可疑 TCP 标志(NULL 扫描、XMAS 扫描) - 畸形数据包检测 - 异常大数据包检测 - 黑名单/白名单 IP 匹配 - **彩色控制台告警**(Colorama + Rich) - **结构化日志记录**:`alerts.log`、`network.log`、`attack_history.csv` - **会话结束报告**:JSON + TXT 摘要 - **实时 Web 仪表板**(Flask + Chart.js):饼图、柱状图、时间轴、实时告警信息流 - **模块化、文档齐全、符合 PEP8 标准的代码库**,包含异常处理和集中式配置文件 ## 🏗️ 架构 ``` ┌─────────────────────┐ │ Live Network │ │ Traffic (NIC) │ └──────────┬───────────┘ │ raw packets ┌──────────▼───────────┐ │ packet_capture.py │ (Scapy sniff) └──────────┬───────────┘ │ Packet object ┌──────────▼───────────┐ │ detection_engine.py │ rule engine │ - port scan │ │ - ping sweep │ │ - flood detection │ │ - flag/malformed chk │ │ - blacklist check │ └──────────┬───────────┘ │ alert(type, severity, ips...) ┌──────────▼───────────┐ │ alert_manager.py │ └──┬──────┬─────────┬──┘ │ │ │ console alert alerts.log attack_history.csv │ ┌──────────▼───────────┐ │ dashboard/app.py │ Flask + Chart.js └───────────────────────┘ ``` ### 流程图 (Mermaid) ``` flowchart TD A[Start Capture] --> B[Sniff Packet - Scapy] B --> C{Has IP Layer?} C -- No --> B C -- Yes --> D[Extract IP/Port/Protocol/Flags/Size] D --> E[Log to network.log] E --> F{Source IP Whitelisted?} F -- Yes --> B F -- No --> G[Run Detection Rules] G --> H{Rule Triggered?} H -- No --> B H -- Yes --> I[Raise Alert] I --> J[Console Alert - Colorama] I --> K[Write alerts.log] I --> L[Append attack_history.csv] L --> M[Dashboard reads CSV] B --> N{Stop Requested?} N -- No --> B N -- Yes --> O[Generate Session Report] O --> P[End] ``` ## 📂 文件夹结构 ``` NIDS-Project/ ├── README.md ├── requirements.txt ├── LICENSE ├── .gitignore ├── src/ │ ├── config.py # thresholds, paths, IP lists │ ├── packet_capture.py # Scapy sniff wrapper │ ├── detection_engine.py # rule engine (all detectors) │ ├── alert_manager.py # alert formatting, logging, CSV │ ├── logger_setup.py # logging configuration │ ├── report_generator.py # JSON/TXT session reports │ └── main.py # CLI entry point ├── rules/ │ └── rules.json # human-readable Snort-style rule docs ├── dashboard/ │ ├── app.py # Flask backend │ └── templates/dashboard.html ├── logs/ # generated at runtime (gitignored) ├── sample_logs/ # example output for grading/demo ├── screenshots/ # place demo screenshots here ├── report/ │ └── NIDS_Project_Report.docx # full 35+ page academic project report ├── presentation/ │ └── NIDS_Presentation.pptx # 22-slide project presentation └── docs/ # architecture notes ``` ## ⚙️ 安装 ``` git clone https://github.com//NIDS-Project.git cd NIDS-Project python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt ``` **仅限 Windows:** 安装 [Npcap](https://npcap.com/)(WinPcap 兼容模式),以便 Scapy 能够捕获数据包。 ## ▶️ 用法 ### 1. 运行 IDS(需要 root/管理员权限) ``` sudo python3 -m src.main sudo python3 -m src.main --interface eth0 --filter "tcp or icmp" sudo python3 -m src.main --count 500 ``` 按 `Ctrl+C` 停止捕获 — 会话报告将自动写入 `logs/session_report.json` 和 `logs/session_report.txt`。 ### 2. 运行实时仪表板(在单独的终端中,无需 root 权限) ``` python3 dashboard/app.py ``` 然后在浏览器中打开 **http://127.0.0.1:5000** 。它会读取 `logs/attack_history.csv` 并每 3 秒自动刷新一次,因此无论嗅探器是在本地运行还是您在查看过去会话的日志,它都能正常工作。 ### 3. 生成测试流量以触发检测 从另一台机器/终端发起(需获得许可 — 仅限在您自己的实验网络中进行测试): ``` nmap -sS # triggers Port Scan alert ping -c 60 # can trigger ICMP Flood if run in a tight loop nmap -sN # triggers NULL scan alert ``` ## 🧪 示例输出 查看 `sample_logs/` 获取示例 `alerts.log`、`network.log`、`attack_history.csv` 以及由模拟测试运行(端口扫描、ICMP 泛洪、NULL 扫描、黑名单 IP)生成的会话报告。 ## 🔭 后续改进 - 基于机器学习的异常检测(基于流量特征的 Isolation Forest / Random Forest) - 邮件 / Telegram 告警集成 - 基于 GeoIP 的来源归属分析 - 可选的 Suricata/Snort 后端,用于大规模的基于特征的检测 - 云部署(容器化嗅探器 + 托管仪表板) - 通过防火墙规则自动(模拟)阻断 IP ## ⚠️ 法律/道德声明 本工具仅供**教育用途和授权测试使用**(您自己的实验室、家庭网络,或您拥有明确书面授权可以监控的环境)。请勿在没有所有权或未经授权的情况下对网络运行此工具 — 在大多数司法管辖区,未经授权的数据包捕获和入侵测试是非法的。 ## 📜 许可证 MIT 许可证 — 详见 [LICENSE](LICENSE)。 ## 👤 作者 Luna — B.Tech CSE,诺伊达工程与技术学院 (NIET) CodeAlpha 网络安全实习 — 任务 4 ## 🙏 致谢 使用 Scapy、Flask、Chart.js、Rich 和 Colorama 构建。感谢 CodeAlpha 提供的项目机会。
标签:Flask, Scapy, 插件系统, 网络安全, 网络流量分析, 逆向工具, 配置错误, 隐私保护