Xpenzin/Knockoff_portscanner
GitHub: Xpenzin/Knockoff_portscanner
一个基于 Python socket 的轻量级多线程 TCP 端口扫描器,旨在帮助理解端口枚举和 TCP 连接的工作原理。
Stars: 0 | Forks: 0
# Temu_ps — 一个轻量级多线程端口扫描器
## 这是什么?
`Temu_ps` 是一个用 Python 编写的命令行端口扫描器。它可以让你检查目标 IP 地址上的特定端口是否开放,支持单个端口或指定范围的扫描。
这个项目是作为一个实践练习而创建的,旨在帮助理解 TCP 连接在 socket 层面是如何工作的。
## 用法
```
python3 Temu_ps [ip_address] [port or port range] [number of threads]
```
### 单端口扫描
```
python3 Temu_ps 192.168.1.4 80 100
```
### 范围扫描
```
python3 Temu_ps 192.168.1.4 1-500 100
```
| 参数 | 描述 |
|---|---|
| `ip_address` | 目标主机 IP 地址 |
| `port / port range` | 单个端口(例如 `80`)或使用 `-` 表示的范围(例如 `1-1024`) |
| `threads` | 工作线程数。**推荐:100–200。** 不要超过 1024 |
## 工作原理
- 每个端口都使用 `socket.connect_ex()` 进行检查,如果端口开放则返回 `0`,如果不开放则返回非零错误代码。
- **每次连接尝试**都会创建一个新的 socket —— 这是有意为之的。socket 是有状态的,不能在不同的连接之间重复使用。
- 对于范围扫描,使用 `ThreadPoolExecutor` 并发调度多个连接检查,每个线程独立工作。
## 已知的局限性及我想改进的地方
这个工具可以运行,但还没有完成。一些我已经意识到并计划改进的地方:
- **没有超时控制** —— 缓慢或无响应的主机可能会导致线程挂起且没有任何反馈
- **不支持 UDP** —— 目前仅支持通过 `connect_ex()` 进行 TCP 扫描
- **没有输入验证** —— 错误的参数会导致严重的崩溃,而不是给出有用的错误信息
## 通过构建这个项目我学到了什么
- `socket.socket()` 是如何工作的,以及为什么 socket 不能在并发连接之间共享
- Python 中位置参数和关键字参数的区别,以及 `partial` + `executor.map` 是如何交互的
- 为什么在传递多个参数时,`ThreadPoolExecutor.map()` 要求可迭代对象的长度相等
- 为什么“线程越多 = 速度越快”并不总是正确的
标签:Python, Socket编程, 学习项目, 插件系统, 数据统计, 无后门, 端口扫描, 网络工具, 逆向工具