cfcata03/portscan

GitHub: cfcata03/portscan

一款基于 asyncio 的快速异步 TCP 端口扫描器,支持 banner 抓取、服务识别与 Rich 实时表格展示。

Stars: 0 | Forks: 0

# portscan ![Python](https://img.shields.io/badge/Python-3776AB?style=flat-square&logo=python&logoColor=white) ![asyncio](https://img.shields.io/badge/asyncio-concurrent-blue?style=flat-square) ![Rich](https://img.shields.io/badge/Rich-TUI-ff69b4?style=flat-square) ![License](https://img.shields.io/badge/License-MIT-yellow?style=flat-square) 一款快速的**异步 TCP 端口扫描器**,支持 banner 抓取和实时结果表格展示。 它利用 `asyncio` 同时开启数百个连接,识别每个开放端口上的服务,抓取 banner, 并在扫描的同时将所有数据流式传输到 Rich 表格中——这是一种对 `nmap` connect 扫描底层原理的简明、易读的实现。 ## 演示 ![portscan demo](https://static.pigsec.cn/wp-content/uploads/repos/cas/14/14b0d59726727c0496f722434b47822fd7915129ff093705391c0cf880d21513.svg) ## 功能 - **异步并发** — 通过有界 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, 插件系统, 数据泄露防护, 数据统计, 无后门, 端口扫描, 网络探测, 计算机取证, 逆向工具