Skip to content

kongbaiming/network-scanner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏠 家庭网络设备扫描器

一个基于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

🚀 快速开始

1. 环境准备

确保已安装 Python 3.7+,然后克隆项目:

git clone https://github.com/kongbaiming/network-scanner.git
cd network-scanner

2. 安装依赖

pip install -r requirements.txt

或者手动安装:

pip install flask scapy

3. 运行应用

python app.py

4. 访问应用

打开浏览器,访问: http://localhost:5000

📖 使用指南

首次使用

  1. 启动应用: 运行 python app.py 启动Web服务器
  2. 访问界面: 在浏览器中打开 http://localhost:5000
  3. 配置网络: 点击右上角齿轮图标,设置你的网络范围
  4. 开始扫描: 点击"开始扫描"按钮发现网络设备

界面功能

  • 🔄 开始扫描: 扫描配置的网络范围内的所有设备
  • 🔧 配置按钮: 打开配置界面,修改扫描参数
  • 📡 扫描端口: 手动扫描所有设备的开放端口
  • 📊 统计卡片: 实时显示设备数量、扫描状态等信息
  • 🖥️ 设备列表: 显示所有发现的设备及其详细信息

配置说明

点击右上角齿轮图标打开配置界面:

配置项 说明 示例值
网络范围 使用CIDR格式指定扫描范围 192.168.1.0/24
最大主机数 限制扫描的主机数量 254
启用端口扫描 网络扫描完成后自动扫描端口 ✅ 启用
常用端口列表 要扫描的端口列表,每行一个 80
443
22

⚡ 扫描原理

网络扫描策略

  1. 快速模式 (Scapy ARP扫描)

    • 发送ARP广播请求到目标网络
    • 监听ARP响应,获取设备MAC地址
    • 速度极快(5-10秒完成/24网段)
    • 需要Npcap/WinPcap支持(Windows)
  2. 兼容模式 (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]
}

API接口

  • 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个端口)

🐛 故障排除

常见问题

1. 扫描不到任何设备

  • 检查网络配置: 确认本机IP在扫描范围内
  • 验证网络范围: 检查配置的网络范围是否正确
  • 尝试兼容模式: 如果Scapy失败,会自动使用Ping扫描
  • 检查防火墙: 临时关闭防火墙测试

2. Scapy无法工作(Windows)

  • 安装Npcap: 下载并安装 https://npcap.com/
  • 安装选项: 勾选"Install Npcap in WinPcap API-compatible Mode"
  • 运行权限: 以管理员身份运行本程序
  • 重启网络: 安装后可能需要重启网络服务

3. MAC地址显示为"未知"

  • 等待ARP缓存: 设备可能不在本地ARP表中
  • 主动Ping: 尝试手动ping该设备
  • 网络限制: 某些网络设备可能限制ARP响应

4. 端口扫描缓慢

  • 减少端口数量: 在配置中减少扫描端口数
  • 检查网络延迟: 高延迟网络会影响扫描速度
  • 并发限制: 默认50个并发线程,可适当调整

5. Web界面无法访问

  • 检查端口占用: 确保5000端口未被占用
  • 查看防火墙: 检查防火墙是否阻止5000端口
  • 验证运行状态: 检查Python进程是否正常运行

🔄 更新日志

v1.2.0 (2025-01-23) - 可配置网络范围

  • ✅ 支持可配置的网络范围(CIDR格式)
  • ✅ Web配置界面,支持实时修改
  • ✅ 自动端口扫描功能
  • ✅ 配置持久化到JSON文件
  • ✅ 响应式UI改进,更好的移动端支持
  • ✅ 端口徽章颜色编码,按服务类型区分

v1.1.0 (2025-01-23) - 基础功能完善

  • ✅ 双模式网络扫描(Scapy ARP + Ping)
  • ✅ 设备类型自动识别
  • ✅ 端口扫描与服务识别
  • ✅ 响应式Web界面
  • ✅ 多线程并发扫描

v1.0.0 (2025-01-23) - 初始版本

  • ✅ 基础网络设备扫描
  • ✅ Web界面设备展示
  • ✅ 基础端口扫描功能

📝 开发扩展

添加新设备类型识别

templates/index.htmlgetDeviceType() 函数中添加新的MAC前缀识别规则。

添加更多端口服务

app.pyget_service_name() 函数中添加新的端口服务映射。

修改扫描参数

  • 并发线程数: 修改 ThreadPoolExecutor(max_workers=50) 参数
  • 扫描超时: 修改 scan_port() 函数的 timeout 参数
  • Ping参数: 修改 ping_host() 函数的超时和尝试次数

API扩展

可以扩展API接口,添加设备详情、扫描历史、导出报告等功能。

📄 许可证

MIT License

⚠️ 免责声明

⚠️ 重要提示

本工具仅用于:

  • ✅ 家庭网络管理和维护
  • ✅ 学习网络安全技术
  • ✅ 合法授权的网络测试

严禁用于:

  • ❌ 未经授权的网络扫描
  • ❌ 攻击他人网络系统
  • ❌ 任何非法活动

使用本工具造成的任何法律后果由使用者自行承担。请在合法授权范围内使用本工具。


💡 提示: 如果你是网络管理员或安全研究人员,建议在测试环境中先验证功能,再在实际网络中使用。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors