网络唤醒工具WOL(适用于华为路由器下的设备)
2023-02-04 本文已影响0人
今天i你好吗
使用前需要先知道被唤醒设备的mac地址和路由器的lan口地址,
代码中配的是唤醒这台设备

然后把'192.168.8.255'和'F4:9F:F3:91:0D:5A'修改成自己当前环境的.
ip地址的前3位为自己路由器lan口的前3位,第四位改成255,比如华为路由器lan口的默认ip是192.168.3.1改成192.168.3.255即可
node.js版本
const dgram = require('node:dgram');
const client = dgram.createSocket('udp4');
console.log(process.argv);
const ip = process.argv[2] || '192.168.8.255';
const mac = process.argv[3] || 'F4:9F:F3:91:0D:5A';
const port = 9;
console.log(`ip: ${ip}`);
console.log(`mac: ${mac}`);
const macBytes = mac.split(':').map(v => Number.parseInt(v, 16) << 24 >> 24);
let data = new Array(6).fill(-1);
for (let index = 0; index < 16; index++) {
data = data.concat(macBytes);
}
client.send(new Uint8Array(data), port, ip, (e, r) => {
console.log(`sendCallBack: ${e || r}`);
client.close();
});
kotlin版本
package com.yzh.test
import java.net.DatagramPacket
import java.net.DatagramSocket
import java.net.InetSocketAddress
/**
* 作者:yzh
*
* 创建时间:2023/2/5 09:40
*
* 描述:
*
* 修订历史:
*/
object WolUtils {
@JvmStatic
fun main(args: Array<String>) {
wakeOnLan("192.168.8.255", "F4:9F:F3:91:0D:5A")
}
private fun wakeOnLan(ipStr: String, macStr: String) {
val macBytes = macStr.replace("-", ":").split(":").map { it.toInt(16).toByte() }
println(macBytes)
val data = ByteArray(6 * 17) { if (it < 6) -1 else macBytes[it % 6] }
DatagramSocket().run {
send(DatagramPacket(data, data.size, InetSocketAddress(ipStr, 9)))
close()
}
}
}
其他路由器下的设备未测试过.功能和这个相同,适用于pc和安卓
