Node.js 实现局域网 Wake-on-LAN 唤醒功能
作者:慢半拍时间:2026-10-25 12:07:22浏览:123
本文介绍如何使用 Node.js 通过发送魔术封包(Magic Packet)来唤醒局域网内的计算机。文章提供了完整的代码实现,包括构建包含 MAC 地址的 UDP 数据包以及发送广播请求的具体步骤,帮助开发者快速掌握局域网远程开机技术。
Node.js 局域网唤醒代码实现
本文分享使用 Node.js 发送魔术封包以唤醒局域网中计算机的具体代码实现。
/**
* 通过魔术封包唤醒局域网计算机
* @author 若海 <wang@rehiy.com>
* @website http://www.rehiy.com
* @wiki https://en.wikipedia.org/wiki/Wake-on-LAN
* @docs http://support.amd.com/TechDocs/20213.pdf
*/
const net = require('net');
const udp = require('dgram');
/**
* 创建魔术封包
* @param {string} mac 网卡MAC地址
* @returns {Buffer}
*/
function createMagicPacket(mac) {
mac = mac.replace(/[^0-9a-fA-F]/g, '');
if (mac.length != 12) {
throw new Error(`Bad MAC address "${mac}"`);
}
const bufMac = Buffer.from(mac, 'hex');
let bufRes = Buffer.alloc(6, 0xff);
for (let i = 0; i < 16; i++) {
bufRes = Buffer.concat([bufRes, bufMac]);
}
return bufRes;
}
/**
* 通过网络唤醒
* @param {string} mac 网卡MAC地址
* @param {object} options 可选项
* @returns {Promise<boolean>}
*/
function wakeOnLAN(mac, options) {
options = Object.assign({
address: '255.255.255.255',
port: 7
}, options);
return new Promise((resolve, reject) => {
const packet = createMagicPacket(mac);
const socket = udp.createSocket(
net.isIPv6(options.address) ? 'udp6' : 'udp4'
);
socket.on('error', function (err) {
socket.close();
reject(err);
});
socket.once('listening', function () {
socket.setBroadcast(true);
});
socket.send(
packet,
0,
packet.length,
options.port,
options.address,
function (err, res) {
socket.close();
if (err) {
return reject(err);
}
resolve(res == packet.length);
}
);
});
}以下是一个简单的示例演示。
wakeOnLAN('30:9C:FF:FF:FF:FF').then(
res => {
console.log(res);
},
err => {
console.log(err.message);
}
);以上是关于 Node.js 利用魔术封包唤醒局域网计算机实例的详细介绍,如需了解更多相关技术资料,建议查阅本站其他文章。
作者最新文章
Java和JavaScript名字像但没关系?详解两者及HTML的技术分工
2026-11-03 20:24:10
Node.js 中 CommonJS 与 ES Modules 模块规范的区别及使用
2026-11-03 15:35:13
先学JS还是先学Java?全栈开发视角的学习路径规划
2026-11-03 13:35:26
解决Node.js安装后提示“node不是内部或外部命令”
2026-11-03 08:39:43
生产环境升级 Node.js 的风险评估与 LTS 版本选择
2026-11-02 10:30:14
