一个基于 Next.js 构建的简单、高效的局域网唤醒(Wake-on-LAN)工具,支持设备管理、局域网扫描和远程唤醒功能。
- 优化: LAN 扫描自动过滤虚拟网络(Docker 172.16.x.x、VirtualBox 192.168.56.x、链路本地地址)
- 优化: WOL 广播地址过滤虚拟网络,避免无效广播
- 优化: 设备在线检测响应速度,离线设备从 9 秒降至 1 秒
- 优化: 修复 fping 超时单位错误(毫秒/秒混淆)
- 优化: SWR 请求去重,防止请求堆积
- 安全: IP 地址接口添加格式校验,防止命令注入
- 功能: 创建设备时检查 MAC 地址唯一性
- 修复: 表单验证逻辑,使用正确的 handleSubmit 验证流程
- 初始版本
- 🔌 设备唤醒:支持跨子网唤醒,兼容 Windows 和 Linux 系统
- 🔍 局域网扫描:智能扫描局域网设备,自动发现并添加设备
- 📱 设备管理:创建、编辑、删除设备,支持设备在线状态检测
- 🌐 多语言支持:支持中文和英文界面
- 🎨 现代化UI:基于 Radix UI 和 Tailwind CSS 构建的响应式界面
- ⚡ 高性能扫描:优化的 ARP 扫描算法,支持 fping/arping 加速
- 💾 智能缓存:扫描结果缓存机制,提升响应速度
- 🌓 主题切换:支持浅色/深色主题
- 🔔 版本更新:自动检查新版本并提示更新
创建 docker-compose.yml 文件:
version: "3"
services:
nextwol:
container_name: nextwol
image: fly1029/nextwol:latest
network_mode: host
restart: unless-stopped
environment:
- PORT=36200 # 默认端口为 3000
volumes:
- ./nextwol/config:/app/config启动服务:
docker-compose up -d访问应用:http://localhost:36200
- Node.js 20+
- pnpm(推荐)或 npm
pnpm installpnpm dev访问 http://localhost:3000 查看应用。
pnpm build
pnpm start- 操作系统:Linux、Windows、macOS
- Node.js:20.x 或更高版本
- 网络:需要访问局域网,建议使用
host网络模式(Docker)
- fping:Linux/Mac 上可大幅提升扫描速度
- arping:Linux 上最快的扫描方式(需要 root 权限)
安装 fping(Ubuntu/Debian):
sudo apt-get install fping安装 fping(CentOS/RHEL):
sudo yum install fping| 变量名 | 说明 | 默认值 |
|---|---|---|
PORT |
服务端口 | 3000 |
PUID |
运行用户ID(Docker) | 0 |
PGID |
运行组ID(Docker) | 0 |
配置文件存储在 ./config 目录(Docker 挂载点),包含:
- 设备配置信息
- 应用设置
- 跨子网支持:自动计算并发送到所有子网广播地址
- 多端口支持:同时尝试端口 7 和 9(常见 WOL 端口)
- 重试机制:自动重试,提高唤醒成功率
- MAC 地址兼容:支持多种 MAC 地址格式(
:、-、空格分隔)
- 智能扫描:自动检测网络接口并扫描所有子网
- 高性能:支持 fping/arping 批量扫描,扫描速度提升 5-10 倍
- 缓存机制:扫描结果缓存 5 分钟,避免重复扫描
- 实时刷新:支持手动刷新获取最新设备列表
- 在线检测:自动检测设备在线状态
- 设备信息:支持设备名称、IP、MAC 地址、描述等信息
- 快速操作:一键唤醒、编辑、删除设备
docker run -d \
--name nextwol \
--network host \
-v $(pwd)/config:/app/config \
-e PORT=3000 \
fly1029/nextwol:latestdocker run -d \
--name nextwol \
--network host \
-v $(pwd)/config:/app/config \
-e PUID=1000 \
-e PGID=1000 \
-e PORT=3000 \
fly1029/nextwol:latestdocker build -t nextwol:latest .nextwol/
├── app/ # Next.js App Router
│ ├── api/ # API 路由
│ └── page.tsx # 主页面
├── components/ # React 组件
├── lib/ # 工具函数
│ ├── wol.ts # WOL 唤醒功能
│ └── arp.ts # ARP 扫描功能
├── hooks/ # React Hooks
├── messages/ # 国际化文件
└── config.ts # 配置文件
- 框架:Next.js 14.2.5
- UI 库:Radix UI
- 样式:Tailwind CSS
- 状态管理:SWR
- 表单:React Hook Form + Zod
- 国际化:next-intl
- 主题:next-themes
# 开发模式
pnpm dev
# 构建
pnpm build
# 生产模式
pnpm start
# 代码检查
pnpm lintPOST /api/device/wake
Content-Type: application/json
{
"mac": "00:11:22:33:44:55",
"port": 9
}GET /api/device/scan
GET /api/device/scan?refresh=true # 强制刷新GET /api/device/{ip}GET /api/device # 获取所有设备
POST /api/device # 创建设备
PUT /api/device # 更新设备
DELETE /api/device # 删除设备- 默认并发数:200(可配置)
- 扫描延迟:500ms(ARP 表更新等待时间)
- 工具优先级:arping > fping > 标准 ping
- 扫描结果缓存:5 分钟
- 自动过期:缓存过期后自动刷新
- 手动刷新:支持强制刷新获取最新数据
应用会自动检查 GitHub Releases 中的最新版本,并在发现新版本时提示用户更新。
- 点击页面右上角的版本号可查看详细版本信息
- 显示当前版本、构建时间、提交版本等信息
- 支持查看源代码链接
- 检测到新版本时会自动弹出更新提示对话框
- 用户可以选择立即更新或稍后提醒
- 每个版本只提示一次,避免重复打扰
可以通过环境变量配置 GitHub 仓库信息:
# Docker Compose
environment:
- GITHUB_REPO_OWNER=fly1029
- GITHUB_REPO_NAME=nextwol# 获取版本信息
GET /api/version
# 检查更新
GET /api/version?check=true响应示例:
{
"version": "0.1.0",
"buildTime": 1234567890,
"revision": "abc1234",
"hasUpdate": true,
"latestVersion": "0.2.0",
"updateUrl": "https://github.com/znonymous29/nextwol/releases/latest"
}支持的语言:
- 🇺🇸 English (en-US)
- 🇨🇳 简体中文 (zh-CN)
欢迎提交 Issue 和 Pull Request!
MIT License
如有问题或建议,请提交 Issue。
注意:使用 WOL 功能需要目标设备支持并启用 Wake-on-LAN 功能。请确保在 BIOS/UEFI 和操作系统中正确配置了 WOL 设置。