一个基于Web的智能家庭网络设备扫描工具,支持可配置网络范围和自动端口扫描。
- 双模式扫描: 优先使用Scapy ARP扫描(快速),失败时自动回退到Ping扫描
- 可配置网络范围: 支持CIDR格式,可扫描任意网段(如192.168.1.0/24、10.0.0.0/16等)
- 设备发现: 自动发现网络中的在线设备
- 信息采集: 获取设备的IP地址、MAC地址和主机名
- 自动端口扫描: 启用后网络扫描完成自动扫描设备端口
- 可配置端口列表: 支持自定义扫描的端口列表
- 服务识别: 自动识别25+常见服务(HTTP, SSH, RDP, MySQL, Redis等)
- 彩色标识: 不同服务类型使用不同颜色徽章标识
- Web配置界面: 直接在Web界面修改所有扫描设置
- 配置持久化: 自动保存配置到JSON文件
- 实时生效: 修改配置后立即生效
- 响应式设计: 适配桌面和移动设备
- 实时统计: 设备总数、在线状态、扫描进度实时显示
- 设备卡片: 美观的设备信息卡片,支持设备类型识别
- 批量操作: 支持全端口扫描和单设备端口扫描
- 设备类型识别: 基于MAC地址前缀识别设备厂商(Apple、Samsung、VMware等)
- 端口服务识别: 根据端口号识别对应的网络服务
- 状态监控: 实时监控设备在线状态
- 后端: Python Flask + 多线程并发
- 前端: HTML5 + Bootstrap 5 + JavaScript
- 网络扫描: Scapy (优先) / Ping + ARP (备用)
- 配置管理: JSON配置文件 + RESTful API
确保已安装 Python 3.7+,然后克隆项目:
git clone https://github.com/kongbaiming/network-scanner.git
cd network-scannerpip install -r requirements.txt或者手动安装:
pip install flask scapypython app.py打开浏览器,访问: http://localhost:5000
- 启动应用: 运行
python app.py启动Web服务器 - 访问界面: 在浏览器中打开 http://localhost:5000
- 配置网络: 点击右上角齿轮图标,设置你的网络范围
- 开始扫描: 点击"开始扫描"按钮发现网络设备
- 🔄 开始扫描: 扫描配置的网络范围内的所有设备
- 🔧 配置按钮: 打开配置界面,修改扫描参数
- 📡 扫描端口: 手动扫描所有设备的开放端口
- 📊 统计卡片: 实时显示设备数量、扫描状态等信息
- 🖥️ 设备列表: 显示所有发现的设备及其详细信息
点击右上角齿轮图标打开配置界面:
| 配置项 | 说明 | 示例值 |
|---|---|---|
| 网络范围 | 使用CIDR格式指定扫描范围 | 192.168.1.0/24 |
| 最大主机数 | 限制扫描的主机数量 | 254 |
| 启用端口扫描 | 网络扫描完成后自动扫描端口 | ✅ 启用 |
| 常用端口列表 | 要扫描的端口列表,每行一个 | 8044322 |
-
快速模式 (Scapy ARP扫描)
- 发送ARP广播请求到目标网络
- 监听ARP响应,获取设备MAC地址
- 速度极快(5-10秒完成/24网段)
- 需要Npcap/WinPcap支持(Windows)
-
兼容模式 (Ping扫描)
- 并发发送ICMP Ping请求
- 从系统ARP表获取MAC地址
- 兼容性好,无需特殊权限
- 速度较慢(20-30秒完成/24网段)
- TCP连接扫描: 尝试与目标端口建立TCP连接
- 多线程并发: 50个并发线程同时扫描
- 超时控制: 每个端口1秒超时
- 自动扫描: 启用配置后网络扫描完成自动执行
- 动态网络范围: 支持任意CIDR格式网络
- 智能解析: 自动解析网络地址和主机范围
- 性能优化: 可限制最大主机数避免过度扫描
应用会自动创建 scanner_config.json 文件,存储所有配置:
{
"network_range": "192.168.3.0/24",
"scan_public_net": false,
"max_hosts": 254,
"port_scan_enabled": true,
"common_ports": [80, 443, 22, 3389, 3306]
}GET /api/config- 获取当前配置POST /api/config- 更新配置GET /api/devices- 获取设备列表POST /api/scan- 开始网络扫描POST /api/scan-ports- 开始端口扫描POST /api/scan-ports/<ip>- 扫描单个设备端口
系统根据MAC地址前缀识别设备厂商:
| MAC前缀 | 设备厂商 | 图标 |
|---|---|---|
| 00:0C:29, 00:50:56 | VMware虚拟设备 | ☁️ |
| 00:15:5D | Microsoft虚拟设备 | 🪟 |
| 00:1D:0F, 00:23:DF | Apple设备 | 🍎 |
| 00:1A:11 | Google设备 | 🔍 |
| 00:1E:C2, 00:21:6A | Samsung设备 | 📱 |
| 00:1B:63 | Sony设备 | 🎧 |
| 00:24:BE, 00:1F:FE | LG设备 | 📺 |
- Windows: 推荐安装Npcap以获得最佳性能
- Linux/macOS: 可能需要sudo权限运行
- Python: 需要Python 3.7或更高版本
- 确保本机IP在要扫描的网络范围内
- 关闭防火墙或添加例外规则(如有需要)
- 确保网络设备允许ICMP/Ping请求
- 快速扫描: Scapy模式约5-10秒完成/24网段
- 兼容扫描: Ping模式约20-30秒完成/24网段
- 端口扫描: 每个设备约1-2秒(25个端口)
- 检查网络配置: 确认本机IP在扫描范围内
- 验证网络范围: 检查配置的网络范围是否正确
- 尝试兼容模式: 如果Scapy失败,会自动使用Ping扫描
- 检查防火墙: 临时关闭防火墙测试
- 安装Npcap: 下载并安装 https://npcap.com/
- 安装选项: 勾选"Install Npcap in WinPcap API-compatible Mode"
- 运行权限: 以管理员身份运行本程序
- 重启网络: 安装后可能需要重启网络服务
- 等待ARP缓存: 设备可能不在本地ARP表中
- 主动Ping: 尝试手动ping该设备
- 网络限制: 某些网络设备可能限制ARP响应
- 减少端口数量: 在配置中减少扫描端口数
- 检查网络延迟: 高延迟网络会影响扫描速度
- 并发限制: 默认50个并发线程,可适当调整
- 检查端口占用: 确保5000端口未被占用
- 查看防火墙: 检查防火墙是否阻止5000端口
- 验证运行状态: 检查Python进程是否正常运行
- ✅ 支持可配置的网络范围(CIDR格式)
- ✅ Web配置界面,支持实时修改
- ✅ 自动端口扫描功能
- ✅ 配置持久化到JSON文件
- ✅ 响应式UI改进,更好的移动端支持
- ✅ 端口徽章颜色编码,按服务类型区分
- ✅ 双模式网络扫描(Scapy ARP + Ping)
- ✅ 设备类型自动识别
- ✅ 端口扫描与服务识别
- ✅ 响应式Web界面
- ✅ 多线程并发扫描
- ✅ 基础网络设备扫描
- ✅ Web界面设备展示
- ✅ 基础端口扫描功能
在 templates/index.html 的 getDeviceType() 函数中添加新的MAC前缀识别规则。
在 app.py 的 get_service_name() 函数中添加新的端口服务映射。
- 并发线程数: 修改
ThreadPoolExecutor(max_workers=50)参数 - 扫描超时: 修改
scan_port()函数的timeout参数 - Ping参数: 修改
ping_host()函数的超时和尝试次数
可以扩展API接口,添加设备详情、扫描历史、导出报告等功能。
MIT License
本工具仅用于:
- ✅ 家庭网络管理和维护
- ✅ 学习网络安全技术
- ✅ 合法授权的网络测试
严禁用于:
- ❌ 未经授权的网络扫描
- ❌ 攻击他人网络系统
- ❌ 任何非法活动
使用本工具造成的任何法律后果由使用者自行承担。请在合法授权范围内使用本工具。
💡 提示: 如果你是网络管理员或安全研究人员,建议在测试环境中先验证功能,再在实际网络中使用。