Portfinder is a powerful asynchronous port scanner for Python that allows you to quickly scan multiple targets with flexible configuration options.
- Scan multiple IPs, CIDR ranges or domains
- Custom port ranges support (e.g.,
1-1000,3389,8080
) - Protocol-specific scanning (TCP, UDP, HTTP, HTTPS)
- High-performance async I/O implementation
- Multiple output formats (JSON, JSON Lines, plain text)
- Quiet mode for scripting
pip install portfinder
portfinder -t example.com
portfinder -t 192.168.1.1,10.0.0.0/24,example.com -p 1-1024,3389,8080 -P http -T 1.5 -c 500 -tps 300 -o scan_results -j
Argument | Description |
---|---|
-f , --file |
Target txt file with IP/CIDR/domain (new-line-separated) |
-t , --target |
Target IP/CIDR/domain (comma-separated) |
-p , --ports |
Ports to scan (default: 80,443,53 ) |
-P , --protocol |
Protocol to check (tcp, udp, http, https) |
-T , --timeout |
Timeout in seconds (default: 2.0) |
-c , --concurrency |
Maximum concurrent connections per host (default: 1000) no more than ~500-1000 on CPU cores |
-o , --outfile |
Output file path (without extension) |
-j , --js |
Output in JSON format |
-jl , --jsl |
Output in JSON Lines format |
-q , --quiet |
Disable all stdout output |
-u , --uvloop_disable |
Disable async uvloop (move to standart asyncio event loop) |
docker run --rm stanley0507/portfinder:latest -t 192.168.1.1 -p 1-1000
docker run -v $(pwd)/results:/data --rm stanley0507/portfinder:latest -f /data/input_data.txt -p 1-9000 -o scan_result_ -jl
input_data.txt example
192.168.1.1
example.com
from portfinder.scanner import Scanner
from portfinder.dto import Protocol, Result
async def run_scan():
...
scanner = Scanner(
target="0.0.0.0",
ports="80-23000",
protocol=Protocol.HTTP,
timeout=4.0,
concurrency=700,
)
results: list[Result] = await scanner.run()
...
Result
is a active port item (dataclass) with attributes:- host: str
- port: int
- ip_version: IpVersion
- protocols: list[Protocol]
Protocol
enum:- HTTP,
- HTTPS,
- TCP,
- UDP
- txt file
0.0.0.0:21 [ipv4] (tcp)
- json file
[
{
"host": "0.0.0.0",
"port": 21,
"ip_version": "ipv4",
"protocols": [
[
"tcp"
]
]
}
]
- jsonl file
{"host": "0.0.0.0", "port": 53, "ip_version": "ipv4", "protocols": [["tcp"]]}
License MIT