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, 插件系统, 数据泄露防护, 数据统计, 无后门, 端口扫描, 网络安全, 网络探测, 逆向工具, 隐私保护