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, 云存储安全, 信息收集, 占用监测, 插件系统, 数据统计, 桌面应用, 端口扫描, 网络扫描, 资产管理