FelipeKreulich/devil-eye-radar-lan
GitHub: FelipeKreulich/devil-eye-radar-lan
一款基于 Go 的局域网实时可视化安全监控工具,集设备发现、流量分析、攻击模拟与威胁检测于一体,以黑客美学风格的雷达动画呈现全网态势。
Stars: 0 | Forks: 0
# LAN RADAR — devil eye



```
╔══════════════════════════════════════════════════════╗
║ ▶ LAN RADAR // DEVIL EYE ║
║ Live animated network map for your local network ║
╚══════════════════════════════════════════════════════╝
```
## 功能特性
### 发现与指纹识别
- **ARP 扫描器** — 无需 libpcap(使用原始 AF_PACKET 套接字)即可发现所有 IPv4 主机
- **OS 指纹识别** — 主动(ICMP TTL)+ 被动(来自原始数据包的 TCP 窗口/TTL)
- **mDNS 设备类型识别** — 从 Bonjour/mDNS 服务记录中识别设备类型(`_airplay._tcp` → Apple TV,`_googlecast._tcp` → Chromecast 等)
- **端口扫描器** — 并发 TCP 连接扫描约 30 个常见端口并抓取 Banner
- **CVE 扫描器** — 将服务 Banner 与 21+ 个已知 CVE 进行匹配(EternalBlue、Ghostcat、vsftpd 后门等)
### 流量分析
- **数据包捕获** — 实时捕获 DNS 查询、HTTPS SNI 主机名、HTTP Host 头
- **带宽监控** — 每台主机的出入站速率,并在图形边缘使用动态热力图显示
- **流量关联** — 检测局域网中设备到设备的直接通信,并以虚线边缘可视化显示
- **威胁检测** — 实时标记约 40 个已知恶意域名/IP(僵尸网络、挖矿程序、RATs)
### 安全 / 攻击
- **ARP MITM** — 通过 ARP 欺骗 + IP 转发对整个局域网投毒;停止时优雅恢复 ARP
- **DNS 欺骗** — 拦截并重定向来自局域网任何设备的 DNS 查询(通过 iptables 重定向 + 自定义解析器)
- **SSL 剥离检测** — 当设备通过 HTTP 访问以前曾使用过 HTTPS 的域名时发出警报
- **ARP 欺骗检测** — 当任何 IP 更改其 MAC 地址时发出警报
- **端口扫描检测** — 当同一来源在 5 秒内探测超过 10 个唯一端口时发出警报
- **恶意 DHCP 检测** — 对局域网中未经授权的 DHCP 服务器发出警报
- **WiFi 探测监控** — 捕获附近设备的 802.11 探测请求
### 可视化
- **动态雷达** — 带有声纳扫描、霓虹辉光、动态数据包点的力导向图
- **拓扑模式** — 切换至同心圆布局:网关 → 网络设备 → 终端设备
- **热力图叠加** — 基于实时流量大小在每个节点上叠加增量的辉光效果
- **供应商聚类** — 来自同一制造商的节点自动聚集在一起
- **带宽图表** — 60 秒历史条形图(画布,右下角)
- **延迟迷你图** — 档案面板中每台设备的 Ping RTT 历史
- **对等链路边缘** — 直接通信的设备之间的虚线
### 数据与历史
- **统计仪表板** — 设备总数、热门域名、最活跃主机、加密率、总字节数
- **会话重放** — 从 JSONL 日志加载任何过去的会话并将其作为动画重放
- **持久会话日志** — 在 `data/sessions/` 中的 JSONL 每日日志,用于事后分析
- **设备时间线** — 跨会话的每台设备的在线/离线历史
- **地理 / 标志** — 外部 IP 的国家 + emoji 国旗
- **导出** — 将所有设备数据下载为 JSON
### UI
- **过滤栏** — 按状态(ALL/ACTIVE/PORTS OPEN/THREAT)或供应商名称过滤节点
- **节点固定** — 右键点击任何节点以锁定其位置
- **Toast 通知** — 按严重程度着色的警报(info/warning/danger)
- **CRT 美学** — 扫描线、黑色背景上的霓虹绿、等宽字体,灵感来自《Mr. Robot》
## 环境要求
- Linux(使用 `/proc/sys/net/ipv4/ip_forward`、AF_PACKET 套接字、`iptables`、`iw`)
- Go 1.22+
- Chromium 浏览器
- Root 权限或 `cap_net_raw` 能力
## 快速开始
```
# Build
make build
# Run (需要 root 权限以使用 raw sockets)
make run
# 或: sudo -E ./lan-radar
```
Chromium 会自动作为桌面应用窗口在 `http://127.0.0.1:7777` 上打开。
为了避免每次都使用 `sudo`:
```
make install-cap # sets cap_net_raw on the binary (run once)
./lan-radar
```
## 构建命令
```
make build # go mod tidy + compile → ./lan-radar
make build-dev # same with -race detector
make run # build + sudo -E ./lan-radar
make install-cap # build + setcap cap_net_raw+ep (avoids sudo)
make clean
```
## 架构
```
Scanner ──┐
Sniffer ──┼──▶ hub.Events (chan) ──▶ Hub.RunBroadcastLoop() ──▶ WebSocket ──▶ Browser
Probe ──┘ │
Hub.devices (map)
Hub.logger → data/sessions/YYYY-MM-DD.jsonl
```
| 包 | 描述 |
|---|---|
| `internal/scanner` | ARP 扫描、mDNS 指纹识别、端口扫描、CVE 匹配、OS 检测、ARP 欺骗检测、延迟历史 |
| `internal/sniffer` | 原始数据包捕获、DNS/TLS/HTTP 解析、带宽、被动 OS、端口扫描检测、恶意 DHCP、流量关联、SSL 剥离检测 |
| `internal/mitm` | ARP 投毒、IP 转发、优雅恢复 |
| `internal/dnsspoof` | 通过 iptables + 自定义解析器进行 DNS 拦截,支持按域名欺骗规则 |
| `internal/cve` | 静态 CVE 数据库、基于 Banner 的匹配 |
| `internal/probe` | 802.11 监控模式、探测请求捕获 |
| `internal/geo` | ip-api.com 查询、24 小时缓存、emoji 国旗 |
| `internal/threat` | 静态恶意域名/IP 列表 |
| `internal/oui` | MAC 供应商数据库(约 600 个前缀) |
| `internal/store` | 设备元数据的 JSON 持久化 |
| `internal/logger` | JSONL 每日会话日志 |
| `internal/api` | HTTP 服务器、WebSocket 集线器、REST 端点 |
| `frontend/` | 单文件 Canvas 应用(无构建步骤,无依赖) |
## REST API
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/devices` | 所有已知设备 |
| `POST` | `/api/mitm/on` | 启用 ARP MITM |
| `POST` | `/api/mitm/off` | 禁用 MITM 并恢复 ARP |
| `GET` | `/api/export` | 以 JSON 格式下载设备列表 |
| `GET` | `/api/sessions` | 列出可用的会话日期 |
| `GET` | `/api/sessions/{date}` | 下载 JSONL 会话日志 |
| `GET` | `/api/dnsspoof/status` | DNS 欺骗状态 + 活动规则 |
| `POST` | `/api/dnsspoof/on` | 启用 DNS 欺骗 |
| `POST` | `/api/dnsspoof/off` | 禁用 DNS 欺骗 |
| `POST` | `/api/dnsspoof/rules` | 添加欺骗规则 `{domain, ip}` |
| `DELETE` | `/api/dnsspoof/rules` | 删除规则 `{domain}` |
| `GET` | `/ws` | WebSocket 事件流 |
## WebSocket 事件
| 事件 | 负载 |
|---|---|
| `full_state` | 所有设备 + 近期流量 + MITM 状态 |
| `device_found/updated/lost` | 设备对象 |
| `traffic` | DNS/HTTPS/HTTP 捕获 |
| `bandwidth` | 每个独立 IP 的速率(每 1 秒) |
| `peer_link` | 设备到设备的连接对(每 10 秒) |
| `alert` | Toast 通知(info/warning/danger) |
| `mitm_status` | MITM 开/关 |
| `ssl_strip` | 检测到 SSL 降级 |
| `passive_os` | 通过 TCP 指纹识别猜测 OS |
| `probe_device` | 802.11 探测请求 |
| `scan_start/end` | 扫描周期指示器 |
## 键盘 / 鼠标
| 操作 | 结果 |
|---|---|
| 点击节点 | 打开档案面板 |
| 拖拽节点 | 移动节点 |
| 右键点击节点 | 固定/取消固定位置 |
| 点击空白区域 | 关闭档案 |
| ⬡ TOPO 按钮 | 切换拓扑布局模式 |
| ◉ HEAT 按钮 | 切换热力图叠加 |
| ≡ STATS 按钮 | 打开统计仪表板 |
| ⏪ REPLAY 按钮 | 打开会话重放面板 |
| ⚡ SPOOF 按钮 | 打开 DNS 欺骗规则面板 |
## 数据持久化
```
data/
store.json # device geo, timelines — saved every 30s
sessions/YYYY-MM-DD.jsonl # daily event log (device events, alerts, MITM)
```
## 许可证
MIT — 详见 [LICENSE](LICENSE)
标签:AF_PACKET, AMSI绕过, ARP扫描, ARP欺骗, Canvas仪表盘, DNS欺骗, EVTX分析, Go语言, mDNS解析, OS指纹识别, SSL剥离, 不依赖libpcap, 中间人攻击, 威胁检测, 实时处理, 实时网络监控, 局域网扫描器, 带宽监控, 插件系统, 攻击路径可视化, 数据统计, 日志审计, 流量捕获, 程序破解, 端口扫描, 网络安全, 网络拓扑, 网络雷达, 速率限制, 防御绕过, 隐私保护, 黑客工具, 黑客美学UI