Leverett32/Basic-Network-Security-Scanner

GitHub: Leverett32/Basic-Network-Security-Scanner

一个使用纯 Python 编写的轻量级多线程 TCP 端口扫描器,帮助安全学习者对授权目标进行基础端口探测和风险评估。

Stars: 0 | Forks: 0

# 🔍 基础网络安全扫描器 一个轻量级、多线程的 TCP 端口扫描器,使用纯 Python 编写。专为网络安全学习者和从业者设计的一个作品集项目——无需任何外部库。 ## 📋 目录 - [概述](#overview) - [功能](#features) - [环境要求](#requirements) - [安装说明](#installation) - [使用说明](#usage) - [示例输出](#example-output) - [标记端口参考](#flagged-ports-reference) - [工作原理](#how-it-works) - [安全测试目标](#safe-testing-targets) - [路线图](#roadmap) - [法律免责声明](#legal-disclaimer) - [作者](#author) ## 概述 该工具针对目标主机在用户定义的端口范围内执行 TCP 连接扫描。它会识别开放的端口,将其映射到已知服务,使用通俗易懂的安全警告标记高风险端口,并生成一份可保存到文件的结构化报告。 适用场景: - 作品集展示 - 学习端口扫描和网络侦察的工作原理 - 对你拥有或获得授权的系统进行基础安全评估 ## 功能 - ✅ **零依赖** — 仅使用 Python 内置的 `socket`、`sys`、`datetime` 和 `concurrent.futures` - ⚡ **多线程扫描** — 使用具有 150 个 worker 的 `ThreadPoolExecutor` 进行快速并行端口扫描 - 🔍 **服务识别** — 将端口号解析为服务名称(HTTP、SSH、FTP 等) - ⚠️ **风险标记** — 自动识别并对 17 个常被利用的端口发出警告 - 📊 **风险评估摘要** — 评估整体暴露程度(低 / 中高 / 高风险) - 💾 **可导出报告** — 将扫描结果保存为带时间戳的 `.txt` 文件 - 🌐 **主机名解析** — 接受 IP 地址和域名作为输入 ## 环境要求 - Python 3.6 或更高版本 - 无需外部包 检查你的 Python 版本: ``` python3 --version ``` ## 安装说明 ``` # Clone 仓库 git clone https://github.com/YOUR_USERNAME/network-security-scanner.git # 进入目录 cd network-security-scanner # 无需 pip install —— 直接运行 python3 security_scanner.py ``` ## 使用说明 ``` python3 security_scanner.py ``` 该工具将以交互方式提示你: ``` ================================================== Basic Network Security Scanner v1.0 ⚠ For authorized use only ⚠ ================================================== Enter target IP or hostname: 192.168.1.1 Common ranges: 1-1024 = Well-known ports (default, recommended) 1-65535 = Full scan (slower) 80-443 = Web ports only Enter port range (e.g. 1-1024) or press Enter for default: ``` **输入项:** | 提示 | 示例 | 备注 | |---|---|---| | 目标 IP 或主机名 | `192.168.1.1` 或 `scanme.nmap.org` | IPv4 或可解析的主机名 | | 端口范围 | `1-1024` | 留空则使用默认值。最大值:`1-65535` | ## 示例输出 ``` [*] Target IP : 192.168.1.1 [*] Port Range : 1 - 1024 (1024 ports) [*] Scan Started : 2026-05-24 14:32:01 ────────────────────────────────────────────────── PORT STATE SERVICE ────────────────────────────────────────────────── [+] 80 OPEN http [!] 23 OPEN telnet [!] 445 OPEN microsoft-ds ────────────────────────────────────────────────── [*] Scan complete. 3 open port(s) found. ============================================================ NETWORK SECURITY SCAN REPORT ============================================================ Target Host : 192.168.1.1 Resolved IP : 192.168.1.1 Port Range : 1 - 1024 Scan Date : 2026-05-24 14:32:08 Open Ports : 3 ============================================================ OPEN PORTS SUMMARY ──────────────────────────────────────── PORT SERVICE ──────────────────────────────────────── 80 http 23 telnet 445 microsoft-ds SECURITY WARNINGS ──────────────────────────────────────── [!] Port 23 (telnet) → Telnet — Completely unencrypted. Replace with SSH immediately. [!] Port 445 (microsoft-ds) → SMB — File sharing. Frequent ransomware target (e.g. WannaCry). RISK ASSESSMENT ──────────────────────────────────────── ⚠ LOW-MEDIUM RISK: 2 potentially risky port(s) open. Save report to file? (y/n): y [+] Report saved to: scan_192_168_1_1_20260524_143208.txt ``` ## 标记端口参考 扫描器会自动标记以下端口并附带安全建议: | 端口 | 服务 | 风险 | |---|---|---| | 21 | FTP | 未加密的文件传输 — 请改用 SFTP | | 22 | SSH | 确保使用密钥认证;禁用密码登录 | | 23 | Telnet | 完全未加密 — 立即替换为 SSH | | 25 | SMTP | 确保服务器不是开放中继 | | 80 | HTTP | 未加密的 Web 流量 — 强制使用 HTTPS | | 110 | POP3 | 未加密的电子邮件 — 使用 POP3S | | 135 | RPC | Windows 系统上常见的攻击向量 | | 139 | NetBIOS | 常被用于横向移动攻击 | | 443 | HTTPS | 良好 — 验证证书有效性 | | 445 | SMB | 勒索软件的频繁目标(WannaCry、NotPetya) | | 1433 | MSSQL | 数据库暴露 — 立即限制访问 | | 3306 | MySQL | 不应对外公开访问 | | 3389 | RDP | 高价值目标 — 启用 NLA 和 MFA | | 5432 | PostgreSQL | 限制仅 localhost 或 VPN 访问 | | 5900 | VNC | 通常未加密 — 通过 VPN 建立隧道 | | 8080 | HTTP-Alt | 确认辅助 Web 服务器是否为有意部署 | | 8443 | HTTPS-Alt | 确认辅助安全服务器是否为有意部署 | ## 工作原理 ``` User Input (host + port range) │ ▼ Hostname Resolution socket.gethostbyname() │ ▼ Multi-threaded Port Scan ThreadPoolExecutor (150 workers) socket.connect_ex() per port │ ▼ Open Port Collection Service name lookup via socket.getservbyport() │ ▼ Risk Flag Evaluation Match against RISKY_PORTS dict │ ▼ Report Generation Console output + optional .txt save ``` **扫描方法:** TCP 连接扫描 — 尝试在每个端口上完成完整的 TCP 握手。如果连接成功(返回 0),则该端口是开放的。这是最可靠但也最易被检测到的端口扫描方式。它不使用原始套接字或 SYN 数据包,因此不需要 root/admin 权限。 **线程:** 使用 Python 的 `ThreadPoolExecutor` 和 150 个并发 worker,与顺序扫描相比,显著减少了扫描时间。 ## 安全测试目标 在扫描任何你不拥有的系统之前,请务必获得书面授权。以下是公开提供的合法测试目标: | 目标 | 备注 | |---|---| | `localhost` / `127.0.0.1` | 你自己的机器 — 始终安全 | | 你的家庭路由器(例如 `192.168.1.1`) | 你自己的网络 — 安全 | | `scanme.nmap.org` | Nmap 官方的合法测试主机 | ## 路线图 计划中的未来改进: - [ ] 支持 UDP 端口扫描 - [ ] OS 指纹识别(基于 TTL) - [ ] 为标记的服务集成 CVE 查找功能 - [ ] 导出 HTML 报告 - [ ] 支持命令行参数(`--host`、`--range`、`--output`) - [ ] 包含连接耗时的详细模式 - [ ] 输出 JSON 以便集成到 pipeline ## 法律免责声明 本工具仅供**教育和授权的安全测试目的使用。** - ❌ 在未获得所有者明确书面许可的情况下,**不要**扫描任何网络、主机或系统 - ❌ 在未遵守其特定安全测试政策的情况下,**不要**将此工具用于云基础设施(AWS、Azure、GCP) - ✅ 在进行任何安全评估之前,务必获得书面授权 - ✅ 请查阅当地法律 — 无论出于何种意图,未经授权的端口扫描在你所在的司法管辖区可能是非法的 作者对滥用本工具的行为**不承担任何责任**。 ## 作者 **Kevin Leverett** 安全专家 → 网络安全顾问 Charlotte, NC - 📧 k.leverett32@gmail.com - 💼 [LinkedIn](https://linkedin.com/in/kevin-leverett-8b1828128) - 🔐 CompTIA Security+ | CySA+ | 网络安全理学学士(在读) *这是一个持续更新的网络安全作品集的一部分。旨在展示实用的 Python 脚本编写能力、网络基础知识以及安全评估方法论。*
标签:DInvoke, Python, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护