cfcata03/portscan
GitHub: cfcata03/portscan
一款基于 asyncio 的快速异步 TCP 端口扫描器,支持 banner 抓取、服务识别与 Rich 实时表格展示。
Stars: 0 | Forks: 0
# portscan




一款快速的**异步 TCP 端口扫描器**,支持 banner 抓取和实时结果表格展示。
它利用 `asyncio` 同时开启数百个连接,识别每个开放端口上的服务,抓取 banner,
并在扫描的同时将所有数据流式传输到 Rich 表格中——这是一种对 `nmap` connect 扫描底层原理的简明、易读的实现。
## 演示

## 功能
- **异步并发** — 通过有界 semaphore 驱动数百个并行连接
- **Banner 抓取** — 读取服务 banner,并向 HTTP 端口发送 `HEAD` 请求以进行探测
- 通过系统服务数据库进行**服务识别**
- **实时 Rich UI** — 结果表格和进度条会随着端口的返回实时更新
- **灵活的端口指定** — 支持范围、列表、精选的 `top` 集合,或 `all` 全部 65,535 个端口
- 零重型依赖 — 除了标准库之外仅需 `rich`
## 安装
```
pip install -r requirements.txt
```
## 用法
```
python portscan.py scanme.nmap.org # scan the top ~60 ports
python portscan.py 192.168.1.1 -p 1-1024 # a port range
python portscan.py example.com -p 22,80,443,8080 # a specific list
python portscan.py 10.0.0.5 -p all -c 800 # everything, 800 at a time
```
| 标志 | 描述 |
|------|-------------|
| `-p, --ports` | `1-1024` · `22,80,443` · `top` · `all` (默认:`top`) |
| `-c, --concurrency` | 最大同时连接数 (默认:500) |
| `-t, --timeout` | 单个端口连接超时时间,以秒为单位 (默认:1.0) |
## 工作原理
每个端口都会成为一个由 `Semaphore` 保护的 `asyncio` 任务,因此扫描器可以保持最多 *N* 个正在进行的连接,而不会耗尽文件描述符。成功的 `open_connection` 会将端口标记为开放;随后扫描器会读取最多 256 字节的内容作为 banner(对于 HTTP 端口,会首先发送 `HEAD / HTTP/1.0` 以诱导响应)。结果通过 `as_completed` 收集并推送到 Rich `Live` 视图中,因此开放端口和进度会实时显示,而不是等到最后才出现。
## 环境要求
- Python 3.8+
- `rich`
标签:Asyncio, Banner抓取, Python, 插件系统, 数据泄露防护, 数据统计, 无后门, 端口扫描, 网络探测, 计算机取证, 逆向工具