koushikchowdary6/tcp-port-scanner
GitHub: koushikchowdary6/tcp-port-scanner
一个基于纯 Python 标准库实现的并发 TCP 端口扫描器,支持 banner 抓取、服务标签识别和 JSON 输出,无需第三方依赖。
Stars: 0 | Forks: 0
# TCP 端口扫描器 🌐🔎
[](https://github.com/koushikchowdary6/tcp-port-scanner/actions/workflows/ci.yml)
一个快速、并发的 **TCP 端口扫描器**,支持服务 banner 抓取,仅使用纯 Python 标准库编写——无需 root 权限,无第三方依赖。通过线程池扫描主机,并针对每个开放端口,尝试读取简短的服务 banner 并标记已知服务。
## 功能
- 通过可配置的线程池进行并发扫描
- 灵活的端口规范:`22,80,443` 或范围 `8000-8100` 或内置的常用端口列表
- Banner 抓取 + 已知服务标记(ssh、http、mysql、redis 等)
- 支持 JSON 输出,便于通过管道传递给其他工具
- 完全经过单元测试,包含实时 localhost 服务器 fixture
## 用法
```
python src/port_scanner.py 127.0.0.1 # common ports
python src/port_scanner.py 127.0.0.1 --ports 22,80,8000-8100
python src/port_scanner.py example.com --ports 1-1024 --json
python src/port_scanner.py 10.0.0.5 --timeout 0.5 --workers 200
```
示例:
```
Scanned 26 ports on 127.0.0.1 — 2 open
22/tcp (ssh)
banner: SSH-2.0-OpenSSH_9.0
6379/tcp (redis)
```
## 测试
```
pip install pytest && python -m pytest tests/ -v
```
9 个测试覆盖了端口规范解析(包括无效输入),并针对一次性 localhost 服务器对扫描器本身进行了测试——包括开放端口检测、banner 读取以及关闭端口处理。
## 工作原理
每个端口通过非阻塞的 `connect_ex` 进行检查;开放端口会进行短暂的 `recv` 以获取 banner。`concurrent.futures.ThreadPoolExecutor` 将任务分发执行,因此尽管存在每个 socket 的超时限制,大规模扫描也能快速完成。
## 作者
Koushik Chowdary — [LinkedIn](https://linkedin.com/in/koushik-chowdary) · [GitHub](https://github.com/koushikchowdary6)
标签:Banner抓取, Python标准库, TCP端口扫描, 动态分析, 安全规则引擎, 并发扫描, 插件系统, 网络工具, 逆向工具