NodeJS通過魔術封包喚醒局域網(wǎng)計算機實例
更新時間:2022年06月11日 17:08:05 作者:若海
這篇文章主要為大家介紹了NodeJS通過魔術封包喚醒局域網(wǎng)計算機代碼實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
今天分享下NodeJS如何通過魔術封包喚醒局域網(wǎng)計算機的代碼吧。
/**
* 通過魔術封包喚醒局域網(wǎng)計算機
* @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');
/**
* 創(chuàng)建魔術封包
* @param {string} mac 網(wǎng)卡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;
}
/**
* 通過網(wǎng)絡喚醒
* @param {string} mac 網(wǎng)卡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);
}
);以上就是NodeJS通過魔術封包喚醒局域網(wǎng)計算機實例的詳細內容,更多關于NodeJS喚醒局域網(wǎng)計算機的資料請關注腳本之家其它相關文章!
相關文章
詳解NodeJS框架express的路徑映射(路由)功能及控制
這篇文章主要介紹了詳解NodeJS框架express的路徑映射(路由)功能及控制,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
Nodejs Buffer的使用及Stream流和事件機制詳解
這篇文章主要為大家介紹了Nodejs Buffer的使用及Stream流和事件機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
nodejs提示:cross-device link not permitted, rename錯誤的解決方法
這篇文章主要給大家介紹了關于nodejs提示:cross-device link not permitted, rename錯誤的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用nodejs具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06

