以前在公司想要复制家里电脑的一些数据,需要上班前将家里电脑打开,之后在公司用远程工具连接家里的电脑复制数据,这样不仅浪费电,万一一不小心关机,在公司就只能干瞪眼了。
借助WoL技术(Wake-on Lan)可以将电脑远程开机,关于Wol,可以参考维基百科:《网络唤醒》 。它的基本原理就是支持Wol技术的网卡在电脑关机之后,网卡还有微弱的供电,当它发现网络广播的内容中有特定的“魔法数据包”,并且经过解析发现它所指的地址是自身所处的电脑时,网卡就会通知机内的主板、电源供应器,开始进行开机(或唤醒)的程序。
具体来说,只要发送特定格式的UDP广播数据包到子网中,就能将计算机唤醒,数据包格式:
FF FF FF FF FF FF FF | MAC 地址 × 16 | 4-6字节的密码(可空) |
---|
根据此,对应的java版本代码如下
import cn.hutool.core.util.HexUtil;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @author kdyzm
* @date 2023/12/7
*/
public class Application {
public static void main(String[] args) {
try {
InetAddress inetAddress = InetAddress.getByName("192.168.3.255");
int port = 9;
StringBuilder data = new StringBuilder("FFFFFFFFFFFF");
for (int i = 0; i < 16; i++) {
// 网卡MAC地址
data.append("58112208850B");
}
data.append("000000000000");
byte[] bytes = HexUtil.decodeHex(data.toString());
DatagramSocket datagramSocket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, inetAddress, port);
datagramSocket.send(packet);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
代码已经上传到gitee:https://gitee.com/kdyzm/wol.git
注:
- 广播地址是255.255.255.255,这里使用了子网广播地址192.168.3.255
- 端口号9是目标网卡的接收端口号,目标网卡会监听此端口号传过来的数据包
- 这里使用了6字节的密码"000000000000",其实没啥用,不加也行。
当然有了这个程序,还是不行的,还需要硬件支持和相关的配置开启。
第一步:检查Bios设置是否已经开启Wol
进入Bios之后,进入电源选项,每个品牌的可能长得都不一样,但是大差不差能看出点门道
类似于这种的配置将其开关打开。
第二步:配置计算机允许远程唤醒
之后再运行程序就应该可以实现远程开机了。
注意:本文归作者所有,未经作者允许,不得转载