FelipeKreulich/devil-eye-radar-lan

GitHub: FelipeKreulich/devil-eye-radar-lan

一款基于 Go 的局域网实时可视化安全监控工具,集设备发现、流量分析、攻击模拟与威胁检测于一体,以黑客美学风格的雷达动画呈现全网态势。

Stars: 0 | Forks: 0

# LAN RADAR — devil eye ![Go](https://img.shields.io/badge/Go-1.22-00ADD8?style=flat-square&logo=go) ![License](https://img.shields.io/badge/license-MIT-green?style=flat-square) ![Platform](https://img.shields.io/badge/platform-Linux-black?style=flat-square) ``` ╔══════════════════════════════════════════════════════╗ ║ ▶ 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