thisasg-dev/Network-Port-Scanner

GitHub: thisasg-dev/Network-Port-Scanner

一款零外部依赖的 Python 多线程端口扫描器,提供 GUI 与 CLI 双界面,可快速发现开放端口、识别服务并抓取 Banner。

Stars: 1 | Forks: 0

# 🔍 网络端口扫描器 一个基于 Python 的综合网络端口扫描器,提供 CLI 和 GUI 双界面。扫描任何设备上的开放端口,以发现服务并评估网络安全。 ## ✨ 功能特性 ### 🎯 核心功能 - ✅ IP 地址验证和主机名解析 - ✅ 自定义端口范围选择 - ✅ 多线程扫描,实现极速性能 - ✅ 开放端口检测及服务识别 - ✅ 精确的扫描耗时测量 ### ⚡ 进阶功能 - ✅ 服务名称检测(SSH、HTTP、FTP 等) - ✅ 快速扫描(常用端口)和全端口扫描(1-65535)模式 - ✅ 全面的错误处理机制 - ✅ 实时进度显示 - ✅ 线程数优化 - ✅ 自定义 socket 超时时间 ### 🔥 高级功能 - ✅ 从开放端口获取 Banner 信息 - ✅ 主机名/反向 DNS 查询 - ✅ 将扫描结果保存至文件 - ✅ 基于 tkinter 的 GUI 界面 - ✅ 多线程架构 - ✅ 服务映射数据库 ## 📂 项目结构 ``` port_scanner/ │ ├── main.py # CLI interface ├── gui.py # GUI interface (tkinter) ├── scanner.py # Core scanning engine ├── utils.py # Utility functions ├── requirements.txt # Dependencies └── README.md # This file ``` ## 🚀 快速入门 ### 前置条件 - Python 3.7 或更高版本 - 无需外部依赖(仅使用标准库) ### 安装说明 1. **克隆或下载项目:** ``` cd port_scanner ``` 2. **验证 Python 安装:** ``` python --version ``` ## 📱 用法 ### CLI 版本(命令行) 运行 CLI 扫描器: ``` python main.py ``` **交互式提示:** 1. 输入目标 IP 地址(例如:127.0.0.1 或 localhost) 2. 选择扫描模式: - 快速扫描(常用端口) - 全端口扫描(1-65535) - 自定义范围 - 指定端口 3. 配置超时时间和线程数 4. 查看结果并选择是否保存 **示例:** ``` Enter target IP: 127.0.0.1 [OPEN] Port 22 → SSH [OPEN] Port 80 → HTTP [OPEN] Port 443 → HTTPS Scan completed in 1.8 seconds ``` ### GUI 版本(图形界面) 运行 GUI 扫描器: ``` python gui.py ``` **功能:** - 📡 用于配置的扫描器选项卡 - 📊 用于查看扫描结果的结果选项卡 - ℹ️ 包含帮助信息的关于选项卡 - 🎨 井然有序的选项卡界面 - 💾 保存和复制功能 ## 🔧 配置选项 ### 扫描模式 **⚡ 快速扫描:** - 最快的方法 - 仅扫描常用端口 - 适用于初步侦察 - 端口:21, 22, 80, 443, 3306, 3389, 5900, 8080 等 **🔥 全端口扫描:** - 完整的端口枚举 - 扫描所有 65535 个端口 - 最慢但最全面 - 可能需要几分钟时间 **🎯 自定义范围:** - 用户自定义的端口范围 - 速度与覆盖范围之间的平衡 - 示例:1-1024 用于扫描知名端口 **🔨 指定端口:** - 扫描确切的端口 - 格式:22,80,443,8080-8090 - 最适合针对性扫描,效率最高 ### 高级选项 ``` timeout=1 # Socket timeout in seconds (0.1-10) threads=50 # Number of concurrent threads (1-200) banner=True # Enable service banner grabbing ``` ## 📊 输出示例 ### 扫描成功 ``` ============================================================ 🔍 PORT SCANNER ============================================================ Target: 127.0.0.1 (127.0.0.1) Scanning ports: 1 - 1024 Threads: 50 ============================================================ [OPEN PORTS FOUND: 3] [OPEN] Port 22 → SSH └─ OpenSSH_7.4 (protocol 2.0) [OPEN] Port 80 → HTTP └─ Apache/2.4.6 (CentOS) [OPEN] Port 443 → HTTPS └─ Apache/2.4.6 (CentOS) ============================================================ ⏱️ Scan completed in 2.34 seconds 📊 Total ports scanned: 1024 🎯 Open ports: 3 ============================================================ ``` ### 无结果 ``` ❌ No open ports found. Scan completed in 1.2 seconds Total ports scanned: 1024 ``` ## 🔐 常用端口参考 | 端口 | 服务 | 描述 | |------|---------|-------------| | 21 | FTP | 文件传输协议 | | 22 | SSH | 安全外壳协议 | | 23 | Telnet | 远程登录 | | 25 | SMTP | 电子邮件发送 | | 53 | DNS | 域名系统 | | 80 | HTTP | Web 服务器 | | 110 | POP3 | 电子邮件检索 | | 143 | IMAP | 电子邮件协议 | | 443 | HTTPS | 安全 Web | | 445 | SMB | 文件共享 | | 3306 | MySQL | 数据库 | | 3389 | RDP | 远程桌面 | | 5432 | PostgreSQL | 数据库 | | 5900 | VNC | 远程查看器 | | 8080 | HTTP-Alt | 备用 Web | | 27017| MongoDB | NoSQL 数据库 | | 6379 | Redis | 缓存服务器 | ## ⚠️ 重要法律声明 ### ✅ 合法使用: - **仅扫描您自己的系统** - 扫描**已授权的实验室环境** - 扫描**您拥有或已获准测试的网络** - 用于**网络安全教育与培训** - 用于**授权的安全评估** ### ❌ 非法使用: - 未经许可扫描**未知/公共系统** - 扫描**他人的网络** - 未经授权的**安全测试** - **出于恶意目的的端口扫描** - 违反**计算机欺诈和滥用法案 (CFAA)** **未经授权使用此工具可能会导致:** - 刑事指控 - 民事责任 - 监禁 - 罚款 ## 💡 提示与技巧 ### 性能提示 1. **首先使用快速扫描** - 快速识别服务 2. **调整线程数** - 增加到 100+ 以加快扫描速度 3. **减少超时时间** - 在响应迅速的网络上速度更快 4. **扫描特定范围** - 避免不必要的端口检查 ### 故障排除 **"Invalid IP address"(无效的 IP 地址)** - 验证 IP 格式:XXX.XXX.XXX.XXX - 或使用主机名:localhost, example.com **"Connection refused"(连接被拒绝)** - 关闭端口的正常响应 - 无需采取任何操作 **"Permission denied"(权限被拒绝)** - 在 Windows 上:以管理员身份运行 - 在 Linux/Mac 上:使用 `sudo python3 main.py` **扫描速度慢** - 增加线程数 - 减少 socket 超时时间 - 使用快速扫描模式 - 缩小端口范围 ## 🎓 学习成果 通过使用此项目,您将学到: - ✅ 网络和 TCP/IP 的工作原理 - ✅ Python 中的 Socket 编程 - ✅ 多线程概念 - ✅ 端口扫描技术 - ✅ 服务识别 - ✅ 网络安全基础知识 - ✅ 网络侦察 - ✅ 道德黑客概念 ## 🛠️ 开发 ### 代码结构 **scanner.py** - 核心扫描逻辑 ``` PortScanner # Main scanner class ├── scan_port() # Single port scan ├── start_scan() # Multi-threaded scanning ├── display_results() └── save_results() QuickScan # Pre-configured quick scan FullScan # Pre-configured full scan ``` **utils.py** - 实用工具函数 ``` validate_ip() # IP validation get_service_name() # Service lookup banner_grab() # Banner grabbing get_hostname() # Reverse DNS lookup parse_port_range() # Port range parsing ``` **main.py** - CLI 界面 ``` print_banner() # Display header get_ip_input() # Input validation get_port_range_input() get_scan_options() ``` **gui.py** - GUI 实现 ``` PortScannerGUI # Main GUI class ├── setup_ui() ├── setup_scan_tab() ├── setup_results_tab() └── _perform_scan() ``` ### 项目扩展 1. **添加 nmap 集成:** ``` import subprocess subprocess.run(['nmap', '-p', ports, target]) ``` 2. **添加数据库日志记录:** ``` import sqlite3 conn = sqlite3.connect('scans.db') ``` 3. **添加调度功能:** ``` from apscheduler.schedulers.background import BackgroundScheduler scheduler.add_job(scan_network, 'cron', day_of_week='mon-fri', hour=9) ``` 4. **添加 Web 界面:** ``` from flask import Flask app = Flask(__name__) @ app.route('/scan') def web_scan(): return render_template('scan.html') ``` ## 🐛 已知限制 1. **防火墙拦截** - 在防火墙后结果可能不准确 2. **网络延迟** - 慢速网络可能会出现漏报 3. **速率限制** - ISP 可能会拦截过量的扫描流量 4. **UDP 端口** - 目前仅扫描 TCP(UDP 扫描需要 root 权限) 5. **IPv6** - 目前仅支持 IPv4 ## 📝 版本历史 ### v1.0(当前版本) - ✅ 核心 CLI 扫描器 - ✅ 多线程支持 - ✅ GUI 界面 - ✅ Banner 抓取 - ✅ 服务检测 - ✅ 结果保存 ## 🤝 参与贡献 欢迎贡献代码!以下是可以改进的方向: - UDP 端口扫描 - IPv6 支持 - 检测规避技术 - 性能优化 - 更多 GUI 功能 ## 📄 许可证 此教育项目旨在用于学习网络安全概念。请负责任且合法地使用。 ## 📞 支持与文档 - **Python Socket 模块:** https://docs.python.org/3/library/socket.html - **Threading:** https://docs.python.org/3/library/threading.html - **Tkinter GUI:** https://docs.python.org/3/library/tkinter.html ## ⚡ 快速参考 **检查端口 80:** ``` python main.py # 输入: 127.0.0.1 # 选择: Custom Range # Ports: 80-80 ``` **快速扫描 localhost:** ``` python main.py # 输入: localhost # 选择: Quick Scan ``` **使用 GUI 进行全端口扫描:** ``` python gui.py # 输入: 192.168.1.1 # 选择: Full Scan # 点击: Start Scan ``` **⚠️ 请记住:** 仅扫描您拥有或已获得明确许可进行测试的系统。未经授权的端口扫描是非法且不道德的。 # 🎯 **祝您扫描愉快!**(在合法和符合道德的前提下) # Network-Port-Scanner 一个基于 Python 构建的高性能端口扫描器,专为快速网络审计和高效的服务发现而设计。该工具利用多线程和 Socket 编程来扫描 TCP 端口、解析主机名,并执行 Banner 抓取以识别服务和版本信息。 该应用程序采用双界面设计,提供用户友好的 Tkinter GUI 和功能强大的 CLI,以适应不同环境的灵活性需求。 🔧 关键特性 ⚡ 多线程扫描,实现高速性能 🌐 TCP 端口扫描和主机名解析 🛰️ 通过抓取 Banner 进行服务/版本检测 🖥️ 双界面:GUI (Tkinter) + 命令行界面 🔄 异步处理以优化执行效率 ✅ 强大的数据验证和错误处理机制 📡 基于核心网络协议构建 🎯 应用场景 网络安全审计 服务发现与分析 网络安全与网络相关的教育用途
标签:Python, socket编程, T1059.006, TCP扫描, Tkinter, Windows内核, XML 请求, 二进制发布, 反取证, 图形用户界面, 安全开发, 安全评估, 开源工具, 插件系统, 数据统计, 无后门, 服务发现, 横幅抓取, 漏洞扫描前置, 白帽子, 端口扫描, 网络安全, 网络安全实训, 网络审计, 网络工具, 逆向工具, 隐私保护