Authorized penetration-testing & self-audit toolkit (network, web, recon, vuln)
Project description
pentool
A modular, cross-platform (Kali Linux and Windows) penetration-testing and self-audit toolkit written in Python. The core runs on the standard library alone — no dependencies required — so it works on a fresh Kali box or a locked-down Windows host without extra setup.
⚠️ Authorized use only. Run these tools solely against systems you own or have explicit written permission to test. The toolkit prompts for authorization on every run (bypass with
--yesorPENTOOL_AUTHORIZED=1in a lab). See SECURITY.md for the acceptable-use policy.
Contents
- Modules · Install · Usage · Reports
- Design notes · Full reference → WIKI.md
- Security & acceptable use → SECURITY.md · License → LICENSE
- Changelog → CHANGELOG.md
Modules
| Command | Purpose |
|---|---|
scan |
TCP/UDP port scan + banner grabbing, optional host discovery (no root/admin needed) |
web |
Web audit: TLS version, security headers, cookie flags, exposed sensitive paths |
recon |
DNS records, reverse DNS, subdomain brute force, optional crt.sh CT logs |
vuln |
Service fingerprinting, risky-exposure flagging, optional NVD CVE lookup |
tls |
Deep TLS/SSL audit: protocol support, certificate validity, expiry, SANs |
Reports export to JSON, HTML, Markdown, or CSV (-f/--format, or inferred from
the -o file extension).
Install
No install required — just run it:
python pentool.py --help
Or install as a package (adds the pentool command and optional richer DNS):
pip install -e ".[dns]"
pentool --help
Once published, it is also available from PyPI and as a container image:
pip install pentool-kit # provides the `pentool` command
docker run --rm ghcr.io/aponder-dev/pentool-kit scan 127.0.0.1 -p top -y
See RELEASING.md for how releases, PyPI, and the container image are produced.
Requirements: Python 3.9+. The optional dnspython package unlocks full DNS
record types (MX/NS/TXT/SOA/CNAME) in recon; without it, recon still resolves
A/AAAA records.
Usage
# Port scan the top ports on a host, save a JSON report
python pentool.py scan 192.168.1.10 -o report.json
# Scan a whole subnet on specific ports, no banners (faster)
python pentool.py scan 10.0.0.0/24 -p 22,80,443,3389 --no-banner
# Ping-sweep a subnet first, then scan only live hosts; export an HTML report
python pentool.py scan 10.0.0.0/24 --discover -o report.html
# UDP scan common services
python pentool.py scan 192.168.1.10 -p 53,123,161,137 --udp
# Deep TLS/certificate audit
python pentool.py tls example.com
# Web security audit
python pentool.py web https://example.com
# DNS + subdomain recon, including certificate transparency logs
python pentool.py recon example.com --ct
# Fingerprint services and look up CVEs on the National Vulnerability Database
python pentool.py vuln 192.168.1.10 --cve
# Skip the authorization prompt in a lab/CI context
python pentool.py scan 127.0.0.1 --yes
Global flags (-y/--yes, -o/--output) work before or after the subcommand.
Full option tables for every command are in WIKI.md.
Reports
Every command accepts -o report.json to write machine-readable output. The JSON
contains the tool name, target spec, UTC start time, and a list of findings, each
with target, category, title, severity (info→critical), detail, and a
structured data object. Terminal output is a severity-sorted summary.
Design notes
- No raw sockets. Port scanning uses TCP connect, so it needs no elevated privileges and no packet-crafting library — portable across Kali and Windows.
- Non-intrusive web checks. The
webmodule only issuesGET/HEADrequests; it never attempts exploitation. - Optional network calls.
crt.sh(recon--ct) and NVD (vuln--cve) are opt-in; everything else stays local to your test path. - Authorization gate. Every run confirms authorization before touching a target.
Project layout
pentool.py # convenience launcher (python pentool.py ...)
pentool/
cli.py # argparse dispatcher + authorization gate
common.py # shared helpers: auth, output, target/port parsing, Report model
scanners/
network.py # TCP connect scan + banner grabbing
web.py # TLS / header / cookie / exposed-path audit
recon.py # DNS, reverse DNS, subdomain brute force, crt.sh
vuln.py # fingerprinting, risky-exposure flags, NVD CVE lookup
Legal & ethics
This project is for authorized engagements, security labs, and defensive self-audits only. Unauthorized scanning or testing of systems you do not own or control may be illegal in your jurisdiction. You are responsible for how you use it. See SECURITY.md.
License
MIT © 2026 Anthony Ponder
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pentool_kit-1.1.2.tar.gz.
File metadata
- Download URL: pentool_kit-1.1.2.tar.gz
- Upload date:
- Size: 22.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31e51b7127dd3cfdcd44669578e2185fe04249992ab8c53efe04fe94e4facfc3
|
|
| MD5 |
6ddda5dfeeb8d0871534653c35d8ee2c
|
|
| BLAKE2b-256 |
978a9032534a3e7e95acc7dbf36e2d87b703823156f801df887e23614c57b62f
|
Provenance
The following attestation bundles were made for pentool_kit-1.1.2.tar.gz:
Publisher:
release.yml on APonder-Dev/pentool-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pentool_kit-1.1.2.tar.gz -
Subject digest:
31e51b7127dd3cfdcd44669578e2185fe04249992ab8c53efe04fe94e4facfc3 - Sigstore transparency entry: 2189310645
- Sigstore integration time:
-
Permalink:
APonder-Dev/pentool-kit@dfdc788067c1901e6933a80df421e5b67d04deaf -
Branch / Tag:
refs/tags/v1.1.2 - Owner: https://github.com/APonder-Dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dfdc788067c1901e6933a80df421e5b67d04deaf -
Trigger Event:
push
-
Statement type:
File details
Details for the file pentool_kit-1.1.2-py3-none-any.whl.
File metadata
- Download URL: pentool_kit-1.1.2-py3-none-any.whl
- Upload date:
- Size: 23.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1aa183822ad0438cca7561c155a477e67fbdc5b54b20550c66a475b1a10d0527
|
|
| MD5 |
25a92d91e5c6f8cd01616f7db3a7c0e1
|
|
| BLAKE2b-256 |
d93f6de7fb858530cf40a2aaa0fde3e7bce8aab7cb69a9ba5d0ac049f52db0a8
|
Provenance
The following attestation bundles were made for pentool_kit-1.1.2-py3-none-any.whl:
Publisher:
release.yml on APonder-Dev/pentool-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pentool_kit-1.1.2-py3-none-any.whl -
Subject digest:
1aa183822ad0438cca7561c155a477e67fbdc5b54b20550c66a475b1a10d0527 - Sigstore transparency entry: 2189310746
- Sigstore integration time:
-
Permalink:
APonder-Dev/pentool-kit@dfdc788067c1901e6933a80df421e5b67d04deaf -
Branch / Tag:
refs/tags/v1.1.2 - Owner: https://github.com/APonder-Dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dfdc788067c1901e6933a80df421e5b67d04deaf -
Trigger Event:
push
-
Statement type: