溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

NodeJS如何通過魔術(shù)封包喚醒局域網(wǎng)計算機

發(fā)布時間:2022-06-13 10:04:50 來源:億速云 閱讀:211 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下NodeJS如何通過魔術(shù)封包喚醒局域網(wǎng)計算機的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

代碼如下:

/**
 * 通過魔術(shù)封包喚醒局域網(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)建魔術(shù)封包
 * @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)絡(luò)喚醒
 * @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如何通過魔術(shù)封包喚醒局域網(wǎng)計算機”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI