Harshit7623/Packet_Peeper
GitHub: Harshit7623/Packet_Peeper
一个集实时数据包捕获、网络流量分析、设备发现与安全威胁检测于一体的综合性网络监控平台。
Stars: 1 | Forks: 0
# Packet Peeper - 高级网络安全监控器






Packet Peeper 是一个综合性的网络安全监控和数据包分析平台,提供实时网络流量监控、高级威胁检测和设备追踪功能。它将强大的数据包捕获能力与智能安全分析相结合,并配备了一个美观、直观的 Web 界面。

## 目录
- [功能](#features)
- [项目结构](#project-structure)
- [前置条件](#prerequisites)
- [安装与使用](#installation--usage)
- [工作原理](#how-it-works)
- [配置](#configuration)
- [架构](#architecture)
- [开发](#development)
- [API 端点与 WebSocket 事件](#api-endpoints--websocket-events)
- [故障排除](#troubleshooting)
## 功能
### 核心数据包捕获与分析
- **实时数据包捕获**:实时监控网络流量,并提供详细的数据包信息
- **协议分析**:按协议自动分类数据包
- **服务分类**:识别 WhatsApp、YouTube、Facebook、Instagram、Netflix、Telegram、Zoom、AWS、Cloudflare 等服务
- **基于 DNS 的分类**:通过被动的 DNS 查询/响应分析进行服务识别
- **TLS SNI 解析**:从 HTTPS 连接中提取主机名以实现更好的分类
- **IP 范围匹配**:将流量与已知服务的 IP 范围进行匹配
### 安全与认证
- **本地用户认证**:使用 bcrypt 哈希和 JWT token 的安全登录系统。
- **数据持久化**:集成 SQLite,用于稳健存储用户配置文件和应用状态。
### 网络安全与威胁检测

- **实时安全监控**:分析数据包以识别潜在的安全威胁
- **攻击检测**:
- 端口扫描检测:识别可疑的端口扫描企图
- DDoS 攻击检测:检测分布式拒绝服务攻击
- 暴力破解检测:监控针对 SSH、RDP、Telnet 的暴力破解登录企图
- DNS 隧道检测:识别基于 DNS 的数据外发企图
- **安全警报**:针对检测到的威胁实时发出通知,并附带严重程度级别(低、中、高、严重)
- **警报冷却管理**:通过可配置的冷却期防止警报轰炸
- **详细证据**:为每个检测到的威胁收集全面的证据
### 设备与网络管理

- **活动设备检测**:实时发现并追踪网络上的设备
- **设备信息**:
- IP 地址检测
- MAC 地址解析
- 使用 OUI(MAC 地址前缀查找)识别设备制造商
- 主机名解析
- 设备类型分类
- **设备流量监控**:追踪每个设备的传入/传出数据包和字节数
- **网络接口检测**:自动检测网络接口并计算 CIDR
- **设备统计信息**:每个设备的实时数据包和字节计数器
### 流量分析与监控

- **网络统计**:全面的带宽和流量分析
- 当前带宽使用情况
- 峰值带宽追踪
- 平均带宽计算
- 基于协议的流量细分
- **活动连接监控**:追踪带有源、目标和端口信息的实时连接
- **Top 主机分析**:识别网络活动最频繁的主机
- **带宽历史记录**:用于趋势分析的时间序列带宽数据
### 系统与性能监控

- **系统资源监控**:
- CPU 使用率追踪
- 内存使用情况监控
- 磁盘空间利用率
- **网络性能指标**:
- 延迟测量
- 抖动计算
- 丢包率追踪
### Web 界面与可视化

- **现代 React 仪表板**:简洁、响应式的 UI,提供多种视图
- **实时更新**:基于 WebSocket 的实时更新(200ms 刷新率)
- **多个仪表板页面**:
- **Packet Monitor**:详细的数据包捕获视图
- **Alerts**:带有严重程度指示器的安全警报
- **Devices**:网络设备发现和监控
- **Network Traffic**:实时流量分析和 Top 主机
- **Statistics**:系统和网络性能指标
- **Analytics**:用于流量分析的图表和图形
- **Logs**:应用程序和系统日志查看器
- **Reports**:网络分析报告生成
- **Settings**:应用程序配置
- **交互式图表**:使用 Chart.js 直观展示网络数据
- **连接状态指示器**:实时的 WebSocket 连接状态
## 项目结构
```
NetworkSnifferr/
├── attack_tests/ # Attack simulation toolkit
├── backend/ # Flask + Socket.IO backend
│ ├── app.py
│ ├── packet_sniffer.py
│ ├── network_security_monitor.py
│ ├── config/ # Backend configuration overrides
│ ├── services/ # Authentication & Database services
│ ├── tests/ # Pytest test suites
│ └── requirements.txt
├── core_sniffer_rs/ # Experimental Rust packet-capture core (PyO3/pcap/pnet)
├── desktop/ # Electron desktop wrapper
├── docs/ # Detailed documentation
├── frontend/ # React + Vite frontend
│ ├── src/
│ ├── package.json
│ └── vite.config.ts
├── docker_compose.yml
└── README.md
```
## 前置条件
- Python 3.8+
- Node.js 14+
- 管理员/root 权限(在 Windows/Linux 上捕获数据包时需要)
- 具备数据包捕获能力的网络接口
- Visual C++ Build Tools(适用于 Windows,如果从源代码编译包)
## 安装与使用
Packet Peeper 现在通过 Electron 作为独立的桌面应用程序分发。这是使用该平台最推荐且最简单的方式。
### 桌面应用程序(推荐)
1. 导航到 `desktop/electron/dist/` 目录,或者从 GitHub Releases 页面下载最新版本。
2. **Linux**:为 AppImage 添加可执行权限并运行:
chmod +x "Packet Peeper-1.0.0.AppImage"
sudo -E ./"Packet Peeper-1.0.0.AppImage" --no-sandbox
*(注意:`sudo -E` 会保留您的环境变量,以便显示正常工作,并且绑定到网络接口进行原始数据包捕获时需要用到它)。*
3. Electron 包装器将自动启动已编译的 Python 后端,连接 React 前端,并显示仪表板。
### 开发者设置(从源码)
如果您希望修改代码或在未编译 Electron 应用程序的情况下从源码运行应用程序,请参阅 [构建指南](BUILD.md) 获取完整说明。
#### 后端设置
1. 克隆仓库:
git clone https://github.com/Harshit7623/Packet_Peeper.git
cd Packet_Peeper
2. 创建并激活虚拟环境:
# Windows
python -m venv venv
venv\Scripts\activate
# Linux/macOS
python3 -m venv venv
source venv/bin/activate
3. 安装 Python 依赖项:
pip install -r backend/requirements.txt
#### 前端设置
1. 导航到 React 应用程序目录:
cd frontend
2. 安装 Node.js 依赖项:
npm install
3. 返回根目录:
cd ..
## 用法
### 启动后端
运行 Flask 应用程序,并将网络接口名称作为参数传入:
```
# Windows
python backend/app.py auto
# Linux
python backend/app.py auto
# macOS
python backend/app.py auto
```
**Linux 注意事项(推荐):** 授予一次数据包捕获能力,这样您就不需要每次运行都使用 sudo:
```
sudo setcap cap_net_raw,cap_net_admin=eip "/path/to/NetworkSnifferr/.venv/bin/python"
"/path/to/NetworkSnifferr/.venv/bin/python" backend/app.py auto
```
如果您不想设置 capabilities,请使用 virtualenv 中的 Python 通过 sudo 运行:
```
sudo "/path/to/NetworkSnifferr/.venv/bin/python" backend/app.py auto
```
要查找您的网络接口名称:
```
# Windows
python -c "from scapy.all import conf; print(conf.ifaces)"
# Linux/macOS
ip link show
```
后端将启动于 `http://localhost:5000`,并开始在指定的接口上捕获数据包。
### 启动前端
在单独的终端中,导航到 frontend 目录并启动开发服务器:
```
cd frontend
npm run dev
```
前端将可以通过 `http://localhost:5173` 访问。
### 攻击模拟(仅用于测试)
要测试安全检测功能,请确保后端正在运行,然后使用:
```
cd attack_tests
python run_all_attacks.py
```
这将模拟各种攻击:
- 端口扫描
- DDoS 企图
- 暴力破解登录企图
- DNS 隧道
**注意**:这仅用于您拥有或被授权测试的网络上的测试/教育目的。
## 工作原理
### 数据包捕获流水线
1. **接口选择**:用户指定要监控的网络接口
2. **数据包捕获**:Scapy 使用 BPF 过滤器捕获接口上的所有数据包
3. **数据包处理**:解析并分析每个数据包:
- IP 层提取(源/目标 IP)
- 传输层分析
- 端口信息提取
- 协议识别
4. **服务分类**:使用多种方法对数据包进行分类:
- 基于 DNS 的分类(被动 DNS 缓存)
- TLS SNI 主机名提取
- 与已知服务 CIDR 块的 IP 范围匹配
- 基于端口的回退分类
5. **安全分析**:分析每个数据包是否存在威胁:
- 端口扫描检测(基于当前活动配置文件的动态阈值)
- DDoS 检测(基于当前活动配置文件的动态阈值)
- 暴力破解检测(基于当前活动配置文件的动态阈值)
- DNS 隧道检测(DNS 查询中的可疑模式)
6. **设备追踪**:发现并监控活动设备:
- IP 地址追踪
- MAC 地址解析
- 设备制造商识别
- 主机名解析
- 每个设备的流量统计
7. **实时广播**:通过 WebSocket 将数据发送到连接的客户端
8. **前端显示**:React 仪表板实时显示数据包、警报和统计信息
### 安全检测引擎
NetworkSecurityMonitor 类实现了多种检测算法:
- **有状态分析**:随时间追踪连接和模式
- **时间窗口检测**:使用可配置的时间窗口进行模式分析
- **冷却管理**:通过针对每个源的冷却期防止警报轰炸
- **证据收集**:为每个警报收集详细的证据
- **严重性分类**:将威胁分类为低、中、高或严重
### WebSocket 通信
- 后端每 200ms 发送一次更新
- 前端维持持久的 WebSocket 连接
- 在 WebSocket 不可用时回退到轮询
- 带有指数退避的自动重连
## 配置
### 警报阈值(在 network_security_monitor.py 中)
阈值现在由动态配置文件系统(`strict`、`balanced`、`sensitive`、`test`)控制。可以通过 API 更改活动配置文件。
```
# Alert cooldown
ALERT_COOLDOWN_SECONDS: configurable (default 120, reduced for test modes)
# Thresholds 动态更新,无需重启。
```
### BPF 过滤器(在 packet_sniffer.py 中)
```
(tcp or udp) and not arp and not (udp and (port 67 or 68 or 5353 or 1900 or 123))
```
过滤掉来自 DHCP、mDNS、SSDP、NTP 的噪音
### 服务映射
服务分类基于域名和 IP 范围:
- Google、Facebook、WhatsApp、Instagram、Netflix、Microsoft、Telegram、Slack、Zoom、AWS、Cloudflare
- 可通过 service_map.json 进行扩展
## 架构
### 后端组件
**app.py - Flask WebSocket 服务器**
- 初始化带有 Socket.IO 支持的 Flask 应用程序
- 管理 WebSocket 连接
- 向所有连接的客户端广播实时更新
- 实现客户端请求的事件处理程序
- 管理警报广播系统
**packet_sniffer.py - 数据包捕获引擎**
- 在指定接口上基于 Scapy 的数据包捕获
- 实时设备发现和追踪
- 数据包分类和服务识别
- 统计信息聚合(带宽、协议等)
- 用于协议分析的 TCP 流重组
- 用于数据包处理的回调系统
**network_security_monitor.py - 安全分析引擎**
- 威胁检测算法
- 数据包统计追踪
- 攻击模式识别
- 带有冷却管理的警报生成
- 为检测到的威胁收集证据
### 前端组件
**React 仪表板**
- 实时数据包监控
- 安全警报可视化
- 设备网络映射
- 网络流量分析
- 系统统计信息显示
- 交互式报告生成
**Socket.IO 客户端**
- 维持与后端的持久连接
- 接收并处理实时更新
- 自动重连处理
- 回退到轮询模式
## 性能核心(实验性)
仓库包含一个实验性的原生系统编程模块,位于 `core_sniffer_rs/`。该模块代表了正在进行的性能优化工作,旨在探索直接在 Rust 中进行高吞吐量数据包处理:
- **原生捕获和解析**:利用 `pcap` 和 `pnet` 以原生速度捕获和拆解 Ethernet、IPv4、TCP、UDP 和 ICMP 帧。
- **Python FFI 桥接:使用 `PyO3` 创建一个编译好的 Python 扩展(`RustSniffer`),它公开了非阻塞的捕获控制方法,并通过零拷贝 JSON 字符串调用 Python 回调。
- **集成状态**:此模块目前处于实验阶段,作为未来扩展的架构概念验证。它尚未接入活动的 `packet_sniffer.py` 生产流水线中,允许当前的 Scapy 实现在优化原生核心的同时保持广泛的兼容性。
## 开发
### 后端开发
关键模块及其职责:
- `app.py`:Flask 应用程序设置,WebSocket 事件处理程序
- `packet_sniffer.py`:数据包捕获,设备检测,统计信息
- `network_security_monitor.py`:安全分析和威胁检测
- `test_attacks.py`:用于测试检测能力的攻击模拟
添加新功能:
1. 扩展 `PacketSniffer` 类以进行新的数据包分析
2. 将检测算法添加到 `NetworkSecurityMonitor`
3. 在 `app.py` 中创建新的 WebSocket 事件处理程序
### 前端开发
React 应用程序使用:
- **React Hooks**:使用 useState、useEffect 进行状态管理
- **Socket.IO Client**:实时通信
- **Chart.js**:数据可视化
- **React Router**:页面之间的导航
添加新的仪表板页面:
1. 在 `src/components/` 中创建新组件
2. 在 `App.js` 中添加路由
3. 在 `sidebar.js` 中添加导航链接
## 性能考量
- **数据包捕获**:使用 BPF 过滤器减少内核到用户空间的数据传输
- **内存管理**:用于捕获数据包的循环缓冲区(最多 10,000 个数据包)
- **TCP 流组装**:自动清理旧的流(5 分钟超时)
- **设备追踪**:高效的基于 IP 的字典,实现 O(1) 查找
- **警报冷却**:在保持响应性的同时防止警报轰炸
## 安全性考量
- **需要管理员权限**:数据包捕获需要提升的权限
- **仅限本地网络**:设备检测限于配置的网络范围
- **无加密**:仅在受信任的网络上使用(WebSocket 处于开发阶段)。将 WebSocket 通信升级为安全的 WSS/TLS 加密已在积极规划中。
- **本地用户认证**:已实现并处于活动状态;需要通过后端进行设置。
- **服务指纹识别**:基于公共 IP 范围和域名数据库
## 故障排除
### 常见问题
**1. 权限错误:“No module named 'scapy'”**
```
pip install -r backend/requirements.txt
```
**2. 无法捕获数据包**
- 确保您正在使用管理员/sudo 权限运行
- 验证网络接口名称是否正确
- 检查接口是否处于活动状态并具有 IP 地址
**3. WebSocket 连接失败**
- 确保后端在端口 5000 上运行
- 检查防火墙设置
- 验证前端是否正在尝试连接到正确的后端 URL
**4. 未检测到设备**
- 等待 30 秒以上以发现设备
- 确保网络中有活动设备
- 检查设备流量是否正在流动
**5. 未生成警报**
- 等待攻击模拟运行
- 检查攻击流量是否在受监控的接口上
- 验证 network_security_monitor.py 中的警报阈值
**6. 数据包捕获率低**
- 检查接口 MTU 和数据包大小
- 验证没有其他工具正在消耗数据包
- 如有必要,降低 BPF 过滤器的复杂性
## 依赖项
### 后端
- **scapy** (2.5.0):网络数据包捕获和分析
- **flask** (3.0.2):Web 框架
- **flask-socketio** (5.3.6):Flask 的 WebSocket 支持
- **flask-cors** (4.0.0):用于跨源请求的 CORS 标头
- **python-socketio** (5.11.1):Socket.IO 服务器实现
- **python-engineio** (4.8.0):Engine.IO 传输层
- **eventlet** (0.35.2):异步事件处理
- **psutil** (5.10.0):系统和进程监控
- **tldextract** (5.1.2):用于域名分析的 TLD 提取
- **requests** (2.31.0):用于设备制造商查找的 HTTP 请求
- **pandas** (2.1.4):数据分析和处理
- **reportlab** (4.1.0):PDF 报告生成
- **fpdf** (1.7.2):PDF 创建实用工具
### 前端
- **react** (18.2.0):UI 框架
- **react-dom** (18.2.0):React DOM 渲染
- **react-router-dom** (6.30.0):客户端路由
- **socket.io-client** (4.7.2):WebSocket 客户端
- **chart.js** (4.4.9):图表和图形库
- **react-chartjs-2** (5.3.0):Chart.js 的 React 封装
## API 端点与 WebSocket 事件
### REST API 端点
**认证与用户管理**
- `POST /api/auth/login`:进行认证并接收 JWT
- `GET /api/auth/profile`:获取当前用户配置文件
- `POST /api/auth/change-password`:更新用户密码
- `POST /api/auth/logout`:使会话失效
**系统配置**
- `POST /api/test-mode`:动态切换检测配置文件
### WebSocket 事件(来自后端)
- `connect` / `disconnect`:客户端连接状态
- `devices_update`:实时活动设备列表
- `scan_devices`:设备扫描状态
- `alerts_sync`:实时安全警报
- `statistics_update`:实时网络和系统统计信息
- `logs_update`:应用程序和系统日志
### WebSocket 事件(发往后端)
- 连接后通过命名空间自动处理。
## 未来增强功能
- [x] 数据库持久化(集成 SQLite/PostgreSQL)
- [x] 用户认证和授权
- [x] 多用户支持与 RBAC
- [x] 高级过滤和搜索
- [x] 基于机器学习的异常检测 (`ML Detect`)
- [x] 历史数据分析 (`History` & `Insights`)
- [x] 自定义警报规则构建器 (`Rules`)
- [x] 与 SIEM 系统集成 (`SIEM`)
- [x] 深入检查明文协议 payload (`Payload`)
- [x] 协议解析插件
- [x] 基于 GeoIP 的威胁映射 (`Threat Map`)
- [ ] 移动应用程序支持
- [ ] 云部署支持
- [ ] WebSocket 的高级加密
## 贡献
欢迎贡献!请遵循以下准则:
1. Fork 该仓库
2. 创建功能分支
3. 提交您的更改
4. 推送到该分支
5. 创建 Pull Request
## 许可证
该项目在 MIT 许可证下授权 - 有关详细信息,请参阅 LICENSE 文件。
## 免责声明
此工具仅用于教育和授权的安全测试目的。未经授权访问计算机系统是非法的。在进行安全评估之前,请务必获得适当的授权。
## 致谢
- [Scapy](https://scapy.net/) - 网络数据包操作库
- [Flask](https://flask.palletsprojects.com/) - Python Web 框架
- [React](https://reactjs.org/) - JavaScript UI 库
- [Socket.IO](https://socket.io/) - 实时通信库
- [Chart.js](https://www.chartjs.org/) - JavaScript 图表库
- [TLDExtract](https://github.com/john-kurkowski/tldextract) - TLD 提取
- 开源社区的启发和支持
## 支持
如有问题、疑问或建议:
- 在 GitHub 上开启一个 issue
- 查看现有文档
- 查看故障排除部分
## 作者
**Harshit7623** - GitHub: https://github.com/Harshit7623/Packet_Peeper
标签:Flask, React, Rust, Syscalls, 可视化界面, 异常检测, 深度包检测, 红队行动, 网络安全, 网络安全分析, 网络流量审计, 逆向工具, 防御绕过, 隐私保护