raghubirrajmahato15/HackDev-PortScanner
GitHub: raghubirrajmahato15/HackDev-PortScanner
一款基于 asyncio 的零依赖 Python 异步端口扫描器,支持 TCP 端口探测、banner 抓取和服务指纹识别。
Stars: 0 | Forks: 0
# HackDev-PortScanner
带有 banner 抓取和服务指纹识别功能的异步 TCP 端口扫描器,是 [HackDev](https://github.com/raghubirrajmahato15) 网络安全工具包的一部分。
HackDev-PortScanner 是一个基于 `asyncio` 构建的快速、无依赖的 Python 端口扫描器。它可以根据灵活的端口规范扫描单个主机或整个 CIDR 范围,从开放端口抓取 banner,并根据内置的端口到服务映射表推测运行中的服务。并发性受 semaphore 限制,并且可以对连接尝试进行速率限制,以针对敏感目标保持礼貌(或隐蔽)。
## 功能
- 基于 Asyncio 的并发 TCP 扫描,具有可配置的连接池 (`--threads`)
- 目标:单个主机/IP 或 CIDR 范围(例如 `10.0.0.0/24`),通过 Python 的 `ipaddress` 模块进行扩展
- 灵活的端口规范:支持范围和逗号分隔列表,例如 `1-1024,8080,8443,8888`
- 针对每个开放端口进行 banner 抓取,对常见的 Web 端口使用最小的 HTTP 探测,尽最大努力进行解码
- 内置端口 -> 服务名称指纹识别表(默认回退为 `unknown`)
- 令牌桶速率限制 (`--rate`) 以限制每秒的连接尝试次数
- 针对每个连接的超时控制 (`--timeout`, `--banner-timeout`)
- 文本(人类可读表格)和 JSON 输出格式,可通过 `-o/--output` 输出到文件
- 通过 `logging` 模块进行结构化日志记录(不使用裸露的 `print()` 来输出状态/错误)
- 在所有代码路径中妥善清理 asyncio stream writers/readers
## 安装说明
需要 Python 3.10+。无第三方依赖。
```
git clone https://github.com/raghubirrajmahato15/HackDev-PortScanner.git
cd HackDev-PortScanner
pip install -r requirements.txt # no-op, stdlib only
```
## 用法
扫描单个主机上的默认端口集(1-1024 以及常见的 Web 端口):
```
python portscan.py 192.168.1.10
```
扫描特定端口范围以及几个额外的端口,并启用详细日志记录:
```
python portscan.py scanme.example.com -p 1-1024,8080,8443,8888 -v
```
以更高的并发和速率上限扫描整个子网,并将 JSON 结果输出到文件:
```
python portscan.py 10.0.0.0/24 -p 22,80,443,3389 --threads 500 --rate 200 --format json -o results.json
```
为快速的本地网络扫描设置更短的超时时间:
```
python portscan.py 192.168.1.0/24 -p 1-65535 --timeout 1 --banner-timeout 0.5 --threads 1000
```
### 文本输出示例
```
HOST PORT STATE SERVICE BANNER
-------------------------------------------
192.168.1.10 22 open ssh SSH-2.0-OpenSSH_9.6
192.168.1.10 80 open http HTTP/1.1 200 OK Server: nginx/1.24.0
Scan complete: 2 open port(s) found across 1 host(s) in 1.42s.
```
### JSON 输出示例
```
[
{
"host": "192.168.1.10",
"port": 22,
"state": "open",
"service": "ssh",
"banner": "SSH-2.0-OpenSSH_9.6"
}
]
```
## CLI 标志参考
| 标志 | 默认值 | 描述 |
|---|---|---|
| `target` (位置参数) | — | 要扫描的主机、IP 地址或 CIDR 范围 |
| `-p`, `--ports` | `1-1024,8080,8443,8888` | 端口规范:范围和/或逗号分隔的列表 |
| `-o`, `--output` | stdout | 将结果写入文件而不是 stdout |
| `--format` | `text` | 输出格式:`text` 或 `json` |
| `-v`, `--verbose` | 关闭 | 启用详细(debug)日志记录 |
| `--threads` | `200` | 最大并发连接尝试数 |
| `--timeout` | `3` | 每个连接的超时时间(秒) |
| `--banner-timeout` | `2` | 连接后读取 banner 的超时时间(秒) |
| `--rate` | `0` | 每秒最大连接尝试次数(0 = 不限制) |
## 法律声明
此工具**仅供授权的安全测试使用**——即您拥有的系统,或您拥有明确书面测试许可的系统。未经授权扫描网络或主机可能会违反《计算机欺诈和滥用法》(美国)、《计算机滥用法》(英国)或您所在司法管辖区的同等法律。作者和贡献者对滥用本软件的行为不承担任何责任。
标签:Python, 异步编程, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 计算机取证, 逆向工具, 隐私保护