Skip to main content

A simple python script to convert Nmap output to CSV

Project description



A simple python script to convert Nmap output to CSV


  • Support of Nmap version 5, 6, 7 normal format output (default format, -oN option)
  • Support of Nmap any version Grepable format output (-oG option) and XML (-oX)
  • Parsing main information : IP, FQDN, rDNS, MAC address and vendor, open ports, tcp/udp protocols, listening services and versions, OS, Number of hops to the target, and script output
  • Custom output format following the main items


Pass the Nmap output via stdin or from a specified file (-i).
The processed dump can be collected at stdout or to a specified file (-o).


Usage: [options]
Version: 1.5

  -h, --help            show this help message and exit

  Mandatory parameters:
    -i INPUT, --input=INPUT
                        Nmap scan output file in normal (-oN) or Grepable
                        (-oG) format (stdin if not specified)
    -x XML_INPUT, --xml-input=XML_INPUT
                        Nmap scan output file in XML (-oX) format

  Output parameters:
    -o OUTPUT, --output=OUTPUT
                        CSV output filename (stdout if not specified)
    -f FORMAT, --format=FORMAT
                        CSV column format { fqdn, rdns, hop_number, ip,
                        mac_address, mac_vendor, port, protocol, os, script,
                        service, version } (default: ip-fqdn-port-protocol-
    -S, --script        Adds the script column in output, alias for -f "ip-
    -d DELIMITER, --delimiter=DELIMITER
                        CSV output delimiter (default ";"). Ex: -d ","
    -n, --no-newline    Do not insert a newline between each host. By default,
                        a newline is added for better readability
    -s, --skip-header   Do not print the CSV header

Nmap Normal format (default output format -oN)

$ python -i test.nmap -f ip-fqdn-port-protocol-service-version-os
IP;FQDN;PORT;PROTOCOL;SERVICE;VERSION;OS;Test.lan;135;tcp;msrpc;Microsoft Windows RPC;Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1);Test.lan;139;tcp;netbios-ssn;;Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1);Test.lan;445;tcp;netbios-ssn;;Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1);Test.lan;5357;tcp;http;Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP);Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)

$ python -i test.nmap -f ip-fqdn-port-protocol-service-version -d ',' | csvlook
|  IP          | FQDN     | PORT | PROTOCOL | SERVICE     | VERSION                                  |
| | Test.lan | 135  | tcp      | msrpc       | Microsoft Windows RPC                    |
| | Test.lan | 139  | tcp      | netbios-ssn |                                          |
| | Test.lan | 445  | tcp      | netbios-ssn |                                          |
| | Test.lan | 5357 | tcp      | http        | Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)  |
|  |

$ nmap -sV -p- localhost -oN - | python 
IP;FQDN;PORT;PROTOCOL;SERVICE;VERSION;localhost;22;tcp;ssh;OpenSSH 7.6p1 Debian 2 (protocol 2.0);localhost;80;tcp;http;Apache httpd 2.4.29 ((Debian));localhost;5432;tcp;postgresql;PostgreSQL DB 9.5.4;localhost;5433;tcp;postgresql;PostgreSQL DB 9.6.0 or later;localhost;5434;tcp;postgresql;PostgreSQL DB 9.6.0 or later

Nmap Grepable format (-oG)

$ cat scan.gnmap
# Nmap 6.01 scan initiated Thu Nov 22 11:28:15 2012 as: nmap -p- -sV -oA scan 
Host: (test1.local)	Status: Up
Host: (test1.local)	Ports: 23/open/tcp//telnet//Cisco router telnetd/	Ignored State: closed (65534)
Host: (test2.local)	Status: Up
Host: (test2.local)	Ports: 23/open/tcp//telnet//Cisco router telnetd/	Ignored State: closed (65534)
Host: (test3.local)	Status: Up
Host: (test3.local)	Ports: 23/open/tcp//telnet//Cisco router telnetd/	Ignored State: closed (65534)
Host: (test50.local)	Status: Up
Host: (test50.local)	Ports: 22/open/tcp//ssh//OpenSSH 3.8.1p1 Debian 8.sarge.6 (protocol 2.0)/, 80/open/tcp//http//Apache httpd 1.3.33 ((Debian GNU|Linux) PHP|4.3.10-19)/, 111/open/tcp//rpcbind (rpcbind V2)/(rpcbind:100000*2-2)/2 (rpc #100000)/, 113/open/tcp//ident///, 684/open/tcp//status (status V1)/(status:100024*1-1)/1 (rpc #100024)/, 5432/open/tcp//postgresql//PostgreSQL DB (French)/	Ignored State: closed (65529)
Host: (test100.local)	Status: Up
Host: (test100.local)	Ports: 80/closed/tcp//http///, 5432/open/tcp//postgresql//PostgreSQL DB (French)/, 19999/filtered/tcp/////	Ignored State: closed (65532)

$ python -i scan.gnmap -f ip-fqdn

$ cat scan.gnmap | python 
IP;FQDN;PORT;PROTOCOL;SERVICE;VERSION;test1.local;23;tcp;telnet;Cisco router telnetd;test2.local;23;tcp;telnet;Cisco router telnetd;test3.local;23;tcp;telnet;Cisco router telnetd;test50.local;22;tcp;ssh;OpenSSH 3.8.1p1 Debian 8.sarge.6 (protocol 2.0);test50.local;80;tcp;http;Apache httpd 1.3.33 ((Debian GNU|Linux) PHP|4.3.10-19);test50.local;111;tcp;rpcbind (rpcbind V2);(rpcbind:100000*2-2)/2 (rpc #100000);test50.local;113;tcp;ident;;test50.local;684;tcp;status (status V1);(status:100024*1-1)/1 (rpc #100024);test50.local;5432;tcp;postgresql;PostgreSQL DB (French);test100.local;5432;tcp;postgresql;PostgreSQL DB (French)

Dependencies and installation

  • Python 2 (compatibility with Python 3 is in progress)
  • The easiest way to setup everything: pip install nmaptocsv and then directly use $ nmaptocsv
  • Or git clone that repository


  • version 1.5 - 09/30/2018: few bugs fixed in XML parsing + script alias format added
  • version 1.4 - 08/16/2018: few bugs fixed + XML parsing implementation
  • version 1.3 - 08/13/2018: fixing the README layout on PyPI
  • version 1.2 - 01/07/2018: script output parsing addition
  • version 1.1 - 01/07/2018: Cleaning the code, fixing some parsing bugs, delimiter option addition and made newline default
  • version 1.0 - from 2012 to 2013

Copyright and license

Nmaptocsv is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Nmaptocsv is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with nmaptocsv. If not, see


  • Thomas Debize < tdebize at mail d0t com >

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
nmaptocsv-1.5.tar.gz (10.4 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page