Nmap XML open-port report
Turn a saved Nmap XML scan into an Excel workbook and CSV of host addresses and open ports.
- 1Add input
- 2Review and run
- 3Get your result
Tool input and files are processed in this browser without being uploaded.
Before you start
Paste a saved Nmap XML report or choose one UTF-8 XML file. Extract ports whose state is exactly open into an Excel-readable table. Download XLSX for spreadsheet use, CSV for interchange, and JSON for the complete parsed report.
How to use this tool
- Paste XML from an authorized scan, or choose its saved XML file. Clear the selected file before switching back to pasted text.
- Build the report. Check open-port count, host count and scanStatus; absent or failed completion metadata means the report may be partial.
- Download open-ports.xlsx, open-ports.csv or the complete JSON. Review the table alongside the original scan before using it as an inventory.
Supported inputs and limits
One UTF-8 file up to 10 MiB, or pasted text up to 1 MiB; at most 20,000 open-port rows. A selected file takes precedence over the pasted text. The root must be nmaprun. Each cell is limited to 32,767 UTF-16 code units; repeated table values together must fit 2 MiB of UTF-8.
Only explicit host/ports/port entries with state="open" and protocol tcp or udp are included. Closed, filtered, open|filtered, extraports and OS port probes are excluded. Missing service fields remain blank.
For hosts with several addresses, the table uses the first IPv4 address, otherwise the first IPv6 address. The JSON download preserves every reported IP address. A report with no open ports exports headers and zero records.
The standard bare <!DOCTYPE nmaprun> is accepted without loading a DTD. External/internal entity declarations are rejected; stylesheet instructions and referenced resources are never loaded.
CSV prefixes formula-like cells with an apostrophe; XLSX stores every cell as text. The on-page JSON previews 100 records and truncates long preview values; downloads contain full values. If the scan has no successful finished marker or contains a timed-out host, a warning remains. This is a saved-report reader, not a scanner or proof of a complete inventory.
Worked example
Example input
<?xml version="1.0"?><!DOCTYPE nmaprun><nmaprun scanner="nmap"><host><status state="up"/><address addr="192.0.2.10" addrtype="ipv4"/><hostnames><hostname name="server.example.test"/></hostnames><ports><port protocol="tcp" portid="22"><state state="open"/><service name="ssh" product="OpenSSH" version="9.0"/></port><port protocol="tcp" portid="80"><state state="closed"/></port></ports></host></nmaprun>
Example options
{}Example output
address,hostname,protocol,port,state,service,product,version 192.0.2.10,server.example.test,tcp,22,open,ssh,OpenSSH,9.0
When something does not work
Use XML output from Nmap rather than its normal or grepable text report. Replace a truncated or malformed file and retry. A report without open ports is a valid empty result; check the original scan scope.
Frequently asked questions
Why is open|filtered missing?
It does not establish that a port is open. Only the exact open state is included, so the exported count does not turn ambiguous results into confirmed services.
Does this run Nmap or contact hosts?
No. It parses the XML already on your device and generates local downloads. Hostnames and service descriptions are read from that report, not resolved or verified.
Can I open the result in Excel?
Yes. The XLSX workbook contains text cells with a frozen header row. CSV is also available with UTF-8 BOM and formula-like values escaped; JSON preserves original values.
Documentation & further reading
Related tools
IPv4 subnet and netmask calculator
Calculate IPv4 subnet boundaries and usable endpoints, or convert a netmask and prefix.
IP range to CIDR
Turn an inclusive IPv4 address range into the smallest exact list of CIDR blocks.
Aggregate CIDR blocks
Reduce an IPv4 CIDR list without changing its address coverage.
IPv4 number converter
Convert one IPv4 address between dotted decimal, unsigned integer and 32-bit binary.