Skip to content
znonymous29Public

About

A simple Wake-on-LAN utility build with Next.js

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

43 Commits

Folders and files

Repository files navigation

NextWOL

一个基于 Next.js 构建的简单、高效的局域网唤醒(Wake-on-LAN)工具,支持设备管理、局域网扫描和远程唤醒功能。

Next.js TypeScript License

📋 更新日志

v0.1.3 (2024-08-29)

  • 优化: LAN 扫描自动过滤虚拟网络(Docker 172.16.x.x、VirtualBox 192.168.56.x、链路本地地址)
  • 优化: WOL 广播地址过滤虚拟网络,避免无效广播
  • 优化: 设备在线检测响应速度,离线设备从 9 秒降至 1 秒
  • 优化: 修复 fping 超时单位错误(毫秒/秒混淆)
  • 优化: SWR 请求去重,防止请求堆积
  • 安全: IP 地址接口添加格式校验,防止命令注入
  • 功能: 创建设备时检查 MAC 地址唯一性
  • 修复: 表单验证逻辑,使用正确的 handleSubmit 验证流程

v0.1.2

  • 初始版本

✨ 主要功能

  • 🔌 设备唤醒:支持跨子网唤醒,兼容 Windows 和 Linux 系统
  • 🔍 局域网扫描:智能扫描局域网设备,自动发现并添加设备
  • 📱 设备管理:创建、编辑、删除设备,支持设备在线状态检测
  • 🌐 多语言支持:支持中文和英文界面
  • 🎨 现代化UI:基于 Radix UI 和 Tailwind CSS 构建的响应式界面
  • ⚡ 高性能扫描:优化的 ARP 扫描算法,支持 fping/arping 加速
  • 💾 智能缓存:扫描结果缓存机制,提升响应速度
  • 🌓 主题切换:支持浅色/深色主题
  • 🔔 版本更新:自动检查新版本并提示更新

🚀 快速开始

使用 Docker Compose(推荐)

创建 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 install

运行开发服务器

pnpm 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 部署

基本部署

docker run -d \
  --name nextwol \
  --network host \
  -v $(pwd)/config:/app/config \
  -e PORT=3000 \
  fly1029/nextwol:latest

使用自定义用户运行(推荐)

docker run -d \
  --name nextwol \
  --network host \
  -v $(pwd)/config:/app/config \
  -e PUID=1000 \
  -e PGID=1000 \
  -e PORT=3000 \
  fly1029/nextwol:latest

构建自定义镜像

docker 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 lint

📝 API 文档

唤醒设备

POST /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

版本 API

# 获取版本信息
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 设置。

About

A simple Wake-on-LAN utility build with Next.js

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages