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, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护