Skip to main content

Boltscan

A fast, easy-to-use port scanner for the command line, built in Python.

What is a port scanner, and why would I use one?

Every device on a network (a laptop, a server, a website) has thousands of numbered "doors" called ports. A service running on that device — a web server, an SSH login, a database — sits behind one of those doors, listening for connections. A port scanner simply knocks on a range of doors and reports back which ones answered ("open") and which didn't ("closed" or "filtered").

People use port scanners to:

  • Check which services are exposed on their own server or home network
  • Verify a firewall is actually blocking what it's supposed to block
  • Find forgotten/unused services still running and reachable
  • Learn how networking and security tooling works

Boltscan does this quickly, with a clean live progress bar, and can optionally grab extra details about what's running on each open port (a banner, an HTTP page title, or a software version).

⚠️ Only scan systems you own or have explicit permission to test. See Legal / Ethical Use below.

Quick Start

# 1. Install
pip install .

# 2. Scan your own machine's most common 1024 ports
boltscan -t 127.0.0.1

# 3. Scan a specific device on your network for common web ports
boltscan -t 192.168.1.1 -p 80,443,8080

That's it — Boltscan prints a live progress bar while scanning, then a table of every open port it found, what service normally runs there, and how long the scan took.

Features

  • No special privileges needed — the default scan mode is a normal TCP connection, so it works without root/admin rights
  • Nmap-style timing templates — dial the scan speed from T0 (very slow and quiet) to T5 (as fast as possible) with a single flag
  • Optional extras on open ports — grab a service banner, pull the <title> of a web page, or detect a software version (e.g. OpenSSH 8.9p1)
  • Custom scripts — write your own check in Python, JavaScript, Lua, or Rust and run it against every open port Boltscan finds
  • Export to Markdown — save a shareable report of your scan results
  • Interruptible — stop a running scan cleanly at any time and still see partial results

Requirements

  • Python 3.10 or newer
  • rich and pyfiglet — installed automatically with Boltscan
  • Optional, only if you want SYN scanning (-sS): the scapy package, root/administrator privileges, and (on Windows) Npcap
  • Optional, only if you run non-Python custom scripts: node for .js scripts, lua for .lua scripts, or rustc for .rs scripts

Installation

pip install .

With SYN scan support:

pip install ".[syn]"

For development (editable install):

pip install -e .

Basic Usage

boltscan -t <target> [options]

<target> can be an IP address (192.168.1.1) or a hostname (example.com) — Boltscan resolves hostnames automatically.

The options you'll actually use most

Flag What it does
-t / --target The IP or hostname to scan (required)
-p / --ports Which ports to scan: 1-1024 (default), 22,80,443, or all (every port, 1–65535)
-b / --banner Try to grab a text "banner" from each open port
-sV / --service-version Try to identify the exact software/version behind each open port
-o / --export-md Save the results to a Markdown file, e.g. -o report.md
-v / --version Print the installed Boltscan version

Everything else

Flag What it does
-T0 … -T5 Timing template — how fast/slow and how many threads (T3 is the default, balanced setting)
-th / --threads Manually override the thread count from the timing template
--timeout How long (in seconds) to wait per connection before giving up
-Pn / --skip-ping Skip the "is this host even up?" check and scan directly
-sS / --syn-scan Stealthier "half-open" scan — needs root/admin and scapy installed
--script Run a preset (banner, http-title) or your own custom script file

Stopping a scan early

Press Q or Ctrl+Z while a scan is running to stop it and print whatever results were found so far. (Ctrl+C is intentionally disabled during a scan when running in a real terminal, so it can't leave the progress bar in a broken state — if you pipe Boltscan's input/output or run it in a script, Ctrl+C works normally instead.)

Example commands

# Basic scan of the most common 1024 ports
boltscan -t 192.168.1.1

# Scan every port (1-65535), fast, with banner grabbing
boltscan -t scanme.nmap.org -p all -T4 -b

# Identify software versions on a few key ports
boltscan -t 192.168.1.1 -p 22,80,443 -sV

# Grab the page title from web servers on common web ports
boltscan -t example.com -p 80,443,8080,8443 --script http-title

# Skip the host-is-up check and save results to a report
boltscan -t 192.168.1.1 -Pn -p 1-1024 -o scan_results.md

# Stealthier SYN scan (needs sudo/admin + scapy)
sudo boltscan -t 192.168.1.1 -sS -p 1-1024

# Run your own custom Python check on every open port
boltscan -t 10.0.0.1 -p 1-500 --script /path/to/my_script.py

# Run example scripts in other languages
boltscan -t 192.168.1.1 -p 80 --script examples/scripts/hello.js
boltscan -t 192.168.1.1 -p 80 --script examples/scripts/hello.lua
boltscan -t 192.168.1.1 -p 443 --script examples/scripts/hello.rs

