StevenRyckeley/Port-Scanner

GitHub: StevenRyckeley/Port-Scanner

一个用于教育目的的轻量级Python TCP端口扫描器,可快速识别目标主机上11个常见服务端口的开放状态。

Stars: 0 | Forks: 0

# 端口扫描器 一个轻量级的 Python TCP 端口扫描器,用于识别目标主机上的开放服务。构建为网络安全作品集的一部分,旨在演示网络基础、Socket 编程和侦察概念。 ## 功能 - 扫描 11 个常见的知名端口(IANA 定义的范围 0–1023) - 识别关联的服务名称(SSH、HTTP、RDP 等) - 接受通过命令行参数指定的可选目标主机 - 显示清晰的开放/关闭摘要及最终计数 - 无外部依赖 —— 仅使用标准库 ## 扫描端口 | 端口 | 服务 | 说明 | |------|---------|-------| | 21 | FTP | 未加密的文件传输 | | 22 | SSH | 加密的远程登录 | | 23 | Telnet | 传统的未加密远程登录 | | 25 | SMTP | 发送邮件 | | 53 | DNS | 主机名解析 | | 80 | HTTP | 未加密的 Web 流量 | | 110 | POP3 | 接收邮件检索 | | 143 | IMAP | 邮件管理 | | 443 | HTTPS | 加密的 Web 流量 (TLS) | | 445 | SMB | Windows 文件/打印机共享 | | 3389 | RDP | Windows 远程桌面 | ## 使用方法 ``` # 扫描 localhost(默认) python port_scanner.py # 扫描特定主机 python port_scanner.py 192.168.1.1 python port_scanner.py example.com ``` ### 示例输出 ``` Scanning target: localhost ---------------------------------------- [OPEN] Port 22 (SSH) [CLOSED] Port 80 (HTTP) [OPEN] Port 443 (HTTPS) ... ---------------------------------------- Scan complete: 2/11 ports open on localhost ``` ## 工作原理 扫描器使用 Python 内置的 `socket` 模块,通过 `connect_ex()` 尝试在每个端口上建立 **TCP 连接** (`SOCK_STREAM`)。与 `connect()` 不同,`connect_ex()` 返回错误代码而不是抛出异常 —— `0` 表示端口接受了连接(开放),任何非零值表示连接被拒绝或超时(关闭/被过滤)。 1 秒的超时时间可防止扫描器在静默丢弃数据包的防火墙端口上停滞。 ## 演示概念 - **TCP/IP 基础** — 理解面向连接与无连接协议的区别 - **Socket 编程** — 使用 `AF_INET` / `SOCK_STREAM` 进行 IPv4 TCP Socket 操作 - **网络侦察** — 端口扫描作为枚举的第一阶段 - **资源管理** — 显式关闭 Socket 以释放 OS 文件描述符 - **IANA 知名端口** — 了解标准化的服务到端口映射 ## 免责声明 此工具仅用于**教育和授权测试目的**。在扫描任何你不拥有的主机之前,请务必获得明确的许可。未经授权的端口扫描可能违反当地法律和网络策略。 ## 未来改进 - [ ] 多线程以加快大范围端口的扫描速度 - [ ] 使用 `-p` 标志支持全端口范围扫描 (1–65535) - [ ] UDP 端口扫描支持 - [ ] 将结果导出为 CSV 或 JSON - [ ] Banner 抓取以指纹识别服务版本 - [ ] 与 MITRE ATT&CK 集成 —— 将开放端口映射到相关技术(例如,T1046 网络服务发现)
标签:Python, Qt框架, RDP, SMB, SSH, TCP连接, 协议分析, 套接字编程, 密码管理, 插件系统, 数据统计, 无后门, 服务识别, 权限提升, 标准库, 漏洞扫描辅助, 端口扫描, 网络安全, 网络工具, 逆向工具, 错误配置检测, 隐私保护