就是字面意思, 比如人在外面玩, 只需要手機一點,即可將家里的電腦打開.這個東西其實也沒啥好解釋的. 不想在遇到群里的那種無腦杠的人, 我想用軟件實現這個功能, 非得說讓我買個硬件放在家里.對不起,我沒錢...
遠程喚醒功能需要主板支持, 理論上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界面來包裝一下.好了,這次的分享就這么多.
-
IP
+關注
關注
5文章
1716瀏覽量
149830 -
域名
+關注
關注
0文章
74瀏覽量
11329 -
端口
+關注
關注
4文章
988瀏覽量
32154
發布評論請先 登錄
相關推薦
評論