Skip to main content

Nmap XML to Excel Converter

将 Nmap 扫描的 XML 结果转换为美观的 Excel 报告工具,支持命令行和图形界面两种使用方式。

Python Version License Platform

功能特点

  • ✅ 多模式支持:单个 XML 文件或整个目录批量转换
  • ✅ 递归扫描:支持递归查找子目录中的所有 XML 文件
  • ✅ 完整报告:自动生成 4 个工作表的 Excel 报告
  • ✅ 双界面:命令行 (CLI) 和图形界面 (GUI) 双版本
  • ✅ 易于安装:支持 pipx 隔离安装,无需配置虚拟环境
  • ✅ 完整漏洞信息:解析 Nmap NSE 脚本的详细漏洞数据(CVE、严重程度、解决方案等)
  • ✅ 跨平台:支持 Windows、Linux、macOS
  • ✅ 独立 EXE:可打包为独立 Windows 程序,无需 Python 环境

快速开始

1. 安装依赖

pip install -r requirements.txt

2. 安装工具

方式 A:使用 pipx(推荐,隔离环境)

pipx install .

方式 B:使用 pip

pip install .

方式 C:开发模式

pip install -e .

3. 使用

命令行模式:

nmap-parser scan.xml report.xlsx

图形界面模式:

nmap-parser-gui

安装方式对比

方式 命令 适用场景
pipx pipx install . 推荐使用,独立隔离环境
pip pip install . 系统级安装
开发 pip install -e . 开发调试模式
手动 python nmap_parser/gui.py 无需安装,直接运行

使用方法

命令行模式 (CLI)

基础用法:

# 转换单个 XML 文件
nmap-parser scan.xml report.xlsx

# 转换目录下所有 XML 文件
nmap-parser ./nmap_scans report.xlsx

# 递归转换(包含子目录)
nmap-parser ./nmap_scans report.xlsx -r

# 静默模式(不输出日志)
nmap-parser scan.xml report.xlsx -q

# 查看版本
nmap-parser -v

命令行参数:

参数 简写 说明
input - 输入路径(XML 文件或目录)
output - 输出 Excel 文件路径(.xlsx)
--recursive -r 递归查找子目录
--quiet -q 静默模式,不输出日志
--version -v 显示版本信息
--help -h 显示帮助信息

退出码:

  • 0 - 成功
  • 1 - 错误(未找到文件、解析失败等)

图形界面模式 (GUI)

启动方式:

# 已安装
nmap-parser-gui

# 未安装,直接运行
python nmap_parser/gui.py

界面功能:

  • 📁 文件选择器:点击浏览选择输入 XML 文件或目录
  • 📂 目录浏览:可选择文件夹进行批量转换
  • 🔄 递归选项:勾选后递归扫描子目录
  • 📊 实时进度:显示转换进度条
  • 📝 详细日志:显示每个文件的处理状态
  • ✅ 完成提示:转换完成后弹出对话框

输出 Excel 结构

生成的 Excel 包含 4 个工作表:

1️⃣ 任务信息 (Task Info)

列名 说明
xml 文件名 扫描的 XML 文件名
扫描工具 Nmap 或其他扫描器名称
工具版本 扫描器版本号
扫描参数 Nmap 命令行参数
开始时间戳 Unix 时间戳格式
开始时间 可读的时间格式
XML 版本 Nmap XML 输出格式版本
总主机数 扫描的主机总数
存活主机数 在线主机数量
下线主机数 离线主机数量
结束时间戳 扫描结束时间戳
结束时间 可读的结束时间
耗时 (秒) 扫描持续时间
退出状态 扫描任务状态(success/fail)

2️⃣ 主机状态 (Host Status)

列名 说明
xml 文件名 来源 XML 文件
IP 地址 主机 IP 地址
主机名 反向解析的主机名
状态 up/down
状态原因 判断状态的依据
状态 TTL 响应 TTL 值
开始时间 主机扫描开始时间
结束时间 主机扫描结束时间

3️⃣ 端口服务 (Port & Service)

列名 说明
xml 文件名 来源 XML 文件
IP 地址 主机 IP
端口号 端口号 (1-65535)
协议 TCP/UDP
状态 open/closed/filtered
状态原因 状态判断原因
状态 TTL TTL 值
服务名称 识别的服务名
服务产品 产品名(如 OpenSSH)
服务版本 版本号
服务额外信息 系统、协议等额外信息
探测方法 table/probed
可信度 1-10 的置信度
CPE 信息 通用平台枚举标识符

4️⃣ 漏洞情况 (Vulnerabilities)

基于 Nmap NSE 脚本的详细输出:

列名 XML 路径 说明
脚本 ID script@id NSE 脚本标识符
输出 script@output 脚本原始输出
版本 script@version 脚本版本
协议 port@protocol 端口协议
结果 elem[@key="result"] 检测结果 (如 VULNERABLE)
严重程度 elem[@key="severity"] HIGH/MEDIUM/LOW
描述 elem[@key="description"] 漏洞详细描述
风险因素 elem[@key="risk_factor"] Critical/High/Medium/Low
参考链接 elem[@key="see_also"] 外部参考链接
解决方案 elem[@key="solution"] 修复建议
CVE 编号 elem[@key="cve"] CVE 标识符
BID 编号 elem[@key="bid"] BugTraq ID
CERT 公告 elem[@key="cert"] CERT 公告编号
MSF 模块 elem[@key="msf_module"] Metasploit 模块名
OSVDB 编号 elem[@key="osvdb"] 开源漏洞库 ID

使用示例

示例 1:转换单个扫描文件

