kahz12/DroidNet-Sentinel
GitHub: kahz12/DroidNet-Sentinel
一款运行在 Android/Termux 和 Linux 上的网络安全监控工具,集主机发现、漏洞检测、风险分级、异常告警和主动响应于一体。
Stars: 1 | Forks: 0
# DroidNet Sentinel




DroidNet Sentinel 发现存活主机、进行服务指纹识别、分类
风险、查找已知漏洞和 CVE,并跟踪网络在两次扫描之间的
变化——所有这些都可以通过一个单一的 CLI 和一个精美的 Web
Command Center 来完成。
## 目录
- [免责声明](#disclaimer)
- [核心亮点](#highlights)
- [快速开始](#quick-start)
- [使用方法](#usage)
- [模块](#modules)
- [配置](#configuration)
- [架构](#architecture)
- [数据库](#database)
- [风险等级](#risk-levels)
- [Telegram 警报](#telegram-alerts)
- [安全说明](#security-notes)
- [许可证](#license)
## 免责声明
## 核心亮点
| | |
|---|---|
| **发现** | 通过 ARP ping 扫描本地 /24 网段 (`nmap -sn`) |
| **深度扫描** | Top 100 TCP 端口 + 版本检测 (`-F -sV -T4`) |
| **风险引擎** | 单主机分类:MINIMAL / LOW / MEDIUM / CRITICAL |
| **差异历史** | 跟踪两次扫描间新增的主机、消失的主机和端口变化 |
| **漏洞查找** | 通过 `searchsploit` 进行本地 Exploit-DB 搜索 |
| **CVE 监控** | 结合影响分析的 NVD 交叉参考 |
| **主动响应** | 对不受信任的主机进行手动或自动 ARP 切断 |
| **Deauth** | 通过 Scapy 发送 802.11 deauth 帧 (单播 / 广播) |
| **Web 仪表盘** | 带身份验证的 Flask UI,包含扫描历史、差异对比和应用内帮助 |
| **警报** | OS 通知和 Telegram 机器人 |
| **跨平台** | 在 Android (Termux) 和 Linux 上使用相同的代码库 |
## 快速开始
### Android — Termux
```
pkg install python nmap termux-api
git clone https://github.com/kahz12/DroidNet-Sentinel.git
cd DroidNet-Sentinel
pip install -r requirements.txt
python main.py
```
### Linux — Debian / Ubuntu / Kali
```
sudo apt install python3 python3-pip nmap dsniff libnotify-bin wireless-tools
git clone https://github.com/kahz12/DroidNet-Sentinel.git
cd DroidNet-Sentinel
pip install -r requirements.txt
python main.py
```
**可选工具** — 仅安装您需要的模块:
| 工具 | 模块 | 安装 |
|---|---|---|
| `searchsploit` (exploitdb) | Hunter | `apt install exploitdb`,或在 Termux 上克隆该仓库 |
| `scapy` | Deauther | `pip install scapy` |
| `iw` / `airmon-ng` | Deauther | `apt install iw aircrack-ng` |
| `arpspoof` (dsniff) | Spoofer | `apt install dsniff` (仅限 Linux) |
## 使用方法
### 交互式菜单
```
python main.py
```
```
[1] Sentinel — Quick scan Single-pass scan of the current network
[2] Sentinel — Daemon mode Continuous background scanning + alerts
[3] Hunter — Exploit lookup Match the latest report against Exploit-DB
[4] CVE Watcher Cross-check the network against recent CVEs
[5] Dashboard — Command Center Launch the web UI on http://127.0.0.1:5000
[6] Spoofer — Manual ARP cut Cut a single host off the LAN (root)
[7] Deauther — 802.11 deauth Boot a client off the AP (root)
[8] Saved reports Browse the JSON reports under reports/
[9] Help & user guide Built-in user guide
[0] Exit
```
选项 **[9]** 会打开一个 CLI 内置指南,涵盖功能、风险等级、
安全说明和 CLI 速查表。Web 仪表盘在 **/help** 下提供了相同
的指南。
### 命令行
每个菜单选项都有一个非交互式的等效命令——适用于 cron
和脚本:
```
python main.py scan # one-shot scan
python main.py daemon # continuous scan
python main.py hunt # Hunter
python main.py cve # CVE Watcher
python main.py dashboard [--expose] # web UI (loopback by default)
python main.py reports # list saved reports
python main.py spoof VICTIM GATEWAY # ARP cut
python main.py deauth MAC BSSID --iface wlan0mon
python main.py db purge [--days N] # prune old scans
```
在任何子命令后添加 `--help` 可查看其完整的标志集。
## 模块
### Sentinel — 核心扫描器
`droidnet/modules/sentinel.py`
1. 通过平台抽象层读取 SSID 和本地 IP。
2. 使用 ARP 检测对本地 /24 网段进行 ping 扫描。
3. 对每台存活主机进行深度扫描(Top 100 TCP 端口 + 版本检测)。
4. 对风险进行分类,并将结果持久化到 `sentinel.db` 以及
`reports/` 下带有时间戳的 JSON 文件中。
5. 可选择对不在 `trusted_ips` 中的主机发起 ARP 切断。
6. 发出 OS 通知和 Telegram 警报。
Daemon 模式每 5 分钟循环一次,并在 SSID 发生变化
或经过 6 小时后重新扫描。
### Hunter — 漏洞查找
`droidnet/modules/hunter.py`
解析最近的一次扫描,从 Nmap 版本字符串中提取产品名称,
并通过 `searchsploit --json` 查询本地 Exploit-DB。
每个服务最多显示 5 个匹配项。
### CVE Watcher
`droidnet/modules/cve_watcher.py`
提取最近一次扫描的数据,解析服务 banners,查询 NIST
NVD 以获取过去 120 天内发布的 CVE,对攻击向量进行分类
(RCE、DoS、提权、身份验证绕过、信息泄露),
并将去重后的警报存储在 `cve_alerts` 中。设置 `NVD_API_KEY` 可以
获得更高的速率限制。
### Dashboard — Command Center
`droidnet/web/dashboard.py`
经过身份验证的 Flask UI,具有会话登录、CSRF 保护以及
`/login` 上每分钟 5 次尝试的速率限制。凭证检查是
恒定时间的。自动生成的密码会被写入到
`~/.sentinel/credentials` 中(模式为 `0600`),而不是直接打印出来。
| 路由 | 描述 |
|---|---|
| `/login`, `/logout` | 会话身份验证 |
| `/` | 仪表盘 — 扫描卡片、摘要磁贴、差异视图 |
| `/help` | 内置用户指南 |
| `/api/reports` | 每次扫描的 JSON 数据 |
| `/api/scan//diff` | 单次扫描与上一次扫描的差异对比 |
### Spoofer — ARP MitM
`droidnet/modules/spoofer.py`
通过 `arpspoof` 进行双向 ARP 毒化。两个 daemon 线程分别
向受害者和网关伪造回复;在按下 `Ctrl+C` 时会恢复
合法的 ARP 条目。**仅限 Linux**,需要 root 权限。
### Deauther — 802.11 deauth
`droidnet/modules/deauther.py`
通过 Scapy 制作并注入 802.11 deauth 帧(类型 `0xC0`,原因代码 `7`)。
针对单个 MAC 地址或进行广播。需要 root 权限和
支持监听模式的网卡。根据设计,对启用了 MFP
(802.11w) 的 WPA3 AP 无效。
## 配置
### `config.json`
位于项目根目录的可选文件:
```
{
"excluded_ips": ["192.168.1.100"],
"trusted_ips": ["192.168.1.1", "192.168.1.100"],
"db_retention_days": 90
}
```
| 字段 | 描述 |
|---|---|
| `excluded_ips` | Nmap 跳过的 IP(通常是您自己的设备) |
| `trusted_ips` | 已知主机。其他任何主机都可能触发 ARP 切断 |
| `db_retention_days` | 供 `db purge` 使用(默认为 `90`) |
该文件在加载时会进行 schema 验证:意外的类型会回退到
默认值而不会导致崩溃。如果缺少该文件,Sentinel 将使用
空列表运行。
### 环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
| `TELEGRAM_TOKEN` | Telegram 机器人 token | 未设置 |
| `TELEGRAM_CHAT_ID` | Telegram 数字聊天 ID | 未设置 |
| `SENTINEL_USER` | Dashboard 用户名 | `admin` |
| `SENTINEL_PASS` | Dashboard 密码 | 自动生成,持久化到 `~/.sentinel/credentials` (模式 0600) |
| `SENTINEL_SECRET` | Flask 会话 secret | 随机生成 |
| `NVD_API_KEY` | 用于提高 CVE Watcher 速率限制的 NVD API key | 未设置 |
## 架构
```
main.py
+-- droidnet/cli/ argparse + interactive Rich menu
+-- droidnet/core/ database, env probe, notifier, risk engine
+-- droidnet/modules/ sentinel, hunter, cve_watcher, spoofer, deauther
+-- droidnet/platform/ cross-platform helpers (Android / Linux)
+-- droidnet/web/ Flask dashboard + /help guide
```
平台层会为当前 OS 自动选择合适的工具:
| 功能 | Android (Termux) | Linux |
|---|---|---|
| Wi-Fi 信息 | `termux-wifi-connectioninfo` | `nmcli` |
| 通知 | `termux-notification` | `notify-send` |
| 网络接口 | `ip route` | `ip route` / `nmcli` |
## 数据库
扫描结果存放在 `sentinel.db` 中(SQLite,自动创建):
```
scans id, network, scan_time, total_devices, created_at
hosts id, scan_id -> scans.id, ip, risk
ports id, host_id -> hosts.id, port_entry
cve_alerts id, cve_id, severity, score, service, ip, summary,
impact, network, scan_id -> scans.id, created_at
UNIQUE(cve_id, ip, service)
```
`get_all_scans_with_diffs()` 会根据同一网络的
上一次扫描,为每条记录丰富添加 `new_ips`、
`gone_ips` 和 `port_changes` 信息。`reports/` 下的 JSON 文件
会并行写入以保持可移植性。
## 风险等级
根据主机暴露的一组开放 TCP 端口对其进行评分:
| 等级 | 触发端口 | 颜色 |
|---|---|---|
| CRITICAL | FTP (21), Telnet (23), SMB (139, 445), RDP (3389) | 红色 |
| MEDIUM | HTTP (80, 8080), DNS (53), SSDP (1900), NFS (2049)| 黄色 |
| LOW | 任何其他开放端口 | 蓝色 |
| MINIMAL | 无开放端口 | 绿色 |
仪表盘会内联显示相同的图例,并提供一个“这是什么
意思?”的链接指向 `/help`。
## Telegram 警报
当设置了 `TELEGRAM_TOKEN` 和 `TELEGRAM_CHAT_ID` 时,Sentinel 会在
每次扫描周期后发送简短摘要。SSID 和服务 banners 在
内插之前会进行转义,以免在消息中注入 Markdown。如果
这些变量未设置,通知步骤会被静默跳过。
## 安全说明
- Dashboard 默认绑定到 `127.0.0.1`。请仅在
TLS 代理(nginx / caddy)之后使用 `--expose`;否则凭证在
普通 HTTP 上将以明文传输。
- 登录限制为每个 IP 每分钟 5 次尝试,并受
每个会话的 CSRF token 保护。
- 自动生成的 Dashboard 密码会以 `0600` 模式持久化在
`~/.sentinel/credentials` 中,绝不打印到 stdout。
- 所有 `subprocess` 调用均使用列表参数(无 `shell=True`),且 TLS
验证从未被禁用。这些不变量由 `tests/test_security_invariants.py` 中
基于 AST 的回归测试强制执行。
- Spoofer 和 Deauther 属于攻击性工具。请仅针对
您拥有或被授权测试的目标运行它们。
## 许可证
在 [MIT License](LICENSE) 下发布。由 Ale 精心构建。
标签:AMSI绕过, Android工具, ARP欺骗, C2日志可视化, CTI, Deauth攻击, Facebook API, Flask, Nmap, Python, Telegram告警, Termux, Web面板, Wi-Fi扫描, 威胁检测, 密码管理, 局域网安全, 开源, 指纹识别, 插件系统, 无后门, 未知设备检测, 系统分析, 网络分析, 网络安全, 虚拟驱动器, 逆向工具, 隐私保护