cristobalmaier/port-scanner
GitHub: cristobalmaier/port-scanner
基于Python标准库的轻量级端口扫描器,支持开放端口检测、服务识别和高危服务自动告警。
Stars: 0 | Forks: 0
# 🔍 NETSCOPE — 端口扫描器
```
███╗ ██╗███████╗████████╗███████╗ ██████╗ ██████╗ ██████╗ ███████╗
████╗ ██║██╔════╝╚══██╔══╝██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝
██╔██╗ ██║█████╗ ██║ ███████╗██║ ██║ ██║██████╔╝█████╗
██║╚██╗██║██╔══╝ ██║ ╚════██║██║ ██║ ██║██╔═══╝ ██╔══╝
██║ ╚████║███████╗ ██║ ███████║╚██████╗╚██████╔╝██║ ███████╗
╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝
```
纯 Python 编写的端口扫描器。检测开放端口,识别服务并针对危险配置发出警报 —— 风格类似 nmap。
## 系统要求
- Python 3.6 或更高版本
- 无需外部依赖 —— 仅使用标准库
## ▶使用方法
```
python3 netscope.py [puerto_inicio] [puerto_fin]
```
### 示例
```
# 扫描本地 IP 的 1-1024 端口
python3 netscope.py 192.168.1.1
# 扫描自定义范围
python3 netscope.py 192.168.1.1 1 500
# 扫描单个端口
python3 netscope.py 192.168.1.1 80 80
# 通过 hostname 扫描 (nmap 官方测试服务器)
python3 netscope.py scanme.nmap.org 1 1024
```
### 预期输出
```
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up.
Not shown: 1021 closed ports
PORT STATE SERVICE
──────────────────────────────────────────────────
22/tcp open ssh
80/tcp open http
3389/tcp open rdp
|_ [HIGH] RDP — riesgo de fuerza bruta
Netscope done: scanned in 4.21s — 3 open / 1024 total
```
## 颜色系统
| 颜色 | 含义 |
|-------|-------------|
| 🟢 绿色 | 安全服务 (SSH, HTTPS, HTTP) |
| 🟡 黄色 | 需注意 (FTP, MySQL, PostgreSQL) |
| 🔴 红色 | 高风险 (Telnet, SMB, RDP, Redis, MongoDB) |
| ⚪ 白色 | 未知服务 |
## 风险警报
Netscope 针对以下端口显示自动警告:
| 端口 | 服务 | 级别 | 原因 |
|--------|----------|-------|-------|
| 23 | Telnet | CRITICAL | 明文传输密码 |
| 445 | SMB | CRITICAL | 易受 EternalBlue / 勒索软件攻击 |
| 6379 | Redis | CRITICAL | 默认无认证 |
| 27017 | MongoDB | CRITICAL | 默认无认证 |
| 3389 | RDP | HIGH | 易受暴力破解攻击 |
| 5900 | VNC | HIGH | 认证机制薄弱 |
## 工作原理(核心概念)
### 1. TCP Connect Scan
Netscope 尝试使用 `socket.connect_ex()` 与每个端口建立完整的 TCP 连接。如果连接成功(返回 `0`),则该端口为 **开放** 状态。
```
sock.connect_ex((ip, port)) == 0 # True = puerto abierto
```
### 2. 多线程并行扫描
与其逐个扫描端口(速度慢),不如使用 `ThreadPoolExecutor` 同时扫描多达 200 个端口。
```
with ThreadPoolExecutor(max_workers=200) as executor:
futures = {executor.submit(scan_port, ip, p): p for p in ports}
```
### 3. 服务识别
每个已知端口都在 `SERVICES` 字典中进行了映射。如果不在列表中,则显示 `unknown`。
## 项目结构
```
netscope/
│
├── netscope.py # Script principal (único archivo)
└── README.md # Este archivo
```
## 可能的改进(后续思路)
- [ ] 将结果导出到 `.txt` 或 `.json` 文件
- [ ] 增加 Banner 抓取功能以检测版本
- [ ] 除了 TCP 外增加 UDP 扫描
- [ ] 支持多目标 / 网络范围 (CIDR)
- [ ] 集成 Shodan API
## 本项目涉及的知识点
- Python 中的 Socket 和 TCP/IP 通信
- 使用 `threading` 和 `ThreadPoolExecutor` 实现并发
- 网络侦查(渗透测试的第 1 阶段)
- 通过端口号识别服务
- 在终端中使用 ANSI 转义码显示颜色
## 免责声明
本软件仅供教育用途和在授权环境中进行测试。未经许可扫描系统可能违反当地法律。作者不对滥用本工具的行为承担责任。
标签:DNS查询工具, Netcat替代, Nmap替代, Python, Qt框架, TCP/IP, 套接字编程, 密码管理, 并发处理, 开源安全工具, 插件系统, 无后门, 无第三方依赖, 服务识别, 漏洞赏金平台, 端口扫描器, 纯Python, 网络安全, 逆向工具, 逆向工程平台, 隐私保护