Amine-NAHLI/smart-network-mapper
GitHub: Amine-NAHLI/smart-network-mapper
一款集成AI漏洞预测的Python智能网络扫描器,用于局域网资产发现与服务安全评估。
Stars: 0 | Forks: 0
# 🛰️ 智能 Network Mapper
欢迎使用 **Smart Network Mapper** 项目!该工具是一个综合的网络扫描器,旨在为专业人士提供**强大的功能**,同时为初学者提供**教学指导**。
它可用于探索您的局域网 (LAN) 或远程服务器,以发现哪些设备处于活动状态以及它们托管了哪些服务。
## 📌 项目概述
- **项目名称**:Smart Network Mapper
- **主要目标**:通过识别连接的计算机及其“入口”(端口)来绘制计算机网络拓扑图。
- **解决的问题**:准确了解您的网络上正在运行的内容,检测未知设备或验证自身服务的安全性。
- **目标受众**:计算机专业学生、网络安全爱好者,或寻求简单透明工具的网络管理员。
## ⚙️ 功能特性
✅ **自动网络检测**:识别您的 Wi-Fi 或以太网卡并计算您的 IP 地址范围。
✅ **主机发现 (Host Discovery)**:查找局域网上所有开机的设备。
✅ **多线程端口扫描**:通过并行执行,在几秒钟内扫描数千个端口。
✅ **服务识别**:自动识别常见服务(HTTP、SSH、FTP 等)。
✅ **Banner Grabbing 与版本检测**:尝试读取服务的“签名”以猜测其确切版本。
✅ **机器学习(预测)**:基于训练好的 Random Forest 模型分析潜在漏洞。
✅ **公网 IP 支持**:还允许扫描互联网上的服务器(带有安全验证)。
✅ **导出 JSON**:自动保存结果以供后续分析。
## 🧠 它是如何工作的?
程序遵循严密的逻辑流程以确保速度和准确性。
### 逐步的程序流程:
1. **初始化**:程序检测您当前的网络配置(本地 IP,子网掩码)。
2. **发现**:它向网络中所有可能的 IP 发送轻量级请求 (TCP Ping),以查看哪些 IP 有响应。
3. **信息收集**:对于发现的每一台机器,它会检索其主机名 (DNS) 和 MAC 地址 (ARP)。
4. **目标选定**:用户选择一台特定的机器进行更深入的分析。
5. **端口扫描**:程序尝试在每个请求的端口上打开连接。
6. **检查**:如果端口打开,它会下载“横幅”(服务的欢迎消息)以识别所使用的软件。
7. **AI 分析**:(可选)`model` 模块分析检测到的版本以预测漏洞。
8. **报告**:显示彩色的汇总表并生成 JSON 文件。
## 🗂️ 项目结构
文件组织遵循 Python 的模块化最佳实践:
- 📄 `main.py`:项目的**大脑**。它管理用户界面、菜单并协调各个扫描模块。
- 📁 `scanner/`:包含所有**技术逻辑**的文件夹。
- `host_discovery.py`:包含用于在网络中查找机器的函数 (Ping)。
- `port_scanner.py`:处理 TCP 端口扫描、横幅读取和版本检测。
- `device_info.py`:使用 ARP 等协议获取 MAC 地址,并使用反向 DNS 获取名称。
- `utils.py`:用于验证 IP 地址和操作 CIDR 网络的实用程序函数。
- 📁 `model/`:**人工智能**引擎。
- `code_training.py`:Random Forest 模型的训练脚本。
- `normalize_data.py`:数据集的准备与归一化。
- `*.pkl`:保存的模型和缩放器文件。
- 📁 `reporter/`:专用于生成**详细报告** (PDF/HTML) 的模块。
- 📁 `outputs/`:存储扫描报告的文件夹(例如:`scan_result.json`)。
- 📁 `tests/`:**单元测试**套件,用于确保扫描器的可靠性。
- 📄 `requirements.txt`:所需的外部库列表。
## 🔍 代码说明
### 1. 使用的关键库
- **`scapy`**:一个用于处理网络数据包的超强大库(此处用于 ARP 请求)。
- **`socket`**:Python 的标准模块,用于低级网络通信。
- **`concurrent.futures`**:允许同时启动多个扫描(多线程)以加快 100 倍的速度。
- **`colorama`**:在终端中添加颜色以使文本易于阅读。
- **`tqdm`**:在漫长的扫描过程中显示漂亮的进度条。
### 2. 放大看一个函数:`scan_tcp`
该函数是端口扫描器的核心。其原理如下:
```
# scanner/port_scanner.py 的简化摘录
def scan_tcp(ip, port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(1.5)
result = s.connect_ex((ip, port))
if result == 0:
return "OUVERT"
return "FERMÉ"
```
- `socket.AF_INET`:我们通过 IPv4 进行通信。
- `socket.SOCK_STREAM`:我们使用 TCP 协议(可靠)。
- `connect_ex`:尝试连接。如果它返回 `0`,则说明门是开着的!
## 💻 安装与运行
### 前置条件
- 系统上已安装 **Python 3.8+**。
- 管理员权限(ARP/Scapy 等某些网络功能需要)。
### 安装
1. 克隆或下载该项目。
2. 在项目文件夹中打开终端。
3. 安装依赖项:
pip install -r requirements.txt
### 运行
要启动程序,只需运行:
```
python main.py
```
### 执行测试
要验证一切是否正常工作,您可以使用 `pytest` 运行测试套件:
```
pytest tests/
```
## 📡 具体使用示例
假设您想查看您的互联网盒子或计算机上正在运行什么:
1. **输入**:您选择“自动检测”模式。
2. **处理**:
- 程序发现您的网络:`192.168.1.0/24`。
- 它在 IP `192.168.1.15` 处检测到您的 PC。
- 您对常用端口发起快速扫描。
3. **输出**:
- 端口 `80` **已开启 (OUVERT)**。
- 检测到的服务:`HTTP`。
- 版本:`Apache/2.4.41`。
- 将创建一个包含这些详细信息的 `scan_result.json` 文件。
## ⚠️ 错误处理
程序非常健壮,并预设了多种情况:
- **超时**:如果一台机器响应太慢,程序将直接处理下一台而不会卡住。
- **权限拒绝**:如果 Scapy 无法访问网卡(通常是因为缺少 `sudo` 或管理员权限),程序将切换到更简单的替代方法。
- **无效 IP**:`utils.py` 模块会验证每一项用户输入以防止程序崩溃。
## 🚀 可能的改进
- [ ] **UDP 扫描**:添加对 UDP 协议的支持(由于无连接,因此更复杂)。
- [ ] **操作系统检测**:利用 Scapy 分析 TCP/IP 协议栈,并猜测目标运行的是 Windows、Linux 还是 Android。
- [ ] **图形用户界面 (GUI)**:创建一个带有图表的窗口以直观展示网络。
- [ ] **历史记录**:在 SQLite 数据库中保留所有过往扫描的痕迹。
## 📖 词汇表
- **IP (Internet Protocol)**:您的设备在网络上的邮政地址。
- **端口**:一个数字(从 0 到 65535),用于定义特定的应用程序(例如:80 代表网络)。
- **CIDR (192.168.1.0/24)**:一种用于定义 IP 地址范围的简写形式。
- **ARP**:允许在局域网上将 IP 转换为物理地址 (MAC) 的协议。
💡 **专家建议**:为了理解这个项目,请从阅读 `scanner/utils.py`(基础)开始,然后再向上查阅 `main.py`。
_由 Amine Nahli 用 ❤️ 开发。_
标签:AI漏洞检测, Apex, Banner Grabbing, Cybersecurity, DNS枚举, Facebook API, JSON导出, Python, Qt框架, 公共IP扫描, 域名侦查, 多线程扫描, 安全规则引擎, 局域网扫描, 插件系统, 教育工具, 数据统计, 无后门, 无线安全, 智能网络映射, 服务识别, 机器学习, 漏洞预测, 端口扫描, 网络安全, 网络安全工具, 网络扫描器, 网络设备识别, 逆向工具, 随机森林, 隐私保护