/\
/**\
/****\
/******\
/********\
/**********\
/____ ____\
||
||
||
||
___||___
/ || \
/____||____\
/\
/ \
Knowledge-driven Nmap orchestration with Ansible and structured reporting.
Excalibur turns a local Markdown knowledge base into reproducible Nmap runs:
- pick a scan profile
- extract
nmapcommands from the knowledge file - generate a readable Ansible playbook
- run the scan
- convert Nmap XML into structured JSON
- optionally enrich the report with CVE lookups
The goal is simple: make scanning workflows easier to inspect, easier to repeat, and much easier to ship in a clean container.
- multi-command CLI with profile discovery, build, run, report, inspect, and doctor workflows
- startup banner and installable
excaliburcommand - local knowledge source, no runtime GitHub fetch dependency
- structured core modules instead of a single monolithic script
- backward-compatible legacy entrypoint via ExegolSpector.py
- container-ready execution via Dockerfile
Product-facing CLI:
Core engine:
- exegol_spector/knowledge.py
- exegol_spector/playbooks.py
- exegol_spector/reports.py
- exegol_spector/nmap_report.py
- exegol_spector/runner.py
Legacy extension points:
List available profiles:
excalibur profilesValidate local prerequisites:
excalibur doctorGenerate a playbook without executing it:
excalibur build --type basic --targets 127.0.0.1Run a scan end-to-end:
excalibur run --type basic --targets 127.0.0.1Convert an existing XML report:
excalibur report --xml-report artifacts/nmap_report.xmlInspect a JSON report:
excalibur inspect --json-report artifacts/nmap_report.jsonLegacy compatibility:
python3 ExegolSpector.py --type basic --targets 127.0.0.1 --dry-runBuild the image:
docker build -t excalibur .Run the CLI in a disposable container:
docker run --rm -it \
-v "$(pwd)/artifacts:/opt/excalibur/artifacts" \
excalibur profilesBuild a playbook from the container:
docker run --rm -it \
-v "$(pwd)/artifacts:/opt/excalibur/artifacts" \
excalibur build --type basic --targets 127.0.0.1Use Compose:
docker compose run --rm excalibur profiles
docker compose run --rm excalibur build --type basic --targets 127.0.0.1The image includes:
- Python 3.11
nmapansiblegit- the installed
excaliburentrypoint
Local editable install:
python3 -m pip install -e .Classic dependency install:
python3 -m pip install -r requirements.txtVersion check:
excalibur --versionGenerated artifacts are written to artifacts/:
nmap_playbook.ymlnmap_report.xmlnmap_report.jsonscan_metadata.jsonvulnerabilities_report.json
Run tests:
PYTHONPYCACHEPREFIX=/tmp/pycache python3 -m unittest discover -s testsRun syntax checks:
PYTHONPYCACHEPREFIX=/tmp/pycache python3 -m py_compile \
Excalibur.py \
ExegolSpector.py \
excalibur/*.py \
exegol_spector/*.py \
Modules/attack_orchestrator.py \
Modules/cve_search.py- the current Nmap cheatsheet does not yet cover every advertised profile
- several historical scripts under Modules/ remain outside the maintained core
- Ansible is still the execution backbone; a future step could be richer profile schemas and more structured execution backends