Harischandra18/tcp-port-scanner-multithreaded
GitHub: Harischandra18/tcp-port-scanner-multithreaded
一款基于 Python 标准库的多线程 TCP 端口扫描器,专注于轻量、可靠的服务探测与横幅识别。
Stars: 0 | Forks: 0
# 🔍 TCP 端口扫描器
## 📌 描述
**TCP 端口扫描器**是一款基于 Python 的安全工具,使用并发线程扫描目标主机的开放 TCP 端口,识别运行中的服务,并尝试抓取服务横幅以进行指纹识别。该工具完全基于 Python 标准库构建,零外部依赖。
此工具设计为准确、快速且易于使用,适用于执行授权网络评估的渗透测试人员、系统管理员和安全研究人员。
## ✨ 功能特性
- **TCP 连接扫描** — 使用完整的 TCP 握手进行可靠的开放端口检测
- **多线程引擎** — 可配置的线程池(`ThreadPoolExecutor`)实现高速扫描
- **横幅抓取** — 从开放端口获取服务横幅以识别软件/版本
- **服务指纹识别** — 将 60 多个知名端口映射为服务名称
- **简洁 CLI 接口** — 由 `argparse` 提供支持,包含实用的标志和使用示例
- **文件输出** — 可选择将结果导出为结构化的 `.txt` 报告
- **健壮的错误处理** — 优雅处理不可达主机、超时和无效输入
- **零依赖** — 仅使用 Python 标准库(`socket`、`concurrent.futures`、`argparse`)
## 🛠 技术栈
| 组件 | 技术 |
|---------------|----------------------------------------|
| 语言 | Python 3.8+ |
| 并发 | `concurrent.futures.ThreadPoolExecutor` |
| 网络 | `socket`(TCP 连接) |
| CLI | `argparse` |
| 数据建模 | `dataclasses` |
## 📦 安装
### 先决条件
- Python 3.8 或更高版本
### 步骤
```
# 克隆仓库
git clone https://github.com/yourusername/tcp-port-scanner.git
cd tcp-port-scanner
# (可选)创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
# 无需安装依赖 — 仅标准库
# 但您可以验证:
python3 -c "import socket, concurrent.futures, argparse; print('All good!')"
# 使脚本可执行(Linux/macOS)
chmod +x main.py
```
## 🚀 使用方法
### 基本语法
```
python3 main.py --target [OPTIONS]
```
### 可用参数
| 标志 | 类型 | 默认值 | 描述 |
|------------------|---------|--------|-------------------------------|
| `--target` | string | — | 目标 IP 地址或域名(必需) |
| `--start-port` | int | 1 | 扫描范围的起始端口 |
| `--end-port` | int | 1024 | 扫描范围的结束端口 |
| `--threads` | int | 100 | 并发线程数量 |
| `--timeout` | float | 1.0 | 每个端口的套接字超时(秒) |
| `--output` | string | None | 将结果保存到文件 |
| `--no-banner` | flag | False | 禁用横幅抓取(更快) |
### 示例命令
```
# 扫描域名的前 1024 个端口
python3 main.py --target scanme.nmap.org --start-port 1 --end-port 1024
# 使用激进线程的完整端口扫描
python3 main.py --target 192.168.1.1 --start-port 1 --end-port 65535 --threads 500 --timeout 0.5
# 无横幅抓取的快速扫描
python3 main.py --target 10.0.0.1 --start-port 1 --end-port 1024 --no-banner
# 扫描特定范围并保存到文件
python3 main.py --target example.com --start-port 20 --end-port 443 --output results.txt
# 缓慢且彻底的扫描(低线程,高超时)
python3 main.py --target 172.16.0.5 --start-port 1 --end-port 65535 --threads 50 --timeout 3.0
```
## 📊 示例输出
```
============================================================
TCP Port Scanner
============================================================
Target : scanme.nmap.org (45.33.32.156)
Ports : 1 - 1024
Threads : 100
Timeout : 1.0s
Banners : Yes
============================================================
Scanning 1024 ports...
[+] Port 22 OPEN SSH
[+] Port 80 OPEN HTTP
[+] Port 443 OPEN HTTPS
Progress: 1024/1024 ports scanned (312 ports/sec)
Completed in 3.28s
PORT STATUS SERVICE BANNER
-------- ---------- -------------------- ----------------------------------------
22 OPEN SSH SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.13
80 OPEN HTTP HTTP/1.0 404 Not Found | Content-Type: tex...
443 OPEN HTTPS -
Scan complete. 3 open port(s) found.
```
### 文件输出(`results.txt`)
```
TCP Port Scan Report
============================================================
Target : scanme.nmap.org (45.33.32.156)
Port Range : 1 - 1024
Timestamp : 2025-09-01 14:32:05
Open Ports : 3
============================================================
PORT STATUS SERVICE BANNER
-------- ---------- -------------------- ----------------------------------------
22 OPEN SSH SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.13
80 OPEN HTTP HTTP/1.0 404 Not Found | Content-Type: tex...
443 OPEN HTTPS -
```
## 🗂 项目结构
```
port_scanner/
│
├── main.py # Entry point: CLI parsing and scan orchestration
│
├── scanner/
│ ├── __init__.py # Package initializer
│ ├── scanner.py # PortScanner class with ThreadPoolExecutor engine
│ ├── banner.py # Banner grabbing with protocol-aware probing
│ └── utils.py # Host resolution, validation, formatting, file output
│
├── requirements.txt # No external dependencies
└── README.md # Project documentation
```
## 🔮 后续改进
- **UDP 扫描** — 新增 UDP 端口扫描模式
- **操作系统指纹识别** — 通过 TTL 和 TCP 窗口大小估算目标操作系统
- **CVE 查询** — 将检测到的服务版本与 CVE 数据库进行交叉引用
- **JSON/CSV 输出** — 支持结构化导出格式,便于流水线集成
- **异步引擎** — 使用 `asyncio` 替代 `ThreadPoolExecutor` 以提高吞吐量
- **速率限制/规避** — 添加扫描节流和随机端口顺序以避免 IDS 检测
- **GUI 仪表盘** — 使用 `rich` 或 `curses` 实现终端 UI,提供实时扫描可视化
- **CI/CD 流水线** — 添加 GitHub Actions 并使用 `pytest` 为核心模块编写单元测试
## ⚠️ 免责声明
## 📄 许可证
MIT 许可证 — 详情见 `LICENSE`。
标签:argparse, dataclasses, Linux工具, Python 3.8, Python标准库, Python网络编程, Qt框架, Scrypt密钥派生, SEO:Python安全工具, SEO:端口扫描工具, SEO:网络安全工具, socket编程, sysadmin工具, TCP Connect扫描, TCP端口扫描, ThreadPoolExecutor, 云存储安全, 并发编程, 报告导出, 授权评估, 文件输出, 服务指纹识别, 服务识别, 横幅抓取, 端口探测, 端口映射, 线程池, 网络扫描, 逆向工具, 错误处理, 零依赖