PySide6 desktop application that orchestrates lightweight Nmap discovery jobs, ranks hosts via a transparent heuristic model, and exports audit-friendly evidence so analysts can focus commercial scanners where it matters most.
Highlights
- ICMP, targeted port, OS, and safe-script phases launched through the local
nmapbinary (never bundled). - Cross-platform (Windows/macOS/Linux) with PyInstaller packaging artifacts published by GitHub Actions.
- Deterministic scoring engine with CSV/JSON exports containing score breakdowns and error context.
- User Manual (English):
docs/rogue_finder_manual_en.md - ユーザーマニュアル (日本語):
docs/rogue_finder_manual_ja.md - Scan execution reference:
docs/scan_execution.md - Architecture overview:
docs/architecture_overview.md - Agent/developer briefing:
AGENTS.md - Changelog:
CHANGELOG.md
- Install prerequisites
- Python 3.11+
- uv (required because Poe tasks shell out via
uv run) - Locally installed Nmap (
nmapmust be onPATH).
- Bootstrap the repo
uv venv source .venv/bin/activate # Windows: .venv\Scripts\activate uv pip install -r requirements-dev.txt
- Run lint/tests
poe lint poe testpoe testnow runs viacoverage, leavingcoverage.xmland anhtmlcov/folder for SonarQube/GitHub Pages (both ignored by git). - Launch the GUI
python -m nmap_gui.main --debug
- Paste IPs/CIDRs/hostnames (comma/newline/tab separators are OK).
- Leave ICMP/Ports/OS phases enabled or toggle as needed.
- Click Start to queue discovery jobs; Stop cancels in-flight work.
- Review prioritized results (High/Medium/Low) and export CSV/JSON or run Safe Script diagnostics.
- For full instructions and FAQs, see the English/Japanese user manuals.
The rules that previously lived in nmap_gui_system_spec.md are summarized here for convenience:
- Alive detection: +2 when ICMP (or the TCP fallback) proves that the host responded.
- Port weights:
PORT_WEIGHTSemphasizes remote-admin ports such as 21/445/3389/5985 (typically +2 each) while database/dev/service ports like 3306/5432/8080/5672/15672 contribute +1. Update the dictionary insiderating.pywhen adding new ports. - High-port bonus: +1 when TCP 50000 is open, signalling ad-hoc services.
- OS strings: Windows and SOHO/IoT fingerprints score +3, legacy Linux targets +2, generic Linux +1, and unknowns still receive +1 so they remain sortable.
- Combo bonuses: +1 for ssh+db pairs ({22 & (3306 or 5432)}), +1 for 3389 & 1433 together, and +2 when 8080, 5672, and 15672 all respond.
- Priority bands: Scores
>=8are High,5-7are Medium, and<5are Low; the GUI maps these toPRIORITY_COLORSfor row tinting.
Tuning rogue-finder.config.yaml → rating changes these weights at runtime, and rating.apply_rating is covered by poe test.
Rogue Finder ensures rogue-finder.config.yaml exists in the directory you launch from. If absent, defaults are generated and future schema updates backfill missing keys without touching overrides.
Key sections:
scan– per-phase timeouts (default_timeout_seconds,advanced_timeout_seconds), fast/full port lists, high-port cutoff, worker parallelism.rating– ICMP/port/OS weights plus combo bonuses and priority thresholds.ui– priority row colors.safe_scan– Safe Script concurrency, timeout, and ETA smoothing knobs.
Generate a fresh template anytime:
python -m nmap_gui.infrastructure.config --write-default ./rogue-finder.config.yamlFor the full component map see docs/architecture_overview.md. At a high level:
src/nmap_gui/main.pybootsQApplication, parses CLI flags, and showsMainWindow.- Widgets under
src/nmap_gui/gui/collect targets, display results, and emitScanConfigobjects without blocking the GUI thread. src/nmap_gui/scan_manager.pyandprocess.pyfan-out jobs to aProcessPoolExecutorusing thespawncontext so Windows/macOS builds behave consistently.src/nmap_gui/nmap_runner.pyexecutes ICMP/port/OS/safe-script phases, adapts to privilege limitations, and parses XML intomodels.HostScanResult.rating.py,exporters.py, andjob_eta.pyprovide scoring, CSV/JSON output, and ETA calculations consumed by the GUI and tests.
- Discovery/diagnostics command matrix:
docs/scan_execution.md - Architecture deep dive:
docs/architecture_overview.md - User manuals (EN/JA): see Quick Links
- Agent/developer process notes:
AGENTS.md - Release notes & automation details:
CHANGELOG.mdand Release workflow
The repo standardizes on uv + Poe for reproducible environments.
- Environment setup:
uv venv && source .venv/bin/activate, thenuv pip install -r requirements-dev.txt. - Tooling:
poe lint(backsruff check src tests),poe test(runscoverage run -m pytest --spec+ emits XML/HTML coverage reports). - Optional helpers:
uv tool install poethepoet && uv tool update-shellto expose thepoeshim globally. - Safe-script fixtures & XML parsing tests already live in
tests/; add coverage whenever rating or scan behavior changes.
- CI workflow (
ci.yml): runs lint + pytest on pushes/PRs targetingmain. - Release workflow (
release.yml): gates PyInstaller builds behind the same coverage-tested suite, uploads HTML coverage as artifacts, and on tags publishes installers, changelog PRs, and the latest coverage report to GitHub Pages. - Changelog generation:
git-cliffis invoked automatically during tag builds; avoid hand-editingCHANGELOG.mdoutside that flow.
- File issues or feature requests via GitHub if you are using official releases.
- Internal deployments should surface questions (logs, error codes, exports) to the security tooling team so regressions can be reproduced quickly.
- Need deeper operational guidance? Start with the user manuals, then escalate with
--debuglogs or exported scan JSON for context.