Skip to main content

A modern, learnable GUI for nmap — scan profiles, vuln highlighting, scan diff, a built-in flag explainer, and guided lessons.

Project description

nmapui

A modern, learnable GUI for nmap. Replaces Zenmap with a dark-themed interface that teaches you nmap as you use it — no command memorization, no manual lookups, persistent settings across sessions.

pip install nmapui
nmapui

tests License


Why this exists

Zenmap (the official nmap GUI) hasn't meaningfully changed in over a decade. Using it well still means knowing -sV, -T4, --script vuln, etc. by heart. nmapui keeps the real power of nmap but removes the memorization requirement — and adds the pieces a learner or a day-to-day sysadmin actually wants: favorites, history that survives a restart, vulnerability triage, and a built-in tutorial.

Zenmap nmapui
Dark, modern UI
Plain-English scan profiles partial ✓ 10 profiles
Live command preview
Flag-by-flag command explainer
Guided lessons / practice mode
Vulnerability tab (CVE + severity)
Scan diff / compare
Favorite targets
Settings/history persist across restarts ✓ (~/.nmapui/)
Export CSV / JSON
Searchable cheatsheet
Zero third-party dependencies

Requirements

  • Python 3.9+ (tkinter ships with most standard installs)
  • The nmap binary on your PATH
    • macOS: brew install nmap
    • Ubuntu/Debian: sudo apt install nmap
    • Windows: nmap.org/download (check "Add to PATH" during install)
    • Winget on Windows: winget install -e --id Insecure.Nmap

Features

Scanner

10 plain-English scan profiles (Quick Ping, Common Ports, Full Port Scan, Service Detection, OS Detection, Intense, Stealth SYN, UDP, Vuln Scripts, Custom), a live command preview that updates as you adjust options, and a results view split into Summary / Ports / Raw Output / Export tabs.

Favorites

Save a target with a name ("Home Router", "Lab Server") from the Scanner tab. Favorites persist in ~/.nmapui/favorites.json and show up in a dropdown next to the target field — no more retyping IPs.

Explain

Paste any nmap command — your own, or one you copied from a forum post — and get a flag-by-flag plain-English breakdown before you run it, including a warning note on flags that are noisy, intrusive, or privileged.

Input:  nmap -sS -T4 -A --script vuln 192.168.1.0/24

-sS   → TCP SYN scan ("stealth" scan)... [Note: Requires root/admin privileges]
-T4   → Aggressive timing...
-A    → Aggressive scan, shorthand for -O -sV -sC --traceroute... [Note: noisy]
--script vuln → Run NSE vulnerability-category scripts... [Note: intrusive]

Learn

A short guided curriculum: what a port scan actually is, how to pick the right scan for a situation, how to read the results, and how to scan responsibly. Each lesson has a "Try it" button that loads a real command against scanme.nmap.org — the official Nmap project practice host — so you can learn without needing your own server or anyone's permission.

Vulns

After any scan using --script vuln (or the Vuln Scripts profile), NSE output is automatically parsed into a sortable, filterable table: severity (CRITICAL/HIGH/MEDIUM/LOW/INFO), CVE numbers, CVSS scores, and a detail panel with the full script output for each finding.

Diff

Run two scans — say, before and after a firewall change — then compare them. See exactly which hosts appeared or vanished, which ports opened or closed, and which service versions changed.

History

Every scan is logged with timestamp, target, command, and result counts. Summary metadata (not full raw output) persists to disk in ~/.nmapui/history.json, so your log survives closing the app.

Cheatsheet

24 common nmap flags with plain-English descriptions, instant search filter, click-to-copy.


CLI

nmapui                  # launch the GUI
nmapui --version        # print version
nmapui --config-dir     # print where settings/history/favorites live
nmapui --reset-config   # reset saved settings to defaults

Project layout

nmapui/
├── nmapui/
│   ├── __init__.py     # package root (lazy-imports the GUI)
│   ├── __main__.py     # CLI entry point
│   ├── gui.py          # Tkinter application (UI layer)
│   ├── vuln_parser.py  # NSE output parsing + severity classification
│   ├── diff.py         # Scan comparison engine
│   ├── explainer.py    # Flag-by-flag command explanations
│   ├── lessons.py       # Content for the Learn tab
│   └── storage.py       # Persistent settings/favorites/history
├── tests/               # Unit tests (no tkinter required to run)
├── .github/workflows/    # CI
├── pyproject.toml
├── LICENSE
├── CHANGELOG.md
└── CONTRIBUTING.md

The logic modules (diff.py, vuln_parser.py, explainer.py, storage.py) have no tkinter dependency and are independently unit tested — gui.py is the only file that needs a display.


Running tests

pip install -e ".[dev]"
pytest

33 tests, no nmap binary or display required.


Publishing to PyPI

pip install build twine
python -m build
twine upload dist/*

Legal note

nmapui is a GUI front-end only — all scanning is performed by the nmap binary on your system. Only scan networks and hosts you own or have explicit permission to test. Unauthorized network scanning may be illegal in your jurisdiction. The Learn tab's practice exercises use scanme.nmap.org, a host the Nmap project explicitly maintains for this purpose — be reasonable with it (light scans only).

License

MIT — see LICENSE.

Project details


Download files

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

Source Distribution

nmapui-3.0.0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nmapui-3.0.0-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file nmapui-3.0.0.tar.gz.

File metadata

  • Download URL: nmapui-3.0.0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for nmapui-3.0.0.tar.gz
Algorithm Hash digest
SHA256 65026c23cd62b6b48d84f868dc7b6f0cc5f090a43f7c42af2e7a3b2f16fadd55
MD5 b79e2220fddf3dcc0199cd114833fce1
BLAKE2b-256 329768097c7e0aaa4c3f4b00aa52415b29dd8b3143c2a7364f677b58dad6b679

See more details on using hashes here.

File details

Details for the file nmapui-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: nmapui-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for nmapui-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0334a21d7870c3d296534561ccdd73f3609bdb93931085f6dc1e4c2e176b1a54
MD5 e616485f7b9b8c28f83a0da0d13bc82c
BLAKE2b-256 b2da8e4754aa3faa25bf1c43cb30f764c71a5c6b377c722b97e298bfa197471f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page