Parag-098/Real-Time-Network-Traffic-Anomaly-Detection-using-Rule-Based-Analysis
GitHub: Parag-098/Real-Time-Network-Traffic-Anomaly-Detection-using-Rule-Based-Analysis
基于规则分析的实时网络流量异常检测系统,将数据包捕获、流跟踪、自适应规则检测与可解释仪表板整合为一个本地优先的 Django 应用,用于教学演示和毕业答辩。
Stars: 0 | Forks: 0
# 基于规则分析的实时网络流量异常检测
本项目是一个本地优先的 Django 应用程序,用于计算机网络毕业演示。它使用 Scapy 捕获数据包,将其分组为流,应用自适应的基于规则的检测,将弱信号关联为警报,将所有内容存储在 SQLite 中,并使用 Chart.js 呈现实时可解释的仪表板。
该系统经过特意设计,使得观察者无需查看代码即可了解发生了什么、为什么发生以及模拟的响应是什么。
## 系统功能
该应用程序观察网络数据包,将其转换为流记录,应用滚动基线分析,检测可疑行为,对异常进行评分,将信号关联为单个警报,并在适用于答辩、研讨会或最终演示的仪表板中展示结果。
它支持两种操作模式:
- 使用 Scapy 数据包捕获的实时监控。
- 用于安全离线演示的合成演示流量。
该仪表板侧重于可解释性,因此它不仅显示警报;还显示场景标签、触发警报的原因、贡献信号、分数细分、检测管道以及发生前/中/后的比较。
## 核心技术栈
- Python 3.11+ 运行时。
- Django 5+ Web 框架。
- SQLite 作为本地持久层。
- Scapy 用于数据包嗅探和规范化。
- Chart.js 用于仪表板中的交互式图表。
- Django admin 用于检查数据包、流、警报和摘要记录。
## 高层架构
应用程序被组织为一个紧凑但明确的管道。
1. 数据包捕获接收实时数据包或合成数据包。
2. 数据包规范化将其转换为稳定的内部快照。
3. 流跟踪将数据包分组为流记录,并计算数据包速率、突发行为和流状态。
4. 检测引擎评估流量峰值、端口扫描、ICMP 泛洪、重复的新连接和可疑 IP 行为等规则。
5. 评分将信号集转换为 0 到 100 的异常分数,并分为低、中、高严重级别。
6. 关联抑制重复项,并将弱信号合并为一个有意义的警报。
7. 动作服务分配模拟响应,如 allow、warn、rate_limit 或 simulated_block。
8. 摘要服务聚合仪表板的状态。
9. 视图同时暴露 HTML 页面和 JSON 统计 API。
10. 前端 JavaScript 获取 JSON 负载并每隔几秒更新一次仪表板。
### 架构总结图
```
Scapy or Synthetic Traffic
|
v
PacketSnapshot normalization
|
v
FlowTracker + rolling statistics
|
v
DetectionEngine + adaptive thresholds
|
v
AnomalyScorer + CorrelationEngine
|
v
ActionService + SummaryService
|
v
Django views + JSON API
|
v
Dashboard HTML + Chart.js + AJAX refresh
```
## 仓库结构
### 根文件
- [manage.py](manage.py) 是 Django 的入口点,用于运行服务器、迁移、测试、模拟命令和监控命令。
- [README.md](README.md) 是本项目的指南。
- [requirements.txt](requirements.txt) 列出了外部运行时依赖项。
- [db.sqlite3](db.sqlite3) 是在运行时创建的本地 SQLite 数据库文件。
### 项目配置包
- [network_anomaly/settings.py](network_anomaly/settings.py) 定义了已安装的应用、SQLite 配置、静态文件、模板设置、自定义测试运行器和监控调优值。
- [network_anomaly/urls.py](network_anomaly/urls.py) 将站点根目录路由到 monitor 应用,并暴露管理后台。
### 监控应用
- [monitor/apps.py](monitor/apps.py) 注册应用配置。
- [monitor/admin.py](monitor/admin.py) 在 Django admin 中暴露模型。
- [monitor/models.py](monitor/models.py) 定义了数据包、流、警报和摘要的模式。
- [monitor/urls.py](monitor/urls.py) 定义了仪表板页面和 JSON 统计 API。
- [monitor/views.py](monitor/views.py) 渲染仪表板并构建统计负载。
- [monitor/test_runner.py](monitor/test_runner.py) 提供本地测试发现,以便在此工作区中可靠地加载所有测试。
- [monitor/test_suite.py](monitor/test_suite.py) 重新导出应用程序测试以方便发现。
### 监控服务
- [monitor/services/packet_capture.py](monitor/services/packet_capture.py) 定义了 `PacketSnapshot`、Scapy 规范化和实时捕获服务。
- [monitor/services/flow_tracker.py](monitor/services/flow_tracker.py) 跟踪流,计算每个流的速率、突发分数和状态转换。
- [monitor/services/detection.py](monitor/services/detection.py) 实现自适应规则引擎和检测信号生成。
- [monitor/services/scoring.py](monitor/services/scoring.py) 将信号转换为异常分数和严重级别。
- [monitor/services/correlation.py](monitor/services/correlation.py) 将信号合并为警报并抑制重复项。
- [monitor/services/actions.py](monitor/services/actions.py) 将严重级别和警报类型映射到模拟响应。
- [monitor/services/performance.py](monitor/services/performance.py) 计算发生前/中/后的比较指标。
- [monitor/services/summaries.py](monitor/services/summaries.py) 从数据库刷新仪表板摘要快照。
- [monitor/services/engine.py](monitor/services/engine.py) 编排完整的数据包到警报管道。
### 监控实用程序
- [monitor/utils/rolling.py](monitor/utils/rolling.py) 实现基线行为的滚动统计和阈值。
### 模拟层
- [monitor/simulation/traffic.py](monitor/simulation/traffic.py) 定义了用于安全演示的合成流量场景。
### 管理命令
- [monitor/management/commands/run_monitor.py](monitor/management/commands/run_monitor.py) 启动实时捕获或合成回退演示。
- [monitor/management/commands/simulate_traffic.py](monitor/management/commands/simulate_traffic.py) 通过管道运行选定的合成场景。
### 数据库迁移
- [monitor/migrations/__init__.py](monitor/migrations/__init__.py) 将迁移文件夹标记为 Python 包。
- [monitor/migrations/0001_initial.py](monitor/migrations/0001_initial.py) 创建基础表。
- [monitor/migrations/0002_monitor_enhancements.py](monitor/migrations/0002_monitor_enhancements.py) 增加增强分析和摘要字段。
### 模板和静态资产
- [monitor/templates/monitor/dashboard.html](monitor/templates/monitor/dashboard.html) 是专注于展示的仪表板布局。
- [monitor/static/monitor/dashboard.js](monitor/static/monitor/dashboard.js) 获取 JSON 统计信息并渲染图表、卡片、表格和可解释性面板。
- [monitor/static/monitor/style.css](monitor/static/monitor/style.css) 提供仪表板的视觉设计系统。
- [static/.gitkeep](static/.gitkeep) 将顶级静态文件夹保留在版本控制中。
### 测试
- [monitor/tests/test_actions.py](monitor/tests/test_actions.py) 验证模拟响应选择。
- [monitor/tests/test_detection.py](monitor/tests/test_detection.py) 验证流量峰值、端口扫描、ICMP 泛洪和可疑 IP 检测。
- [monitor/tests/test_flow.py](monitor/tests/test_flow.py) 验证流分组、状态转换、过期和突发行为。
- [monitor/tests/test_correlation.py](monitor/tests/test_correlation.py) 验证关联、去重和严重级别升级。
- [monitor/tests/test_thresholds.py](monitor/tests/test_thresholds.py) 验证自适应基线学习。
- [monitor/tests/test_scoring.py](monitor/tests/test_scoring.py) 验证异常分数和严重级别映射。
- [monitor/tests/test_performance.py](monitor/tests/test_performance.py) 验证发生前/中/后的比较报告。
## 数据模型
项目使用四个主要表在本地 SQLite 中存储所有内容。
### PacketRecord
存储管道提取的原始数据包事实。
- 时间戳。
- 源 IP。
- 目标 IP。
- 源端口。
- 目标端口。
- 协议。
- 数据包大小。
- 流密钥。
### FlowRecord
存储每个观察到的流的滚动状态。
- 流密钥。
- 源地址和目标地址。
- 源端口和目标端口。
- 协议。
- 数据包计数。
- 字节计数。
- 每秒数据包数。
- 突发分数。
- 首次和最后一次看到的时间戳。
- 持续时间。
- 流状态。
- 活动/非活动标志。
- 异常指标。
### AlertRecord
存储系统创建的关联警报。
- 时间戳。
- 警报类型。
- 严重级别。
- 模拟动作。
- 源 IP 和目标 IP。
- 流密钥。
- 分数。
- 人类可读的消息。
- 贡献信号。
### TrafficSummary
存储仪表板快照。
- 窗口开始和结束。
- 总数据包数。
- 总流数。
- 总警报数。
- 活跃流。
- 协议分布。
- 流量时间线。
- 热门用户。
- 热门可疑流。
- 危险 IP。
- 性能指标。
## 运行时管道详解
### 1. 捕获或合成数据包
数据包来自实时嗅探或合成场景生成器。实时嗅探使用 Scapy,而模拟命令构建确定性的测试流量,可安全在一台笔记本电脑上运行。
### 2. 规范化数据包
`PacketSnapshot` 是管道使用的内部数据包结构。它包含时间戳、IP、端口、协议、数据包大小和计算出的流密钥。
### 3. 跟踪流
流跟踪器按流密钥对数据包进行分组,更新数据包和字节计数,计算每秒数据包数,确定流是新的还是已建立的,并检测突发行为。
### 4. 评估检测规则
检测引擎寻找可疑模式,例如:
- 流量峰值。
- 端口扫描。
- ICMP 泛洪。
- 重复的新连接行为。
- 可疑的源 IP。
它还使用滚动基线,以便阈值能够适应本地的流量历史。
### 5. 对异常进行评分
评分器将检测上下文和流状态组合为 0 到 100 的分数。该分数映射为低、中或高严重级别。
### 6. 关联信号
关联引擎将微弱但相关的信号合并为一个警报。它还会抑制重复项,以免仪表板充斥着重复的条目。
### 7. 选择模拟动作
动作服务为演示环境选择一个安全的响应:
- allow。
- warn。
- rate_limit。
- simulated_block。
### 8. 刷新摘要
摘要服务在处理完每个数据包后重新计算仪表板聚合。这使 UI 保持最新,而无需手动刷新。
### 9. 提供仪表板
HTML 页面渲染初始外壳,而 JSON API 返回最新的摘要、警报列表、活跃流、性能比较、场景标签和可解释性负载。
### 10. 渲染 UI
前端脚本每隔几秒拉取一次 JSON 端点,并更新图表、表格、警报详情卡、流解释卡和检测管道视图。
## 可解释层
仪表板旨在教授检测逻辑,而不仅仅是展示数字。
它包括:
- 一个标记当前流量状态的场景横幅。
- 一个总结面板,回答正在发生什么、为什么发生以及正在模拟什么动作。
- 一个带有条件和信号细分的可解释警报列表。
- 逐步的数据包到动作管道。
- 一个显示异常何时开始的警报时间线。
- 一个发生前/中/后的比较面板。
- 可疑流和危险 IP 排名面板。
此表示层纯粹是附加的。它不会改变核心检测逻辑。
## 仪表板部分
仪表板页面分为几个视觉区域。
### 标题和场景横幅
显示系统的当前状态,例如正常流量、检测到流量峰值或检测到端口扫描。
### 摘要计数器
显示总数据包数、总流数、总警报数和活跃流数。
### 图表
显示数据包流量趋势、警报时间线和发生前/中/后的比较。
### 检测管道
显示从数据包到动作的概念路径。
### 可解释警报
显示触发每个警报的原因以及哪些信号对其做出了贡献。
### 最新警报表
显示最新警报及其时间戳、类型、严重级别、分数、动作和源 IP。
### 活跃流表
显示实时的流状态、数据包速率、突发分数和指标。
### 热门用户和可疑流
显示哪些来源产生的流量最多,哪些流看起来风险最高。
### 危险 IP
突出显示在演示过程中最值得关注的来源。
### 性能面板
显示发生前/中/后的流量比较指标和检测延迟。
### 警报详情面板
以更具描述性的形式显示当前选定或最新的警报。
## 合成流量场景
该项目包括用于演示和测试的确定性流量构建器。
### 正常
创建具有 TCP、UDP 和 ICMP 数据包混合的稳定基线流量。
### flood
创建来自单一来源的突发流量,以模拟峰值或泛洪。
### port_scan
创建跨越多个目标端口的数据包序列,以模拟侦察。
### 混合
将基线、泛洪和端口扫描行为组合成一个混合场景。
## 管理命令
### 运行 Web 仪表板
```
python manage.py runserver
```
如果您的终端未使用安装了 Django 的环境,请使用完整的解释器路径:
```
C:/Users/Parag/AppData/Local/Python/pythoncore-3.14-64/python.exe manage.py runserver
```
### 应用迁移
```
python manage.py migrate
```
### 运行实时监控
```
python manage.py run_monitor
```
有用的选项:
```
python manage.py run_monitor --simulate
python manage.py run_monitor --iface Ethernet
python manage.py run_monitor --timeout 30
python manage.py run_monitor --count 100
```
### 运行合成流量
```
python manage.py simulate_traffic normal
python manage.py simulate_traffic flood
python manage.py simulate_traffic port_scan
python manage.py simulate_traffic mixed
```
如有需要,可在 Windows 端中使用完整的解释器路径:
```
C:/Users/Parag/AppData/Local/Python/pythoncore-3.14-64/python.exe manage.py simulate_traffic port_scan
```
### 运行测试
```
python manage.py test
```
## 设置说明
1. 创建并激活虚拟环境。
2. 安装依赖项。
```
pip install -r requirements.txt
```
3. 应用数据库迁移。
```
python manage.py migrate
```
4. 启动仪表板。
```
python manage.py runserver
```
5. 在浏览器中打开仪表板。
```
http://127.0.0.1:8000/
```
## 测试策略
测试套件分为多个集中的单元,以使行为保持可解释和稳定。
- 流测试验证分组、过期和突发检测。
- 阈值测试验证滚动基线学习。
- 检测试证端口扫描、ICMP 泛洪和可疑 IP 规则。
- 关联测试验证去重和严重级别升级。
- 动作测试验证模拟响应映射。
- 评分测试验证从异常分数到严重级别的映射。
- 性能测试验证发生前/中/后的比较报告。
存在自定义测试运行器是因为,在此工作区中默认的 Django 测试发现无法按此项目的预期可靠地收集嵌套的测试模块。
## Django Admin
管理站点位于 `/admin/` 并暴露:
- PacketRecord。
- FlowRecord。
- AlertRecord。
- TrafficSummary。
管理注册被特意保持简单,以便在演示期间可以检查记录而无需额外配置。
## 文件白话释义
### 根目录
- `manage.py`:命令入口点。
- `README.md`:项目指南。
- `requirements.txt`:包列表。
- `db.sqlite3`:本地运行时数据库。
### network_anomaly
- `settings.py`:全局配置、静态文件、模板、数据库和监控设置。
- `urls.py`:根路由。
### monitor 核心
- `apps.py`:应用注册。
- `admin.py`:管理面板注册。
- `models.py`:数据库模式。
- `urls.py`:应用路由。
- `views.py`:仪表板和 API 负载组装。
- `test_runner.py`:显式测试发现。
- `test_suite.py`:兼容性测试导出。
### monitor 服务
- `packet_capture.py`:数据包规范化和嗅探。
- `flow_tracker.py`:流状态、速率、突发和过期逻辑。
- `detection.py`:自适应规则引擎。
- `scoring.py`:异常评分。
- `correlation.py`:警报关联和抑制。
- `actions.py`:模拟执行决策。
- `performance.py`:比较指标。
- `summaries.py`:仪表板聚合。
- `engine.py`:编排。
### monitor 实用程序和场景
- `rolling.py`:滚动统计。
- `traffic.py`:合成场景。
### monitor 命令
- `run_monitor.py`:实时或合成监控入口点。
- `simulate_traffic.py`:场景运行器。
### monitor 迁移
- `__init__.py`:包标记。
- `0001_initial.py`:基础模式。
- `0002_monitor_enhancements.py`:增强字段。
### monitor 展示层
- `dashboard.html`:仪表板布局。
- `dashboard.js`:数据绑定和图表渲染。
- `style.css`:主题和布局。
### monitor 测试
- `test_actions.py`:动作映射。
- `test_correlation.py`:关联和去重。
- `test_detection.py`:规则检测。
- `test_flow.py`:流跟踪。
- `test_performance.py`:性能比较。
- `test_scoring.py`:评分和严重级别。
- `test_thresholds.py`:滚动阈值。
### 顶级静态文件
- `.gitkeep`:将静态文件夹保留在源代码控制中。
## 操作说明
- 本项目完全在本地运行。
- SQLite 是唯一的数据库。
- 不会执行任何防火墙更改。
- 不需要云服务或代理。
- 合成命令在笔记本电脑演示中是安全的。
- 仪表板会自动刷新,但必须保持页面打开才能看到更新。
## 故障排除
### 找不到 Django
如果 `python manage.py ...` 失败并出现 Django 导入错误,说明您的终端使用了错误的 Python 解释器。请使用安装了 Django 的解释器:
```
C:/Users/Parag/AppData/Local/Python/pythoncore-3.14-64/python.exe manage.py runserver
```
### 仪表板没有显示更新
确保以下两点都成立:
- `runserver` 命令仍在运行。
- 仪表板页面在浏览器中保持打开。
然后运行一个模拟命令,例如 `simulate_traffic flood` 或 `simulate_traffic port_scan`。
### 模拟后 UI 显得过时
使用 `Ctrl+F5` 对浏览器进行一次硬刷新。仪表板每隔几秒轮询一次 JSON 端点,因此在模拟完成后不久就会出现新数据。
### 实时嗅探被阻止
如果您的操作系统权限阻止了 Scapy,请运行:
```
python manage.py run_monitor --simulate
```
这仍会为演示生成有用的遥测数据。
## 设计目标
该项目的目标不仅是检测可疑流量,而且要让检测过程易于理解。系统的每个部分都经过构建,以便观察者可以回答三个问题:
1. 发生了什么?
2. 系统为什么做出反应?
3. 系统下一步会做什么?
这就是为什么该项目同时包含后端异常管道和展示/可解释层。
标签:Chart.js, Django, ICMP洪水检测, Python, Scapy, SQLite, 云计算, 入侵检测系统, 安全大屏, 安全数据湖, 异常检测, 插件系统, 无后门, 毕业设计, 流量关联分析, 流量可视化, 流量回放, 流量基线分析, 端口扫描检测, 网络安全, 网络安全演示, 网络流量分析, 规则引擎, 计算机网络, 逆向工具, 防御绕过, 隐私保护