Ashnoor0712/pyscan
GitHub: Ashnoor0712/pyscan
PyScan 是一个基于 Python 的多线程 TCP 端口扫描器,支持 banner 抓取与结果导出,帮助用户快速发现开放端口及服务信息。
Stars: 0 | Forks: 0
# PyScan
一个多线程 TCP 端口扫描器,支持 banner 抓取和 JSON/CSV 导出,使用 Python 从零构建。
## 功能
- **多线程扫描** — 使用 `ThreadPoolExecutor` 并发扫描端口,而不是逐一扫描
- **Banner 抓取** — 尝试通过读取服务响应来识别开放端口上运行的内容(对于 Web 服务,带有 HTTP 请求回退机制)
- **通过 CLI 配置** — 目标、端口范围和线程数均作为参数传递
- **导出结果** — 将扫描结果保存为 JSON 或 CSV
## 用法
```
python3 pyscan.py -t -p --threads -o
```
### 参数
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-t`, `--target` | 目标 IP 或主机名(必填) | — |
| `-p`, `--ports` | 要扫描的端口范围,例如 `1-1024` | `1-1024` |
| `--threads` | 并发线程数 | `100` |
| `-o`, `--output` | 将结果保存到文件(`.json` 或 `.csv`) | 无 |
### 示例
在默认端口范围扫描 localhost:
```
python3 pyscan.py -t 127.0.0.1
```
使用更多线程扫描更宽的范围:
```
python3 pyscan.py -t 127.0.0.1 -p 1-8100 --threads 200
```
扫描并将结果导出为 JSON:
```
python3 pyscan.py -t 127.0.0.1 -p 1-8100 -o results.json
```
## 示例输出
Scanning 127.0.0.1 ...
Port 8000 is OPEN - HTTP/1.0 200 OK
Scan finished.
Results saved to results.json
## 工作原理
对于指定范围内的每个端口,PyScan 会打开一个 TCP socket 并尝试连接。如果连接成功,它会尝试从服务中读取 banner —— 如果没有立即返回任何内容(这对于 Web 服务器很常见),它会发送一个最小的 HTTP `HEAD` 请求来提示响应。所有开放端口及其 banner 都会被收集,并可选择写入 JSON 或 CSV 文件。
## 路线图
- 支持 UDP 扫描
- 超出基本 HTTP banner 的服务指纹识别
- 用于大规模扫描的进度条
标签:Python, 插件系统, 数据泄露防护, 数据统计, 文档结构分析, 无后门, 端口扫描, 网络探测, 逆向工具