Java实现远程开关机(网络唤醒)

Java实现远程开关机(网络唤醒)Java实现远程开关机是做的一个在局域网下实现一台机器对多台机器的开关机控制远程唤醒实现是通过电源的一种协议进行控制的,需要知道被唤醒机器的mac地址首先要须知:网络唤醒条件网络唤醒需要终端的主板和网卡支持,需要先在BIOS设置支持网络唤醒网络唤醒要接通电源保证网卡能通电要接网线不能是wifi如果强制关机可能不能通过网络唤醒来开机跨交换机或者跨路由的话就有可能不支持唤醒跨多…

大家好,又见面了,我是你们的朋友全栈君。

Java实现远程开关机是做的一个在局域网下实现一台机器对多台机器的开关机控制
远程唤醒实现
是通过电源的一种协议进行控制的,需要知道被唤醒机器的mac地址

首先要须知:
网络唤醒条件
网络唤醒需要终端的主板和网卡支持,需要先在BIOS设置支持网络唤醒
网络唤醒要接通电源保证网卡能通电 要接网线 不能是wifi
如果强制关机 可能不能通过网络唤醒来开机
跨交换机或者跨路由的话就有可能不支持唤醒
跨多层交换机的话即使ping通也未必能唤醒
在同一网段下进行网络唤醒最为省事

下面对被唤醒机器惊醒配置(要不就乱套啦,在公司想开谁的机器都可以啦)
1、先进入BIOS中开启网络唤醒功能,在BIOS中找到“OnBoard LAN”选项,将它设成“Enabled”。同时将“POWER MANAGEMENT SETUP(电源管理设置)”下的“Power On by LAN/Ring”选项设为“Enabled”,最后将“Wake On LAN(网络唤醒)”选项设置为“Enabled”,设置好后保存退出。

2、右击“我的电脑”并选择“管理”选项,在随后出现的“计算机管理”窗口中找到“设备管理”,在设备列表中找到“网络适配器”下的本地网卡(注意是有线网卡),右击本地网卡并选择“属性”,在弹出的对话框中选择“高级”页签,选择“Wake on Magic Package”或“网络唤醒”选项并将其值设置为“开启”,在同一个窗口中选择“电源管理”页签,在“允许设备唤醒计算机”以及“只允许幻数据包唤醒计算机”选项前打钩,点击【确定】按钮;
在这里插入图片描述
在这里插入图片描述
上面就是配置啦!!!

下面上代码

String mac = "" //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,然后按键盘上的Enter。
找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

在这里插入图片描述
2、右击system 选择新建 DWORD(32位)值
在这里插入图片描述

3、输入以下标签:LocalAccountTokenFilterPolicy
在这里插入图片描述
4、双击该值,然后将该值更改为1。
在这里插入图片描述
退出注册表,然后重新启动计算机以确认更改

还有远程关机必须要设置密码!!!(重点)
下面上代码

String ip = "";   //ip
String user = "";   //被关机器用户名
String passwd = "";   //被关机器密码
try { 
   
                            Runtime.getRuntime().exec("net use * /del /y");
                            Process process = Runtime.getRuntime().exec("net use \\\\"+ip+"\\ipc$ \""+passwd+"\" /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();
                        }

关机结束…
补充:关机这一块主要是用cmd里的命令惊醒关机,前提要保持可以ping通
说一下命令的意思:

net use * /del /y   

清除所有已连接的通道,每次操作时要执行一下,不然可能会提示通道已占用的错误

net use \\ip\ipc$ "密码" /user:"用户名"

打开通道

shutdown -s -t 0 -m \\192.168.20.200 -c "test" -f

关机命令
可以用这三个命令在cmd中试一下

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137180.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python–socketserve源码分析(二)建议收藏

    BaseServer::self.process_request(request,client_address)实现原理:在类的继承关系中,当子类中没有相应的方法时就会去父类中寻找,当继承多个

    2021年12月18日
    43
  • 裴礼文数学分析中的典型问题与方法百度云_数学分析的典型问题

    裴礼文数学分析中的典型问题与方法百度云_数学分析的典型问题裴礼文《数学分析中的典型问题与方法》第2天31~60第1章一元函数极限3.求极限值的若干方法利用等价代换和初等变形求极限。 等价代换。 先求出可以求出来的值。 根号内最好转变为一个常数和一个分式的和。 等价无穷小代换。 注意只有在x出现的时候才可以用,如果是常数不能用等价无穷小代换,比如说1.3.1的第4问。efx-eb不能等价代换成efx-1-eb+1因为必是常数,所以不能够这样等价无穷小代换。应该以整体的思想,然后进行等价无穷小代换。 等价代换原理,源于分

    2022年8月11日
    7
  • 快速幂的大数运算_快速幂模

    快速幂的大数运算_快速幂模快速幂运算1.什么是快速幂2.快速幂的“小数”运算3.高精度(大数)的快速幂1.什么是快速幂快速幂,是指在进行幂运算的时候,用一种快速方法得出答案。比如,要求2^100的值,那按照最简单的方式,就是一个一个2去相乘,然后最终得到答案,那么这样就要计算100次,非常浪费时间,那么快速幂就是使用一种技巧使得将其计算次数减少,快速得到答案。2.快速幂的“小数”运算对于系统内置类型的整型,暂且叫他“小数”,这个时候进行快速幂运算,代码如下:#include<cstdio>#include&l

    2025年7月14日
    0
  • 后端:414 Request-URI Too Large解决方案

    后端:414 Request-URI Too Large解决方案Web项目接口请求会出现414Request-URITooLarge这个错误下面给大家分享一下相关解决办法:一、get请求改为Pos…

    2022年6月5日
    48
  • 学习:imfill[通俗易懂]

    学习:imfill[通俗易懂]Matlab函数imfill简介  函数功能:该函数用于填充图像区域和“空洞”。  语法格式:  BW2=imfill(BW)  这种格式将一张二值图像显示在屏幕上,允许用户使用鼠标在图像上点几个点,这几个点围成的区域即要填充的区域。要以这种交互方式操作,BW必须是一个二维的图像。用户可以通过按Backspace键或者Delete键来取消之前选择的区域;通过shift+鼠标左键

    2022年9月13日
    0
  • 你太强了我只能躺啊哈哈哈(超我太强的原因)

    大家好,我是二哥呀!之前在送书的时候做了一个小调查,问题是:“你是怎么认识二哥的?”我以为从知乎上了解的多一些,没想到,CSDN上的最多,看来二哥还是在CSDN上更有影响力一些,这个结果多少让我感到有些意外,因为我最近在知乎上更新得更勤快一些。写这篇文章的时候,我去CSDN上看了一眼我的主页。访问量突破了900万!按照目前的增长速度来看,年底突破1000万访问量应该没啥大问题。另外还有一些数据我觉得也挺牛逼的:原创文章数量957篇;作者总榜第12名;作者周榜第

    2022年4月10日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号