A fast, multi-threaded TCP port scanner written in Python that scans for open ports and attempts to grab service banners (“manners”). Built using only the Python standard library and designed for clean, readable terminal output.
███████╗ █████╗ ██╗ ██╗██╗██╗ ██╗ ██████╗
██╔════╝██╔══██╗██║ ██║██║██║ ██╔╝██╔═══██╗
███████╗███████║███████║██║█████╔╝ ██║ ██║
╚════██║██╔══██║██╔══██║██║██╔═██╗ ██║ ██║
███████║██║ ██║██║ ██║██║██║ ██╗╚██████╔╝
╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═════╝
Port Scanner & Banner Grabber
- Multi-threaded TCP port scanning
- Banner (service response) grabbing
- Uses
ThreadPoolExecutor(max 100 threads) - Colorized terminal output
- Displays:
- Open port number
- Detected service name (if available)
- First response line from the service
- No third-party dependencies
- Python 3.7 or higher
- Works on Linux, macOS, and Windows (ANSI color support required)
python scanner.py <host> <start_port> <end_port>Scan default ports (1–1024):
python scanner.py example.comScan a custom range:
python scanner.py 192.168.1.1 20 500[+] Port 22 | ssh | SSH-2.0-OpenSSH_8.2p1
[+] Port 80 | http | HTTP/1.1 200 OK
[+] Port 443 | https | Connected (No Manner)
- Resolves the target hostname to an IP address
- Iterates through the specified port range
- Uses a thread pool to scan ports concurrently
- For each open port:
- Attempts to identify the service using
getservbyport - Sends a basic HTTP GET request to grab a banner
- Attempts to identify the service using
- Prints results in real time
- Banner grabbing uses a simple HTTP request
- Non-HTTP services may not return meaningful data
- Closed or filtered ports are silently ignored
- This is not a stealth scanner
- Intended for learning and basic reconnaissance
This tool is intended for educational purposes and authorized testing only.
Scanning systems or networks without permission may be illegal.
Use responsibly.
MIT License