栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java远程开关机(全过程)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java远程开关机(全过程)

网络唤醒
  1. 网络唤醒要接通电源,要接网线,不能是wifi,在同一网段下进行网络唤醒最为省事
  2. 网络唤醒需要终端的主板和网卡支持
    ① 先进入BIOS中开启网络唤醒功能,在BIOS中找到“OnBoard LAN”选项,将它设成 “Enabled”。同时将“POWER MANAGEMENT SETUP(电源管理设置)”下的“Power On by LAN/Ring”选项设为“Enabled”,最后将“Wake On LAN(网络唤醒)”选项设置为“Enabled”(某些计算机的BIOS配置的选项名可能有些许不同)
    ② 右击“我的电脑”并选择“管理”选项,在随后出现的“计算机管理”窗口中找到“设备管理”,在设备列表中找到“网络适配器”下的本地网卡(注意是有线网卡,网卡名在‘网络与Internet’中查看),右击本地网卡并选择“属性”,在弹出的对话框中选择“高级”页签,选择“Wake on Magic …”或“网络唤醒”选项并将其值设置为“开启”,在同一个窗口中选择“电源管理”页签,在“允许设备唤醒计算机”以及“只允许幻数据包唤醒计算机”选项前打钩
  3. 代码(需要被控制计算机的mac地址):
      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();
       }
远程关机
  1. 添加注册表
    ① 按Windows键+ R,输入:regedit,找到 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem
    ② 右击system 选择新建 DWORD(32位)值
    ③ 输入以下标签:LocalAccountTokenFilterPolicy
    ④ 双击该值,然后将该值更改为1
  2. 编辑本地组策略
    ① 按Windows键+ R,输入:gpedit.msc,打开“组策略编辑器”
    ② 在“组策略”窗口的左窗格中打开“计算机配置”—“Windows 设置”—“安全设置”—“本地策略”—“用户权利分配”
    ③ 在右侧列表中选择“从远程系统强制关机”,单击对话框下方的“添加用户或组”按钮,然后在新弹出的对话框中输入“guest”,再单击“确定”
    ④ 在右侧列表中选择“拒绝本地登录”,把拒绝的guest项删除
    ⑤ 在右侧列表中选择“拒绝从网络访问此计算机”,把拒绝的guest项删除
    ⑥ 在右侧列表中选择“允许本地登录”,单击对话框下方的“添加用户或组”按钮,然后在新弹出的对话框中输入“guest”,再单击“确定”
    ⑦ 在“组策略”窗口的左窗格中打开“计算机配置”—“Windows 设置”—“安全设置”—“本地策略”—“安全选项”
    ⑧ 在右侧列表中选择“帐户: 使用空密码的本地帐户只允许进行控制台登录”,选择禁用
    ⑨ 右键“此电脑”,选择“管理”,双击“本地用户和组”,双击其下的“用户”,然后双击“Guest”,若是显示账户已禁用,取消禁用
    ⑩ 运行cmd管理员权限,输入net user guest /active:yes激活guest账户
  3. 重启计算机
  4. 代码(需要被控制计算机的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();
   	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号