Mason-021/A_Multithreaded_TCP_Port_Scanner
GitHub: Mason-021/A_Multithreaded_TCP_Port_Scanner
一个纯 Python 编写的多线程 TCP 端口扫描器,通过队列调度并发任务并支持服务 Banner 抓取,用于高效探测目标网络端口开放情况。
Stars: 0 | Forks: 0
# 具有服务 Banner 抓取功能的多线程 Python 端口扫描器
一个完全使用 Python 编写的高性能多线程 TCP 端口扫描器。该扫描器支持扫描单个主机、主机名、IP 范围和 CIDR 网络,同时通过 banner grabbing 执行基本的服务检测。
# 功能
* 扫描单个 IP 地址
* 扫描主机名(DNS 解析由操作系统自动处理)
* 扫描 IP 范围
* 扫描整个 CIDR 网络
* 扫描:
* 单个端口(例如 80)
* 多个逗号分隔的端口(例如 21,22,80,443)
* 端口范围(例如 1-1024)
* 使用 Python 的 `threading` 模块进行多线程扫描
* 使用 `queue.Queue` 进行线程安全的任务调度
* 使用 `threading.Lock` 进行线程安全的终端输出
* TCP Connect 扫描
* 服务 banner grabbing
* 基本的 HTTP 服务检测
* 可选择将扫描结果记录到文本文件中
* 优雅的异常处理和自动资源清理
# 使用的技术
* Python 3
* socket
* threading
* queue
* argparse
* ipaddress
不需要任何第三方库。
# 项目结构
A_Multithreaded_TCP_Port_Scanner.py
├── parse_ports()
│ 解析单个端口、逗号分隔的端口和范围。
│
├── parse_targets()
│ 解析:
│ • 单个 IP 地址
│ • 主机名
│ • CIDR 网络
│ • IP 范围
│
├── worker()
│ Worker 线程负责:
│ • 获取扫描任务
│ • 连接到目标端口
│ • 执行 banner grabbing
│ • 记录扫描结果
│
└── main()
通过以下方式协调应用程序:
• 解析参数
• 构建任务队列
• 启动 worker 线程
• 等待直到所有扫描完成
# 安装说明
克隆仓库:
```
git clone https://github.com//.git
```
进入项目目录:
```
cd
```
# 运行扫描器:
```
python3 A_Multithreaded_TCP_Port_Scanner.py [OPTIONS]
```
# 必需参数
| 参数 | 描述 | 示例 |
|----------|-------------|---------|
| `-t`, `--target` | 目标 IP、主机名、CIDR 块或 IP 范围 | `-t scanme.nmap.org` |
| `-p`, `--port` | 要扫描的端口(单个、逗号分隔或范围) | `-p 22,80,443` |
### 可选参数
| 参数 | 描述 | 默认值 |
| ---------------- | ----------------------------------- | -------- |
| `--threads` | 并发 worker 线程数 | `50` |
| `-o`, `--output` | 将扫描结果保存到文本文件 | 禁用 |
### 基础示例
```
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t scanme.nmap.org \
-p 22,80,443
# 使用示例
## 扫描单个 IP
```bash
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t 192.168.1.15 \
-p 22,80,443
## 扫描 hostname
```bash
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t scanme.nmap.org \
-p 22,80
## 扫描 CIDR 网络
```bash
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t 192.168.1.0/24 \
-p 22
## 扫描 IP 范围
```bash
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t 192.168.1.10-192.168.1.50 \
-p 80,443
## 扫描端口范围
```bash
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t scanme.nmap.org \
-p 1-1024
## 将结果保存到文件
```bash
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t scanme.nmap.org \
-p 22,80 \
-o results.txt
## 增加 worker 线程
```bash
python3 A_Multithreaded_TCP_Port_Scanner.py \
-t 192.168.1.0/24 \
-p 22 \
--threads 100
# 示例输出
[*] Total target IP addresses detected: 1
[*] Ports to scan on each target: [21, 22, 80, 443]
[*] Total individual scan tasks queued: 4
[*] Initializing 4 background workers...
[-] Port closed: scanme.nmap.org --> 21
[+] Found open port: scanme.nmap.org --> Port: 22 | Banner: SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.13
[+] Found open port: scanme.nmap.org --> Port: 80 | Banner: HTTP/1.1 400 Bad Request
[-] Port closed: scanme.nmap.org --> 443
[!] Complete network scan finished.
```
# 工作原理
## 1. 解析目标
扫描器接受多种目标格式:
* 单个 IP
* 主机名
* CIDR 网络
* IP 范围
每个有效目标都会成为一个独立的扫描目标。
## 2. 解析端口
端口可以指定为:
80
22,80,443
1-1024
这些将被转换为整数列表。
## 3. 构建任务队列
以下每个组合:
目标 IP
+
目标端口
都会成为一个独立的扫描任务。
示例:
192.168.1.10 → 22
192.168.1.10 → 80
192.168.1.11 → 22
192.168.1.11 → 80
每个任务都存储在一个线程安全的队列中。
## 4. Worker 线程
多个 worker 线程同时运行。
每个 worker:
* 从队列中获取一个任务
* 尝试 TCP 连接
* 检测端口是否开放
* 尝试 banner grabbing
* 打印结果
* 标记任务完成
Worker 会一直运行,直到队列为空。
## 5. Banner Grabbing
如果连接成功:
扫描器首先等待服务发送标识 banner。
示例:
SSH-2.0-OpenSSH...
220 FTP Server Ready
220 mail.example.com ESMTP
如果没有收到 banner(在 HTTP 服务器中很常见),扫描器会发送一个最小的 HTTP 请求:
GET / HTTP/1.1
并读取即时响应。
示例:
HTTP/1.1 400 Bad Request
这足以将该服务识别为 HTTP。
# 线程模型
扫描器遵循生产者–消费者架构。
主线程
│
▼
创建扫描任务
│
▼
线程安全队列
│
▼
多个 Worker 线程
│
▼
连接 → 抓取 banner → 打印 → 任务完成
这使得数十个扫描任务可以并发执行,同时使用线程锁保持输出同步。
# 当前限制
* 仅支持 TCP Connect 扫描
* 无 UDP 扫描
* 无 SYN(半开)扫描
* 无 OS 指纹识别
* 无服务指纹数据库
* HTTP 探测使用最小请求,在某些服务器上可能返回 `400 Bad Request`
* 仅支持 IPv4
# 未来改进
可能的增强功能包括:
* UDP 扫描
* SYN 扫描
* IPv6 支持
* 彩色终端输出
* 进度指示器
* 服务版本指纹识别
* 导出 JSON 和 CSV
* XML 输出
* 扫描计时统计
* 自定义 HTTP 请求标头
* 从命令行自定义超时
# 教育目标
本项目演示了以下内容的实际应用:
* Python socket 编程
* 多线程
* 线程同步
* 生产者–消费者架构
* TCP 网络
* Banner grabbing
* 并发任务调度
* 异常处理
* 资源管理
# 免责声明!!
本项目仅用于教育目的和授权的安全测试。
仅扫描您拥有或获得明确许可进行评估的系统。未经授权的网络扫描可能违反组织政策、服务协议或适用法律。
标签:Python, 插件系统, 数据泄露防护, 数据统计, 无后门, 端口扫描, 网络安全, 网络探测, 逆向工具, 隐私保护