nmap-parser nmap_scan.xml report.xlsx

示例 2:批量转换目录

nmap-parser ./scans/ all_reports.xlsx -r

示例 3:生成带漏洞详情的报告

使用 Nmap 进行漏洞扫描(需要安装 NSE 脚本):

# Nmap 扫描并输出 XML
nmap -sV --script vuln -oX scan_result.xml 192.168.1.0/24

# 转换为 Excel
nmap-parser scan_result.xml vulnerability_report.xlsx

示例 4:在 CI/CD 中使用

# 扫描
nmap -oX results.xml target.host

# 转换
nmap-parser results.xml report.xlsx

# 检查生成结果
ls -la report.xlsx

系统要求

运行环境

  • Python: 3.8 或更高版本
  • 操作系统:Windows 7/10/11、Linux、macOS

依赖库

xlsxwriter>=3.0.0      # Excel 文件生成
customtkinter>=5.2.0   # GUI 框架
darkdetect             # 暗色模式检测
packaging              # 工具库

打包为独立 EXE (Windows)

快速打包

build_exe_simple.bat

完整打包(带版本信息)

build_exe.bat

手动打包

pip install pyinstaller

pyinstaller --onefile --windowed --name "nmap-parser-gui" --hidden-import customtkinter --hidden-import tkinter --hidden-import xlsxwriter --collect-all customtkinter --noconfirm --clean nmap_parser\gui.py

打包成功后,在 dist 目录生成独立的 EXE 文件(约 30-50 MB),无需 Python 环境即可运行。

项目结构

workspace/
├── pyproject.toml         # 项目配置文件
├── requirements.txt       # Python 依赖
├── README.md              # 使用文档
├── PACKAGING.md           # 打包指南
├── build_exe.bat          # Windows 打包脚本(完整版)
├── build_exe_simple.bat   # Windows 打包脚本(简易版)
└── nmap_parser/
    ├── __init__.py        # 包初始化
    ├── core.py            # 核心转换逻辑
    ├── cli.py             # 命令行界面
    └── gui.py             # 图形界面

开发指南

安装开发环境

pip install -e .
pip install -r requirements.txt

运行测试

# 命令行模式
python -m nmap_parser.cli test_scan.xml output.xlsx

# GUI 模式
python -m nmap_parser.gui

# 或直接运行(无需安装)
python nmap_parser/cli.py test_scan.xml output.xlsx
python nmap_parser/gui.py

代码结构

  • core.py: NmapConverter 类,包含 XML 解析和 XLSX 生成逻辑
  • cli.py: 命令行解析,调用核心功能
  • gui.py: CustomTkinter 实现的图形界面

常见问题

Q: 为什么 GUI 打不开?

确保已安装 customtkinter:

pip install customtkinter

Q: 转换后 Excel 为空?

检查输入的 XML 文件是否是有效的 Nmap 输出格式。

Q: 支持其他扫描器的 XML 吗?

当前仅支持 Nmap XML 格式,其他扫描器需要适配 XML 解析逻辑。

Q: 如何提交 Bug 或建议?

请在 GitHub 仓库提交 Issue。

截图预览

命令行界面

🔍 找到 2 个 XML 文件
🔍 开始解析...
  ✅ /path/to/scan1.xml
  ✅ /path/to/scan2.xml

📈 统计信息:
  文件数:2
  主机数:10 (存活:8)
  端口数:45 (开放:32)
  脚本/漏洞:5

✅ 完成!输出:report.xlsx

图形界面

┌────────────────────────────────────────┐
│  🔍 Nmap XML to Excel Converter        │
├────────────────────────────────────────┤
│  输入路径:[____________] [浏览...]    │
│  输出文件:[____________] [浏览...]    │
├────────────────────────────────────────┤
│  ☑ 递归查找子目录                      │
├────────────────────────────────────────┤
│      [     开始转换     ]              │
│  进度:███████████░░░░░ 65%           │
│  📝 详细日志输出...                    │
└────────────────────────────────────────┘

更新日志

v1.0.0

  • ✅ 初始版本发布
  • ✅ 支持 Nmap XML 完整解析
  • ✅ 4 个工作表报告
  • ✅ CLI 和 GUI 双界面
  • ✅ Windows EXE 打包支持
  • ✅ 完整漏洞信息提取

许可证

MIT License

作者

test233

致谢

Metadata

Release files for nmap-xml2xlsx 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nmap-xml2xlsx 1.0.0
File Size Uploaded Provenance
nmap_xml2xlsx-1.0.0.tar.gz 17.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for nmap-xml2xlsx 1.0.0
File Interpreter ABI Platform
nmap_xml2xlsx-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.4 kB

Release files / nmap_xml2xlsx-1.0.0.tar.gz

Download URL nmap_xml2xlsx-1.0.0.tar.gz
Size 17.9 kB
Tags Source
SHA-256 checksum
How to use checksums
c1cbbb2950e0ab892137fe2a391529114cca5b81ab5f3e4e690d53fa5a0e0e49
BLAKE2b-256 checksum
How to use checksums
cb97ef3e798b22144a460c98257c2741a49a6484fb2bd8d3a501ab5556911bdb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / nmap_xml2xlsx-1.0.0-py3-none-any.whl

Download URL nmap_xml2xlsx-1.0.0-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1dea8a49fa092693f31c6fee5bba1c63b13bc807aad559d3dd2df64579e49bea
BLAKE2b-256 checksum
How to use checksums
ac47f5e513f4574fd223ff95eb1b6e27797141a57de6af4ffb409ea4ad209308
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Security for nmap-xml2xlsx 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page