prodrom3/VisionMap

GitHub: prodrom3/VisionMap

网络扫描结果的可视化与分析工具,解析多源扫描数据并构建交互图谱以识别风险。

Stars: 0 | Forks: 0

# VisionMap [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/491072f67f230309.svg)](https://github.com/prodrom3/VisionMap/actions/workflows/ci.yml) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Version](https://img.shields.io/badge/version-2.2.0-orange.svg)](pyproject.toml) VisionMap 是一个网络扫描结果的可视化与分析工具。它解析 Nmap、masscan、Nessus 和 CSV 扫描输出,构建交互式网络图谱,标记风险服务,并生成报告——全部在浏览器或命令行中完成。

## 功能 - **交互式 2D 和 3D 网络图谱** - 缩放、平移、点击节点查看详情。浏览器中使用 Plotly 暗色主题渲染。 - **风险分析** - 自动标记危险服务(Telnet、暴露的数据库、无认证 Redis、SAMBA、FTP)并给出严重等级评分。无需 CVE 数据库。 - **扫描对比** - 并排比较两次扫描。查看新增主机、移除主机、开启/关闭端口以及服务变更。 - **主机详情面板** - 点击任意节点查看完整端口表、操作系统信息、厂商、风险发现和差异标注。 - **报告生成** - 一键生成包含网络图、主机清单、风险发现表和差异摘要的 HTML 报告。 - **多种输入格式** - 支持 Nmap XML、masscan(XML 和 JSON)、Nessus v2 XML 以及灵活列检测的 CSV。 - **基于服务的着色** - 按主导服务类型(Web、数据库、邮件、文件、远程)对节点着色,而不仅依赖端口数量。 - **五种布局算法** - Spring、Kamada-Kawai、圆形、Shell、层次式。对大型图谱自动降级。 - **可扩展性** - 支持可折叠子网的层次式 LOD(细节层次),比例感知渲染,以及布局缓存(内存 + 磁盘)。 - **搜索与高亮** - 输入 IP、主机名或服务以高亮匹配节点,而不会隐藏其余内容。 - **会话持久化** - 保存分析状态(扫描、筛选器、布局、展开的子网)到 `.visionmap` 文件并随时重新加载。 - **CLI 导出** - 支持从命令行导出 JSON、CSV、PNG、SVG 和交互式 HTML。 - **IPv4 与 IPv6** - 完整支持双协议族并正确进行子网分组。 - ** traceroute 可视化** - 当存在 traceroute 数据时,以有向跃点边展示。

