koushikchowdary6/tcp-port-scanner

GitHub: koushikchowdary6/tcp-port-scanner

一个基于纯 Python 标准库实现的并发 TCP 端口扫描器,支持 banner 抓取、服务标签识别和 JSON 输出,无需第三方依赖。

Stars: 0 | Forks: 0

# TCP 端口扫描器 🌐🔎 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](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端口扫描, 动态分析, 安全规则引擎, 并发扫描, 插件系统, 网络工具, 逆向工具