kobika2024/network-scanner-MiniApp
GitHub: kobika2024/network-scanner-MiniApp
一款面向企业网络的桌面端扫描工具,实现快速资产发现、端口探测与合规报告。
Stars: 0 | Forks: 0
# 🔍 Network Scanner — 企业网络扫描器
企业级网络扫描与映射工具,提供希伯来语 Web 界面。
识别设备、服务、操作系统,获取 OSINT 信息——并支持导出 Excel 和 PDF 报告。
## 主要功能
| 功能 | 详情 |
|---|---|
| 🖥️ **端口扫描** | 针对 IP 范围进行快速 TCP scan,支持服务检测和风险等级评估 |
| 🗺️ **资产映射** | ARP · NetBIOS/SMB · SNMP · DNS Sweep · Docker API |
| 🔎 **OSINT** | Shodan InternetDB(免费)+ Shodan / Censys API |
| 🏢 **Active Directory** | 通过 LDAP 查询 AD 中的计算机对象 |
| 📊 **报告** | 多表单 Excel + 支持希伯来语 RTL 的 PDF |
| 🪟 **Desktop 体验** | 独立 EXE 文件(无需 Python),包含系统托盘和启动闪屏 |
| 🔒 **权限** | 自动 UAC elevation(ARP/NetBIOS 扫描需要) |
## 系统要求
- **Windows 10 / 11** (64-bit)
- **Administrator 权限**(用于 ARP、NetBIOS 扫描和 raw sockets)
- 连接到您想要扫描的内部网络
## 快速使用 — 构建后运行 EXE
在您运行 `build.bat` 之后(请参阅下方的“从源码构建”章节),生成的 EXE 文件将位于此处:
```
dist\NetworkScanner\NetworkScanner.exe
```
**执行步骤:**
1. 确保您至少运行过一次 `build.bat`
2. 打开 `dist\NetworkScanner\` 文件夹
3. 双击 `NetworkScanner.exe`
4. 确认 UAC 窗口(Administrator 权限请求)
5. 请稍候,短暂的启动闪屏后将启动服务器
6. 浏览器将自动打开并访问 `http://localhost:5000`
## 从源码构建
### 开发要求
| 工具 | 最低版本 |
|---|---|
| Python | 3.11+ |
| pip | 23+ |
### 步骤 1 — 克隆仓库
```
git clone https://github.com/kobika2024/network-scanner.git
cd network-scanner
```
### 步骤 2 — 安装依赖
```
pip install -r requirements.txt
```
这将安装:
| 包名 | 用途 |
|---|---|
| `flask` | Web 服务器 |
| `pysnmp-lextudio` | SNMP 扫描 |
| `docker` | 发现 Docker containers |
| `ldap3` | Active Directory 查询 |
| `reportlab` | 生成 PDF |
| `openpyxl` | 生成 Excel |
| `arabic-reshaper` + `python-bidi` | PDF 中的希伯来语 RTL 支持 |
| `pystray` + `Pillow` | 系统托盘图标 |
### 步骤 3 — 直接运行(开发)
```
python app.py
```
在浏览器中打开 `http://localhost:5000`
### 步骤 4 — 构建 Windows EXE
```
build.bat
```
该脚本将执行以下操作:
1. 确认已安装 Python + PyInstaller
2. 安装所有依赖
3. 生成应用程序图标(`static/icon.ico`)
4. 清理之前的 build
5. 使用预定义的 spec 运行 PyInstaller
输出结果:`dist\NetworkScanner\NetworkScanner.exe`
## 项目结构
```
network-scanner/
│
├── launcher.py ← נקודת כניסה ל-EXE (מגש, ספלאש, Flask)
├── app.py ← Flask backend + REST API
├── scanner.py ← מנוע סריקת TCP
│
├── discovery/
│ ├── orchestrator.py ← צינור גילוי שלושה-שלבי
│ ├── arp_discovery.py ← ARP + זיהוי MAC vendor
│ ├── netbios_discovery.py ← NetBIOS NBNS + SMB version
│ ├── snmp_discovery.py ← SNMP v1/v2c
│ ├── dns_sweep.py ← Reverse DNS
│ ├── docker_discovery.py ← Docker API + Kubernetes
│ ├── os_fingerprint.py ← זיהוי OS רב-שכבתי
│ └── ldap_discovery.py ← Active Directory
│
├── models/
│ └── asset.py ← dataclass מאוחד לנכס
│
├── reports/
│ ├── excel_report.py ← Excel רב-גיליוני + RTL
│ └── pdf_report.py ← PDF עם תמיכת עברית
│
├── templates/
│ └── index.html ← ממשק SPA עברית RTL
│
├── static/
│ └── icon.ico ← אייקון האפליקציה (נוצר ע"י make_icon.py)
│
├── make_icon.py ← יוצר את icon.ico (Pillow)
├── network_scanner.spec ← הגדרת PyInstaller
├── build.bat ← סקריפט בנייה מלא
├── app.manifest ← UAC + DPI awareness (Windows)
└── requirements.txt
```
## 使用指南 — 各标签页说明
### 🔵 标签页 1:端口扫描
**目的:** 找出指定 IP 范围内每台设备开放的端口。
| 字段 | 示例 | 说明 |
|---|---|---|
| Target | `192.168.1.0/24` | CIDR、范围(`192.168.1.1-50`)或单个 IP |
| Port Preset | `common` | 请参阅下方的 Presets 表格 |
| Timeout | `2.0` | 每个端口的等待秒数 |
**内置 Presets:**
| Preset | 扫描的端口 | 用途 |
|---|---|---|
| `quick` | 22, 80, 443, 3389, 445 | 快速初步扫描 |
| `common` | ~40 个常用端口 | 适用大多数场景的默认选项 |
| `web` | 80, 443, 8080, 8443, 8888... | Web 服务器 |
| `database` | 1433, 3306, 5432, 6379... | 数据库 |
| `remote` | 22, 23, 3389, 5900, 5985 | 远程访问 |
| `infra` | 161, 162, 389, 636, 3268... | 企业基础设施 |
| `custom` | 根据手动输入 | `80,443,8080` |
**风险等级说明:**
| 颜色 | 等级 | 示例 |
|---|---|---|
| 🔴 红色 | CRITICAL | Telnet, SMBv1, 无防护的 RDP |
| 🟠 橙色 | HIGH | 暴露的 FTP, SMTP, MySQL |
| 🟡 黄色 | MEDIUM | HTTP,内部服务 |
| 🟢 绿色 | LOW | HTTPS, SSH |
### 🟢 标签页 2:资产清单(Asset Discovery)
**目的:** 深度映射网络中的每一台设备——名称、OS、硬件、服务。
**发现方法(可选):**
| 方法 | 发现内容 |
|---|---|
| **ARP** | MAC 地址 + 硬件供应商(始终启用) |
| **NetBIOS/SMB** | Windows 计算机名 + 从 SMB banner 获取的 OS 版本 |
| **SNMP** | sysName, sysDescr, interfaces, location |
| **DNS Sweep** | 通过 Reverse DNS 获取 hostname |
| **Docker** | 活跃的 containers, images, ports |
**发现过程 — 三个阶段:**
```
שלב 1: Network Sweep
└─ ARP + DNS + ICMP ping במקביל על כל הרשת
שלב 2: Per-Host Deep Scan
└─ TCP + NetBIOS + SNMP + Docker במקביל לכל מכשיר
שלב 3: OS Fingerprinting
└─ SSH banner → HTTP header → SNMP sysDescr → TTL
```
**导出结果:**
- **Excel** — 5 个工作表:资产清单、开放端口、统计信息、Docker、SNMP
- **PDF** — 支持希伯来语 RTL 的管理报告
- **JSON** — 用于进一步处理的原始格式
**Active Directory (LDAP):**
填写 Domain、用户名和密码以查询 AD 中的计算机对象:
```
Domain: corp.local
Username: administrator
Password: ••••••••
DC Server: (השאר ריק לגילוי אוטומטי)
```
### 🟡 标签页 3:OSINT
**目的:** 获取有关外部 IP 的公开信息——组织、国家、端口、漏洞。
**Shodan InternetDB(无需 API Key — 免费):**
- 输入外部 IP
- 将 API Key 字段留空
- 获取开放端口、hostnames、已知的 CVEs
**Shodan Full API(需要 API Key):**
- 同样的结果 + org, ISP, 地理位置位置以及每个服务的 banner
**Censys(需要 API ID + Secret):**
- 在 [censys.io](https://censys.io) 注册并获取 API credentials
- 结果:服务、TLS 证书、ASN、BGP prefix
## 常见问题
**问:应用程序无法打开 / UAC 窗口未出现**
答:请确保您直接运行了 EXE 文件(不要从网络驱动器运行)。右键点击 → “以管理员身份运行”。
**问:扫描找不到设备**
答:请检查您是否连接到了相同的网络。Windows Firewall 可能会阻止 ARP — 请暂时将其关闭或添加例外。
**问:NetBIOS 无法识别计算机名**
答:请确保 UDP 端口 137 未被 Firewall 阻止。检查 Adapter 设置中是否启用了 NetBIOS over TCP/IP。
**问:SNMP 报错 "No response"**
答:检查 community string 是否正确(默认为 `public`)。确保 UDP 端口 161 未被阻止。
**问:EXE 被运行了两次导致端口冲突**
答:应用程序会自动尝试 5000–5010 端口。如果全被占用 — 请通过系统托盘关闭之前的 instances。
**问:PDF 报告无法显示希伯来语**
答:请确保 `NotoSansHebrew` 文件可用。如果缺少字体,应用程序会回退到 Helvetica — 希伯来语仍然会显示,但没有完美的 RTL 排版。
**问:无法识别 Docker**
答:Docker API 监听 TCP 端口 2375 (HTTP) 或 2376 (HTTPS)。在 Windows 版 Docker Desktop 中,请在设置中启用 "Expose daemon on tcp://localhost:2375 without TLS"。
## 安全与免责声明
- 所有扫描均**仅在您的本地计算机上执行** — 没有外部服务器
- 结果**仅保存在内存中**(关闭应用程序时会被擦除)
- OSINT 仅从**公开**信息中提取(Shodan InternetDB / Censys API)
## 许可证
MIT License — 可自由用于企业内部需求和研究。
标签:ESC4, OSINT, 云存储安全, 信息收集, 占用监测, 插件系统, 数据统计, 桌面应用, 端口扫描, 网络扫描, 资产管理