UnholyPresence/Nmap2Drawio
GitHub: UnholyPresence/Nmap2Drawio
将 Nmap XML 扫描结果自动转换为 draw.io 网络拓扑图的安全报告辅助工具。
Stars: 0 | Forks: 0
# Nmap2Drawio
将 `nmap -oX` 扫描结果直接转换为 [draw.io](https://app.diagrams.net) 网络拓扑图。
将其指向一个包含 Nmap XML 输出的目录,它会解析每一台主机及其开放的端口/服务以及 MAC/厂商信息,然后将其生成为一张拓扑图 —— 网关位于顶部,发现的主机排列在下方的网格中 —— 方便您直接将其引入渗透测试或红队报告中。
## 环境要求
- Python 3.10+(使用了 `list[str]` / `X | None` 类型注解)
- 无需第三方依赖 —— 全部使用标准库(`xml.etree.ElementTree`, `dataclasses`, `pathlib`)
## 用法
运行带有 XML 输出的 Nmap 扫描:
```
nmap -oX scan.xml
```
然后在与您的 `.xml` 文件相同的目录下运行该脚本:
```
python3 Nmap2Drawio.py
```
- 如果在当前目录中找到一个或多个 `*.xml` 文件,每个文件都会被解析并生成一个同名的 `.drawio` 文件。
- 如果没有找到,程序会提示您输入一个目录来进行搜索。
- 在处理每个文件时,控制台会打印出发现的主机和开放端口的摘要。
在 [draw.io](https://app.diagrams.net)(或桌面/VS Code 应用程序)中打开生成的 `.drawio` 文件,即可查看和编辑该图表。
### 图表布局
- 如果主机的 IP 以 `.1` 结尾,则将其视为 **网关**,并放置在图表的顶部。
- 所有其他发现的主机都放置在下方的网格中,并通过线条连接到网关。
- 每个主机框显示其主机名/IP、厂商、MAC 地址以及开放的端口/服务。
- 仅包含 `state="up"` 且端口标记为 `open` 的主机 —— `closed` 和 `filtered` 状态的端口将被跳过。
## 项目结构
```
Nmap2Drawio.py # main tool: parse XML -> generate .drawio diagram
NmapXMLParserOnly.py # standalone parser (no diagram generation), useful
# for quick summaries or as a lighter-weight import
SampleXMLs/ # example Nmap XML scan for testing
Outputs/ # generated .drawio files land here
```
## 示例数据
项目包含了 `SampleXMLs/xmltest.xml`,因此您无需进行实际扫描即可试用该工具:
```
python3 Nmap2Drawio.py
# 此目录中没有 XML。请在文件所在的目录中运行 Nmap2Drawio,或者指定目标目录:
SampleXMLs
```
(或者运行 `cd SampleXMLs && python3 ../Nmap2Drawio.py` 直接从该目录运行,程序会自动将其识别处理)
## 开发路线
- 针对更大/分段的网络(子网、多个网关)提供更智能的布局
- 可配置的样式(颜色、按操作系统/厂商/服务分组)
- 计划作为更广泛的自动化报告生成 pipeline 中的一个模块
## 许可证
MIT —— 详见 [LICENSE](LICENSE)。可免费使用和修改;如果您在此项目基础上编写了自己的代码,请保留原作者署名。
标签:Draw.io, Nmap, Python, 云存储安全, 无后门, 网络扫描, 虚拟驱动器, 运维工具