就是字面意思, 比如人在外面玩, 只需要手机一点,即可将家里的电脑打开.这个东西其实也没啥好解释的. 不想在遇到群里的那种无脑杠的人, 我想用软件实现这个功能, 非得说让我买个硬件放在家里.对不起,我没钱...
远程唤醒功能需要主板支持, 理论上10年内买的电脑, 主板上都有这个功能, 如果没有,那就用不了这个,只能自己买硬件去吧.首先说一下整个流程的配置.
第一步 先检查自己的主板bios里面有没有wol的开启功能,具体的开启步骤,我不说,这个自行百度一下, 因为主板型号不同,开启的地方不一样,所以用你的"主板型号+怎么开启wakeuponline功能" 当关键词去百度搜索,把wol功能打开. 至于说什么要去windows系统的硬件管理中 允许网卡唤醒启动的设置呢, 可开可不开, 我是没设置系统的限制,都是默认, 也能从远程正常唤醒
第二步 设置路由器,路由器上做端口映射,有些路由叫虚拟服务器啥的,也有不同的叫法, 目的是将内网机器的端口映射到wan口,在外网可以访问到这个端口. 端口号固定是9号端口,这里截图你们自己对照看一下自己的路由器怎么设置.
端口映射出去之后, 一般家里的IP都是动态IP, 经常会变,这里我们再设置一下DDNS(动态域名), 域名呢, 可以自己找免费的,也可以自己花个一二十块钱买个垃圾点的域名. 常见的有什么花生壳啦, dnspod啦,都可以做DDNS服务,这个一般路由器上也都有的, TPLINK 水星什么的也都有预设这个功能. 所以也不是什么难点.
最后一步就是用autojs去唤醒了, 代码也很简单, 此代码是从google上随便搜的, 然后改成autojs可用的. 但是貌似在局域网直接用IP来唤醒,好像无效, 然后我也没怎么研究, 本来内网唤醒,不是本次研究的重点. 所以怎么远程唤醒,才是重点...
那么重点来了, 上代码:
var domainName = "ddns.XXXX.online";
//mac地址是冒号为分隔符的格式,不要用其他格式
var macAddress = "00:8d:5c:88:94:b5";
var wol = new wakeUpOnline();
var res = wol.wakeUp(domainName, macAddress, 9);
log(res);
function wakeUpOnline() {
importClass(java.net.InetAddress);
importClass(java.net.DatagramPacket);
importClass(java.net.DatagramSocket);
importClass(java.lang.Integer);
importClass(java.lang.System);
/**
* 使用autojs在外网远程打开局域网内的电脑 本方法仅用于外网. 不适用于无线网卡
* @param {string} host 路由器的wan口iP或者域名
* @param {string} mac 被远程开机电脑的网卡mac地址
* @param {int} port 开机端口号, 内网为9号端口. 这里填你映射出去的端口号
* @returns
*/
this.wakeUp = function(host, mac, port) {
try {
let macBytes = getMacBytes(mac);
let bytes = util.java.array('byte', 6 + 16 * macBytes.length);
for (let i = 0; i < 6; i++) {
bytes[i] = 0xff - 256;
}
for (let i = 6; i < bytes.length; i += macBytes.length) {
System.arraycopy(macBytes, 0, bytes, i, macBytes.length);
}
let address = InetAddress.getByName(host);
let packet = new DatagramPacket(bytes, bytes.length, address, port);
let socket = new DatagramSocket();
socket.send(packet);
socket.close();
return "wol_package_sent_success";
} catch (e) {
console.log("错误信息: ", e.message);
console.log("错误发生在第%s行", e.lineNumber);
console.log("错误文件", e.fileName);
return "wol_package_sent_fail";
}
}
function getMacBytes(mac) {
let bytes = util.java.array('byte', 6);;
let hex = mac.split(":");
if (hex.length != 6) {
throw "Invalid MAC address.";
}
try {
for (let i = 0; i < 6; i++) {
int = Integer.parseInt(hex[i], 16);
if (int > 127) {
int = int - 256;
}
bytes[i] = int;
}
} catch (e) {
console.log("错误信息: ", e.message);
console.log("错误发生在第%s行", e.lineNumber);
console.log("错误文件", e.fileName);
throw "Invalid hex digit in MAC address.";
}
return bytes;
}
}
实现远程开机的功能就这么简单. 可以自己再写个UI界面来包装一下.好了,这次的分享就这么多.
全部0条评论
快来发表一下你的评论吧 !