Pyprobe
Pyprobe is a command-line tool and Python package for scanning TCP ports, identifying potentially running services, and exporting scan results to JSON. Built from scratch using Python's socket and concurrency capabilities, it aims to make network reconnaissance accessible through both a CLI and a reusable Python API.
Features
| Feature | Description |
|---|---|
| Asynchronous Scanning | Uses asyncio and asyncio.to_thread() to scan multiple ports concurrently. |
| TCP Port Scanning | Identifies accessible TCP ports on a target host. |
| Service Detection | Attempts to identify services using port mappings and service signatures. |
| Terminal Output | Displays scan results in a formatted table using Rich. Use -v for verbose logging. |
| JSON Export | Saves discovered ports and service information to a JSON file. |
| Custom Timeouts | Set a custom timeout for each TCP connection |
| CLI and Python API | Designed for terminal use and integration into Python programs. |
Installation
Install from PyPI
install it with:
pip install pyprobe-scan
Install from source
Clone the repository:
git clone https://github.com/fourtysevencode/pyprobe.git
cd pyprobe
Create and activate a virtual environment:
python3 -m venv .venv
source .venv/bin/activate
Install the project in editable mode:
python -m pip install -e .
Project Structure
pyprobe
├── docs
│ └── demo-screenshots
│ └── dummy-help-scan.png
├── src
│ └── pyprobe
│ ├── services
│ │ ├── __init__.py
│ │ ├── common_service_signatures.py
│ │ ├── commonly_used_ports.py
│ │ ├── find_service.py
│ │ └── scan_port.py
│ ├── __init.py
│ ├── __main__.py
│ ├── cli_args.py
│ ├── cli.py
│ ├── output.py
│ └── scanner.py
├── .gitignore
├── pyproject.toml
└── README.md
Usage
Display help
pyprobe-scan --help
Scan a target
pyprobe-scan 127.0.0.1
Replace 127.0.0.1 with the IP address of a host you own or have explicit permission to test.
Export results to JSON
pyprobe-scan 127.0.0.1 --json
The short form is also available (applicable to all commands use -h to view):
pyprobe-scan 127.0.0.1 -j
The scan results are saved to a timestamped JSON file in the current working directory.
Enable verbose logging:
pyprobe-scan 127.0.0.1 -v
Set a timeout on each TCP connection:
pyprobe-scan 127.0.0.1 -t 3 # Default is 3s
Run directly from source
If you haven't installed the package yet, run it from the repository root:
PYTHONPATH=src python -m pyprobe 127.0.0.1
Using Pyprobe e in Python
Pyprobe is also designed to be imported into your own Python projects.
import asyncio
from pyprobe.scanner import scan
async def main():
results = await scan("127.0.0.1")
print(results)
asyncio.run(main())
The scanner returns a pandas DataFrame containing discovered ports and their detected service information.
You can process the results using pandas:
results = asyncio.run(scan("127.0.0.1"))
print(results)
print(f"Open ports found: {len(results)}")
Credits
Shipped to Hack Club Crescent 2026
made with 💗 from fourtysevencode
Metadata
Release files for pyprobe-scan 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 | Provenance | |
|---|---|---|---|---|
| pyprobe_scan-0.1.3.tar.gz | 10.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyprobe_scan-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.9 kB
Release files / pyprobe_scan-0.1.3.tar.gz
| Download URL | pyprobe_scan-0.1.3.tar.gz |
|---|---|
| Size | 10.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
44de51f21cb10151b1ac57738befa8405989bbb5a3af5e9b127f4bb3371f7111
|
|
BLAKE2b-256 checksum How to use checksums |
dad22814e77fbee31fa04a1d16bd062fd4d37b5218d124a5b47aa07d6ecaedea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.0
|
Release files / pyprobe_scan-0.1.3-py3-none-any.whl
| Download URL | pyprobe_scan-0.1.3-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dc8a2a2c33090c52033444711e65d8284e97f24760dc795b4cec945804701a3f
|
|
BLAKE2b-256 checksum How to use checksums |
c396dc24bba0fce1c05c3c76577abae782cedf512e61149e718ced3eca8bb340
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.0
|
Security for pyprobe-scan 0.1.3
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.