## 安装 需要 Python 3.10 或更高版本。 ``` git clone https://github.com/prodrom3/VisionMap.git cd VisionMap pip install -r requirements.txt ``` 或直接安装为包: ``` pip install . ``` ## 用法 ### Web 界面 ``` # 启动 Web UI(自动打开浏览器) python -m visionmap # 启动时加载扫描文件 python -m visionmap scan.xml # 使用自定义端口 python -m visionmap scan.xml --server-port 8080 ``` Web 界面提供以下功能: - **上传区域** - 支持扫描文件(Nmap XML、masscan、Nessus、CSV)和差异扫描文件 - **布局/尺寸/着色** 控制面板 - 侧边栏提供多种可视化控制 - **实时搜索** 栏 - 高亮匹配节点 - **端口/操作系统/子网** 筛选器 - 带防抖的实时更新 - **点击任意主机** - 打开包含完整端口表和风险发现详情面板 - **点击任意子网** - 展开或折叠该子网(LOD) - **导出报告** 按钮 - 生成自包含的 HTML 报告 - **保存/加载会话** - 持久化分析进度 ### 命令行模式 ``` # 导出为交互式 HTML python -m visionmap --cli -i scan.xml -o network.html # 导出为 PNG(需要 kaleido:pip install kaleido) python -m visionmap --cli -i scan.xml -o network.png # 导出为 SVG python -m visionmap --cli -i scan.xml -o network.svg --layout kamada_kawai # JSON 输出 python -m visionmap --cli -i scan.xml --json # CSV 输出(每个主机的每个端口一行) python -m visionmap --cli -i scan.xml --csv # 按端口和操作系统过滤 python -m visionmap --cli -i scan.xml -o filtered.html --port 80 --os Linux # 自定义维度和详细日志记录 python -m visionmap --cli -i scan.xml -o large.png --width 2560 --height 1440 --verbose ``` ### 支持的输入格式 | 格式 | 扩展名 | 自动检测 | |---|---|---| | Nmap XML | `.xml` | 是(XML 默认) | | Masscan XML | `.xml` | 是(通过 `scanner="masscan"` 属性) | | Masscan JSON | `.json` | 是 | | Nessus v2 | `.xml`、`.nessus` | 是(通过 `NessusClientData_v2` 根元素) | | CSV | `.csv` | 是 | CSV 文件解析灵活 - 列名可包含 `ip`/`host`/`address`、`port`/`portid`、`service`/`svc_name` 等。 ### CLI 参数 | 参数 | 描述 | |---|---| | `input_file` | 扫描文件(位置参数,打开 Web 界面) | | `-v, --version` | 显示版本并退出 | | `--verbose` | 启用详细日志 | | `--cli` | 命令行模式(不打开 Web 界面) | | `-i, --input` | 输入扫描文件 | | `-o, --output` | 输出文件(.png、.svg、.html) | | `--layout` | 算法:spring、kamada_kawai、circular、shell、hierarchical | | `--3d` | 强制 3D 可视化 | | `--width` | 图像宽度(像素,默认 1920,最大 7680) | | `--height` | 图像高度(像素,默认 1080,最大 4320) | | `--dpi` | 图像 DPI(默认 150,最大 600) | | `--title` | 可视化标题 | | `--json` | 以 JSON 格式输出解析数据 | | `--csv` | 以 CSV 格式输出解析数据 | | `--port` | 筛选:仅显示指定端口开放的主机 | | `--os` | 筛选:匹配操作系统的主机(不区分大小写) | | `--subnet` | 筛选:指定前缀子网内的主机 | | `--server-port` | Web 界面端口(默认 5000) | ## 架构 ``` visionmap/ __init__.py Package init, version __main__.py Entry point, CLI/web dispatch, logging cli.py Argument parsing parser.py Streaming Nmap XML parser (iterparse), dataclasses formats.py Multi-format loader (Nmap, masscan, Nessus, CSV) graph.py Hierarchical graph model, GraphContext, filtering, LOD layout.py Layout algorithms, auto-scaling, caching (memory + disk) renderer.py Unified plotly renderer (2D + 3D), service coloring theme.py Shared constants, enums, colors, risk/service categories risks.py Risk analysis engine (14 rules, no CVE DB needed) diff.py Scan comparison (new/removed/changed hosts and ports) report.py HTML report generation session.py Session save/load (.visionmap files) export.py PNG/SVG/HTML export pipeline server.py Flask web UI with REST API ``` ## 依赖 **必需:** - Python >= 3.10 - networkx >= 3.0 - plotly >= 5.0 - defusedxml >= 0.7 - flask >= 3.0 **可选:** - kaleido >= 0.2(PNG/SVG 静态图像导出) - scipy >= 1.10(Kamada-Kawai 布局) - pandas >= 2.0(数据处理) - geopy >= 2.0(IP 地理编码) ## 测试 ``` # 运行所有测试(141 个测试) python -m unittest discover -s tests -v # 运行单个模块 python -m unittest tests.test_risks -v ``` 测试覆盖范围包括:XML 解析(Nmap、masscan、CSV)、图谱构建与筛选、布局算法与缓存、风险分析、扫描对比、服务分类、报告生成、会话持久化、CLI 参数解析、渲染器输出、Web API 端点以及 Flask 集成。 ## 作者 由 [prodrom3](https://github.com/prodrom3) / [radamic](https://github.com/radamic) 创建 ## 许可证 VisionMap 在 MIT 许可证下发布。更多细节请参见 [LICENSE](LICENSE) 文件。
标签:CSV解析, HTML报告, Kamada-Kawai, masscan, Nessus, Nmap, Plotly, Python, Qt框架, Shell布局, Spring布局, 交互式图谱, 可缩放图谱, 图形渲染, 大数据图可视化, 威胁情报平台, 层次布局, 布局算法, 循环布局, 扫描对比, 数据统计, 无后门, 服务识别, 流量捕获, 浏览器工具, 渗透测试辅助, 端口变化检测, 端口扫描, 系统分析, 网络分析, 网络安全可视化, 网络拓扑, 虚拟驱动器, 资产测绘, 逆向工具, 颜色编码, 风险标注