yoroki12/simple-port-scanner

GitHub: yoroki12/simple-port-scanner

一个基于 Python 标准库的轻量级多线程 TCP 端口扫描器,用于检测目标主机开放端口并提供基础服务识别与结果报告。

Stars: 0 | Forks: 0

# 简单的端口扫描器 一个使用 Python 构建的轻量级 TCP 端口扫描器,该项目作为学习实践,旨在帮助理解网络基础知识(TCP 握手、socket 编程)和并发编程。 ## 功能 - **TCP Connect 扫描** — 使用原生 socket (`connect_ex()`) 通过完整的 TCP 握手来检测开放端口 - **多线程** — 使用 `ThreadPoolExecutor` 并发扫描多个端口,以获得更快的扫描结果 - **服务检测** — 识别开放端口上运行的常见服务(HTTP、SSH 等) - **过滤端口检测** — 区分已关闭端口(主动拒绝)和被过滤端口(无响应 / 被防火墙拦截),包括 `EAGAIN` errno 等边缘情况 - **报告生成** — 将扫描结果连同时间戳和持续时间保存到文本文件中 ## 学到了什么 构建这个项目帮助我理解了: - TCP 三次握手以及 `connect_ex()` 如何与其进行交互 - 在网络层面上,开放、关闭和被过滤的端口之间的区别 - 为什么多线程对于网络扫描等 I/O 密集型任务至关重要 - 真实世界中的边缘情况(例如,调试为什么此扫描器和 `nmap` 在 SMTP 端口 25 上显示不同的结果,追踪发现是由 ISP 级别的过滤可能引起的 `EAGAIN` errno) ## 安装 ``` git clone https://github.com/yoroki12/simple-port-scanner.git cd simple-port-scanner python3 SimplePortScanner.py ``` 无需外部依赖 — 仅使用 Python 的标准库(`socket`、`concurrent.futures`、`datetime`)。 ## 用法 运行脚本并按照提示操作: ``` python3 SimplePortScanner.py ``` 系统会提示您输入: - 目标 IP 或域名 - 要扫描的端口范围 ## 示例输出 Mulai scan: 2026-07-19 10:23:01 Port 22: OPEN (ssh) Port 80: OPEN (http) Port 25: FILTERED (errno 11) Selesai scan: 2026-07-19 10:23:03 Durasi: 0:00:02 Port OPEN: [(22, 'ssh'), (80, 'http')] Port FILTERED: [25] ## 免责声明 本工具仅出于教育目的和授权的安全测试。请仅扫描您拥有或获得明确测试许可的系统(例如 `scanme.nmap.org`,这是由 Nmap 项目专门为测试目的提供的)。未经授权的端口扫描在您所在的司法管辖区可能属于违法行为。 ## 路线图 - [ ] 通过 `argparse` 支持命令行参数 - [ ] 对 IP/域名的输入验证 - [ ] 大规模扫描的进度指示器 - [ ] 将结果导出为 JSON/CSV - [ ] Banner grabbing 以实现更深度的服务识别 ## 许可证 MIT
标签:Python, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 网络编程, 逆向工具, 隐私保护