Timing Templates

These control how fast Boltscan scans, borrowed from nmap's -T flags. Slower templates are quieter and less likely to trip alarms or overload a target; faster templates finish sooner but generate more traffic at once.

Template Delay between probes Threads Best for
T0 3.0s 1 Maximum stealth, very slow
T1 0.5s 10 Quiet, minimal footprint
T2 0.1s 50 Polite — won't disrupt normal traffic
T3 0.02s 250 Default — good for typical networks
T4 0.005s 500 Fast, assumes a reliable network
T5 0.0s 1000 Fastest, may drop packets on unstable links

Custom Scripts

Boltscan can run a script of your own against every open port it finds — similar in spirit to nmap's NSE scripts. Supported languages: Python, JavaScript, Lua, and Rust.

Writing a Python script

Create a .py file with a run function:

def run(target: str, port: int) -> str:
    # your own check goes here
    return "result string"

Writing a script in another language

Non-Python scripts follow a simple contract: Boltscan runs your script/binary with the target and port as command-line arguments, and captures whatever it prints to stdout as the result.

node script.js <target> <port>
lua script.lua <target> <port>
./compiled_binary <target> <port>   # Rust scripts are compiled automatically
  • A script has 5 seconds to finish before Boltscan times it out
  • If your script exits with an error, that error is shown in the results table instead of a result
  • Rust (.rs) scripts are compiled once and cached — Boltscan only recompiles when the source file changes

Required tools per language

Language File extension You need installed
Python .py Nothing extra — runs in-process
JavaScript .js node
Lua .lua lua
Rust .rs rustc

Security note: a custom script is just a program that Boltscan runs for you — only point --script at files you wrote yourself or fully trust, the same way you wouldn't run a random .exe or shell script from someone else.

Service Version Detection (-sV)

Instead of just saying "port 22 is open," -sV tries to identify exactly what software is answering:

  • SSH — reads the banner (e.g. OpenSSH 8.9p1)
  • HTTP/HTTPS — reads the Server: header (e.g. nginx/1.18.0)
  • FTP / SMTP / POP3 / IMAP — reads the service's greeting message
boltscan -t scanme.nmap.org -p 22,80 -sV

Project Structure

boltscan/
├── pyproject.toml
├── README.md
├── examples/
│   └── scripts/
│       ├── hello.js        # JavaScript example script
│       ├── hello.lua       # Lua example script
│       └── hello.rs        # Rust example script
└── src/
    └── boltscan/
        ├── __init__.py
        ├── cli.py              # Argument parsing & entry point
        ├── scanner.py          # Core scanning engine (ThreadPoolExecutor)
        ├── timing.py           # T0–T5 timing templates
        ├── ui.py               # Rich terminal UI (progress + summary table)
        ├── ports.py            # Port parsing & service name lookup
        ├── version_detect.py   # Service version detection (-sV)
        ├── syn_scan.py         # TCP SYN scan via scapy (-sS)
        ├── discovery.py        # ICMP/TCP host discovery (-Pn to skip)
        ├── exporter.py         # Markdown report export (-o)
        └── scripts/
            ├── __init__.py
            ├── loader.py       # Preset & custom script loader
            ├── banner_grab.py  # Banner grabbing script
            └── http_title.py   # HTTP <title> extraction script

Boltscan is meant for scanning systems and networks you own, or have explicit written permission to test. Port-scanning systems you don't own or don't have permission to test may be illegal where you live (for example, under the U.S. Computer Fraud and Abuse Act, or similar laws elsewhere), and may violate the terms of service of your ISP or hosting provider. You are solely responsible for how you use this tool.

License

Apache 2.0 — see pyproject.toml for full author and license details.

Metadata

Release files for boltscan 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for boltscan 1.0.0
File Size Uploaded Provenance
boltscan-1.0.0.tar.gz 32.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for boltscan 1.0.0
File Interpreter ABI Platform
boltscan-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 63.4 kB

Release files / boltscan-1.0.0.tar.gz

Download URL boltscan-1.0.0.tar.gz
Size 32.4 kB
Tags Source
SHA-256 checksum
How to use checksums
794f4415b4a1548704c02d9e4563e5a69ddc509909c0c6469810a7a2909467e0
BLAKE2b-256 checksum
How to use checksums
fca83206c3a34ab4f1c0d39ec696f9e6ee0c1161ebb1b3cd0bb1f3c7b3d92633
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / boltscan-1.0.0-py3-none-any.whl

Download URL boltscan-1.0.0-py3-none-any.whl
Size 31.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
981c42031749998f7d1c2ec7466f584b75b208010e5489922d8024135fc896a5
BLAKE2b-256 checksum
How to use checksums
393ae580adcd91be7b8ae7adf02eafdac62d622c503ca6692efe7b562518ca10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for boltscan 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for boltscan-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page