java实现远程开机
import java.io.IOException; import java.net.*;public class 远程开机 { public static void main(String[] args) { DatagramSocket ds = null; try { ds = new DatagramSocket(9999); //指定自己的port } catch (SocketException e) { System.out.println(e.getMessage()); } byte a = Integer.valueOf(0xb8).byteValue(); byte b = Integer.valueOf(0x97).byteValue(); byte c = Integer.valueOf(0x5a).byteValue(); byte d = Integer.valueOf(0x68).byteValue(); byte e = Integer.valueOf(0x64).byteValue(); byte f = Integer.valueOf(0x6f).byteValue(); byte g = Integer.valueOf(0xff).byteValue(); byte[] buf= {g,g,g,g,g,g,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f,a,b,c,d,e,f}; //(0xb8)(0x97)(0x5a)(0x68)(0x64)(0x6f) InetAddress address = null ; try { address = InetAddress.getByName("255.255.255.255"); //目标广播地址 } catch (UnknownHostException o) { System.out.println(o.getMessage()); } DatagramPacket dp = new DatagramPacket(buf, buf.length, address , 2222); //2222为目标端口,只要是合法端口就可以(65535以内) try { ds.send(dp); //发送数据 } catch (IOException o) { System.out.println(o.getMessage()); } ds.close(); } }
以上就是对于我的电脑需要用到的远程开机.java
其中(0xb8)(0x97)(0x5a)(0x68)(0x64)(0x6f)是我的电脑的MAC地址:b8:97:5a:68:64:6f,改成自己的编译一下就可以用,代码有点烂,发送的地址只要是局域网广播地址就可以。
至于原理百度百科远程开机中讲的很详细,我只做一点赘述:发送的包中必须有重复6次的ff加上重复16次的MAC地址,中间没有任何符号,一共就是1*6+6*16=102个字节(ff是16进制,二进制就是11111111,十进制就是255)。
下面是运行 远程开机.class 抓到的包
这是我抓到的包,可以看到包中含有那102个字节(50到结尾,去两端)