xwllz — Attack-surface management for blue teams
xwllz is a CLI for discovering, monitoring, and reporting on your own external
attack surface. It maps the domains, subdomains, IPs, services, certificates, and
exposure points an attacker can reach — so blue teams can see their perimeter before
attackers do.
How it works
xwllz is pure Python by default — no system binaries required. It detects
optional accelerators (nmap, masscan, rustscan, nuclei, httpx, dnsx,
dig) on your PATH and uses them automatically when present, and falls back to
its built-in engines otherwise. Data is stored in SQLite.
The ASM loop
Each run produces a snapshot. xwllz monitor re-runs discovery and diffs
against the previous snapshot, showing you exactly what's new, changed, or
removed across your perimeter.
Quickstart
pipx install xwllz
xwllz init acme --domains example.com,corp.example.com
xwllz discover acme
xwllz monitor acme # re-scan and show what changed
xwllz report acme --format md
Data sources
Keyless by default: crt.sh (certificate transparency), DNS (A/NS/MX/SPF/DMARC/DKIM), HTTP probing, TLS/cert inspection, socket port scans.
Optional keyed enrichment (set env vars to enable):
| Source | Env vars |
|---|---|
| Shodan | SHODAN_API_KEY |
| SecurityTrails | SECURITYTRAILS_API_KEY |
| Censys | CENSYS_API_ID, CENSYS_API_SECRET |
| urlscan.io | URL_SCAN_API_KEY |
| URLhaus | URLHAUS_API_KEY |
| VirusTotal | VIRUSTOTAL_API_KEY |
Commands
xwllz init <org> --domains d1,d2 define the scope to monitor
xwllz discover <org> enumerate the attack surface
xwllz monitor <org> re-scan and report new/changed/removed
xwllz report <org> --format md|json|html
xwllz status <org> current surface dashboard
xwllz intel <indicator> URL/domain/IP lookup
xwllz whois <domain> whois lookup
xwllz cert <host> TLS certificate details
Data is stored in SQLite at ~/.local/share/xwllz/xwllz.db.
License
MIT
Release files for xwllz 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xwllz-0.1.3.tar.gz | 31.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xwllz-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 59.7 kB
Release files / xwllz-0.1.3.tar.gz
| Download URL | xwllz-0.1.3.tar.gz |
|---|---|
| Size | 31.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eba1a7ccdfa0e6110b84dea87ba2a4ba074d1755674168bbc25ea46b43941bf6
|
|
BLAKE2b-256 checksum How to use checksums |
7b0dc02e5c666486ba62526dc6d1f68e802064bacd5a0b426685f74965679ef9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / xwllz-0.1.3-py3-none-any.whl
| Download URL | xwllz-0.1.3-py3-none-any.whl |
|---|---|
| Size | 27.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4860f389dc4a6752b6939b18daa9198224994c77e79cf6885a795b4adcf737ee
|
|
BLAKE2b-256 checksum How to use checksums |
c43bcb8076df6668b269d2a169513a964d03d3c955a92ed7a77cf1d10862eb0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|