网络唤醒
- 网络唤醒要接通电源,要接网线,不能是wifi,在同一网段下进行网络唤醒最为省事
- 网络唤醒需要终端的主板和网卡支持
① 先进入BIOS中开启网络唤醒功能,在BIOS中找到“OnBoard LAN”选项,将它设成 “Enabled”。同时将“POWER MANAGEMENT SETUP(电源管理设置)”下的“Power On by LAN/Ring”选项设为“Enabled”,最后将“Wake On LAN(网络唤醒)”选项设置为“Enabled”(某些计算机的BIOS配置的选项名可能有些许不同)
② 右击“我的电脑”并选择“管理”选项,在随后出现的“计算机管理”窗口中找到“设备管理”,在设备列表中找到“网络适配器”下的本地网卡(注意是有线网卡,网卡名在‘网络与Internet’中查看),右击本地网卡并选择“属性”,在弹出的对话框中选择“高级”页签,选择“Wake on Magic …”或“网络唤醒”选项并将其值设置为“开启”,在同一个窗口中选择“电源管理”页签,在“允许设备唤醒计算机”以及“只允许幻数据包唤醒计算机”选项前打钩- 代码(需要被控制计算机的mac地址):
Lenovo系列电脑一般不支持网络唤醒功能
String mac = "";
try {
int port = 7;
byte[] macByte = new byte[6];
String[] ips = mac.split("\\:|\\-");
for (int i = 0; i < 6; i++) {
macByte[i] = (byte) Integer.parseInt(ips[i], 16);
}
// 用来存储网络唤醒数据包
byte[] bys = new byte[6 + 16 * macByte.length];
for (int i = 0; i < 6; i++) {
bys[i] = (byte) 0xff;
}
for (int i = 6; i < bys.length; i += macByte.length) {
System.arraycopy(macByte, 0, bys, i, macByte.length);
}
// 将字符形式的IP地址转换成标准的IP地址
// InetAddress address = InetAddress.getByName(ip);
InetAddress address = InetAddress.getByName("255.255.255.255");
// 生成标准的数据报
DatagramPacket pack = new DatagramPacket(bys, bys.length, address, port);
// 创建标准套接字,用来发送数据报
DatagramSocket socket = new DatagramSocket();
// 发送魔法包
socket.send(pack);
socket.close();
} catch (Exception e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
远程关机
- 添加注册表
① 按Windows键+ R,输入:regedit,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
② 右击system 选择新建 DWORD(32位)值
③ 输入以下标签:LocalAccountTokenFilterPolicy
④ 双击该值,然后将该值更改为1- 编辑本地组策略
① 按Windows键+ R,输入:gpedit.msc,打开“组策略编辑器”
② 在“组策略”窗口的左窗格中打开“计算机配置”—“Windows 设置”—“安全设置”—“本地策略”—“用户权利分配”
③ 在右侧列表中选择“从远程系统强制关机”,单击对话框下方的“添加用户或组”按钮,然后在新弹出的对话框中输入“guest”,再单击“确定”
④ 在右侧列表中选择“拒绝本地登录”,把拒绝的guest项删除
⑤ 在右侧列表中选择“拒绝从网络访问此计算机”,把拒绝的guest项删除
⑥ 在右侧列表中选择“允许本地登录”,单击对话框下方的“添加用户或组”按钮,然后在新弹出的对话框中输入“guest”,再单击“确定”
⑦ 在“组策略”窗口的左窗格中打开“计算机配置”—“Windows 设置”—“安全设置”—“本地策略”—“安全选项”
⑧ 在右侧列表中选择“帐户: 使用空密码的本地帐户只允许进行控制台登录”,选择禁用
⑨ 右键“此电脑”,选择“管理”,双击“本地用户和组”,双击其下的“用户”,然后双击“Guest”,若是显示账户已禁用,取消禁用
⑩ 运行cmd管理员权限,输入net user guest /active:yes激活guest账户- 重启计算机
- 代码(需要被控制计算机的ip、用户名和密码)://用户名为‘guest’,密码可为空
String ip = "";
String user = "guest";
String pwd = "";
try {
Runtime.getRuntime().exec("net use * /del /y");
Process process = Runtime.getRuntime()
.exec("net use \\\\" + ip + "\\ipc$ \"" + pwd + "\" /user:\"" + user + "\"");
int i = process.waitFor();// 等待命令执行完
if (i == 0) {
Runtime.getRuntime().exec("shutdown -s -t 0 -m \\\\" + ip + " -c \"test\" -f");
}
} catch (Exception e) {
e.printStackTrace();
}
若是想要重启计算机,在关机的基础上修改参数s为r就可以了
Runtime.getRuntime().exec("shutdown -r -t 0 -m \\\\" + ip + " -c \"test\" -f");