AbhinavVijayvergia/Intrusion-Detection-System

GitHub: AbhinavVijayvergia/Intrusion-Detection-System

一个基于 PyShark 和 Flask 的轻量级网络入侵检测系统,通过滑动窗口速率分析实时发现网络流量异常并提供可视化告警面板。

Stars: 0 | Forks: 0

# 入侵检测系统 (IDS) ![Python](https://img.shields.io/badge/Python-3.9+-blue) ![PyShark](https://img.shields.io/badge/PyShark-packet--capture-green) ![Flask](https://img.shields.io/badge/Flask-dashboard-lightgrey) ## 为什么开发这个项目 大多数 IDS 工具都是黑盒——你安装它们,它们发出警报,然后你 相信它们内部的逻辑。我开发 Canary 是为了理解在数据包级别 实际发生了什么:流量是如何捕获的,异常是如何识别的,以及 警报是如何结构化并实时报告的。这个项目是我后来在网络安全 领域构建一切的基础。 ## 功能 - 使用 PyShark(tshark 后端)进行实时数据包捕获 - 私有网络流量过滤 - ICMP、TCP 和 UDP 数据包处理 - 使用滑动时间窗口的基于速率的异常检测 - 每个会话的结构化 JSON 日志记录 - 向实时 Web 仪表板报告实时警报 ## 架构 ``` Network Interface ↓ Packet Capture (PyShark) ↓ Traffic Filter (private IP exclusion, protocol check) ↓ Rate-Based Detection Engine (sliding window per source IP) ↓ JSON Logger + Flask API ↓ Live Web Dashboard (http://local-ip:8080) ``` ## 检测逻辑 Canary 实现了**基于速率的检测**: - 使用滑动时间窗口跟踪每个源 IP 的数据包频率 - 当流量超过定义的阈值时触发警报 警报类型: - `INFO` — 观察到的流量在正常范围内 - `ALERT` — 超过速率阈值 (`RATE_ALERT`) - `FORCED_ALERT` — 为测试手动触发 ## 警报示例 ``` { "time_stamp": "2026-01-04T14:51:20.564002", "severity": "ALERT", "ipsrc": "192.168.127.1", "ipdst": "192.168.127.128", "transport_layer": "TCP", "highest_layer": "RATE_ALERT" } ``` ## 截图 **实时警报仪表板** ![Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/cas/ec/ecd3444e306f2c0d04caf9e81210069349c66ae1f6dbbfdbc5f0a64614ef91e3.jpg) **检测逻辑 — 速率滥用函数** ![Detection Code](https://raw.githubusercontent.com/AbhinavVijayvergia/Intrusion-Detection-System/main/screenshots/detection-code.jpg) **JSON 警报日志** ![JSON Logs](https://raw.githubusercontent.com/AbhinavVijayvergia/Intrusion-Detection-System/main/screenshots/json-logs.jpg) ## 要求 - Linux(捕获数据包需要 root 权限) - Python 3.9+ - tshark ## 安装 ``` git clone https://github.com/AbhinavVijayvergia/Intrusion-Detection-System.git cd Intrusion-Detection-System pip install -r requirements.txt sudo apt install tshark ``` 确保你的用户有捕获数据包的权限: ``` sudo usermod -a -G wireshark $USER ``` 运行此命令后,请注销并重新登录。 ## 用法 ### 启动 Web 仪表板 ``` cd server python app.py ``` 仪表板可通过 `http://:8080` 访问 ### 启动 IDS 代理 ``` sudo python src/ids.py ``` ## 项目结构 ``` Intrusion-Detection-System/ ├── src/ │ └── ids.py # IDS engine — capture, filter, detect ├── server/ │ ├── app.py # Flask API + dashboard │ └── templates/ │ └── index.html ├── screenshots/ │ ├── dashboard.jpg │ ├── detection-code.jpg │ └── json-logs.jpg ├── logs/ │ └── YYYY-MM-DD.log ├── requirements.txt └── README.md ``` ## 局限性 - 专为本地网络监控设计 - 仅限基于速率的检测——非基于特征的检测 - 除了内存存储外没有其他持久化 - 未针对生产环境进行加固 ## 我学到了什么 - 使用 PyShark 和 tshark 在接口级别进行数据包捕获的工作原理 - 如何根据协议和 IP 范围过滤和分类网络流量 - 滑动窗口速率检测如何识别泛洪和扫描行为 - 如何构建从捕获到仪表板的实时警报 pipeline - 为什么启发式检测会产生误报,以及阈值如何影响准确性
标签:Flask, PyShark, Python, 多模态安全, 异常检测, 无后门, 流量监控, 网络安全, 逆向工具, 隐私保护