Skip to main content

Python 3 Asynchronous TCP/IP Connect Port Scanner

PyPI Python Version CI License

Reddit Discord

A simple TCP Connect port scanner developed in Python 3. This application leverages the use of Python's Standard Library asyncio framework to execute a number of TCP connections to an arbitrary number ports on target IP addresses, taking a maximum time equal to the connection timeout setting (defaults to 10 seconds) to return all results.

This application maintains no dependencies on third-party modules.

Demo

scanner_demo

Installation

Install from PyPI, ideally with pipx so the async-port-scanner command is available globally in its own isolated environment:

user@host:~$ pipx install async-port-scanner

Or with pip:

user@host:~$ pip install async-port-scanner

For development

user@host:~$ git clone https://github.com/EONRaider/Simple-Async-Port-Scanner.git
user@host:~$ cd Simple-Async-Port-Scanner
user@host:~/Simple-Async-Port-Scanner$ uv sync
user@host:~/Simple-Async-Port-Scanner$ uv run async-port-scanner example.com -p 80,443

Usage

usage: async-port-scanner [-h] -p PORTS [--timeout TIMEOUT] [--open]
                          [--version]
                          ADDRESSES

Simple asynchronous TCP Connect port scanner

positional arguments:
  ADDRESSES             A comma-separated sequence of IP addresses and/or domain names to scan, e.g., '45.33.32.156,65.61.137.117,testphp.vulnweb.com'.

options:
  -h, --help            show this help message and exit
  -p PORTS, --ports PORTS
                        A comma-separated sequence of port numbers and/or port ranges to scan on each target specified, e.g., '20-25,53,80,443'.
  --timeout TIMEOUT     Time to wait for a response from a target before closing a connection (defaults to 10.0 seconds).
  --open                Only show open ports in scan results.
  --version             show program's version number and exit

Usage examples:
1. async-port-scanner google.com -p 80,443
2. async-port-scanner 45.33.32.156,demo.testfire.net,18.192.172.30 -p 20-25,53,80,111,135,139,443,3306,5900

async-port-scanner is also runnable as a module with python -m async_port_scanner.

Application Performance

Due to the nature of Python's asyncio framework results such as the ones shown below are possible: the first 1000 TCP/IP ports of scanme.nmap.org are scanned in 1.68 seconds:

eonraider@havoc:~$ async-port-scanner scanme.nmap.org -p 1-1000 --open
Starting Async Port Scanner at Sat Jan 30 13:41:25 2021
Scan report for scanme.nmap.org

[>] Results for scanme.nmap.org:
      PORT     STATE      SERVICE      REASON   
       22       open        ssh       SYN/ACK   
       80       open        http      SYN/ACK   

Async TCP Connect scan of 1000 ports for scanme.nmap.org completed in 1.68 seconds

ADVISORY: For the sake of simplicity this application does not implement a maximum number of workers responsible for making each connection, instead spawning a new worker for every target socket (i.e. combination of target address and TCP port) until the process is complete. What this means in practice is that performing a scan of a significant number of ports on a single host will consequently trigger a great number of requests being sent almost simultaneously, potentially causing an involuntary situation analogous to that of a SYN-flood Denial-of-Service attack on hosts not able to handle the sudden spike in the number of requests they have to handle. For this particular reason, and in addition to the Legal Disclaimer section below, all users are advised by the developers to use caution when scanning live hosts.

Legal Disclaimer

The use of code contained in this repository, either in part or in its totality, for engaging targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws.

Developers assume no liability and are not responsible for misuses or damages caused by any code contained in this repository in any event that, accidentally or otherwise, it comes to be utilized by a threat agent or unauthorized entity as a means to compromise the security, privacy, confidentiality, integrity, and/or availability of systems and their associated resources by leveraging the exploitation of known or unknown vulnerabilities present in said systems, including, but not limited to, the implementation of security controls, human- or electronically-enabled.

The use of this code is only endorsed by the developers in those circumstances directly related to educational environments or authorized penetration testing engagements whose declared purpose is that of finding and mitigating vulnerabilities in systems, limiting their exposure to compromises and exploits employed by malicious agents as defined in their respective threat models.

Metadata

Release files for async-port-scanner 2.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 async-port-scanner 2.0.0
File Size Uploaded
async_port_scanner-2.0.0.tar.gz 57.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for async-port-scanner 2.0.0
File Interpreter ABI Platform
async_port_scanner-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 77.9 kB

Release files / async_port_scanner-2.0.0.tar.gz

Download URL async_port_scanner-2.0.0.tar.gz
Size 57.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e3791711a163df713f9210afbdf5598f6112914d3a699b591f1bbf63bfc6106e
BLAKE2b-256 checksum
How to use checksums
ddef42c7401b916b21efca2be82fc1d5fc4b10a230ded934c884b89f96ff3827
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / async_port_scanner-2.0.0-py3-none-any.whl

Download URL async_port_scanner-2.0.0-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e14474fba0c2787c3557b1bcf1d057001fd367f76cd9c6549a35eccb5ddbfe76
BLAKE2b-256 checksum
How to use checksums
0b8f36023c0043eee03e1216090c4155bdcd826a8a87ae55486d6c42d103d665
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

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