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编程, 学习项目, 插件系统, 数据统计, 无后门, 端口扫描, 网络工具, 逆向工具