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到结尾,去两端)

posted @ 2017-09-12 16:46  积点成线  阅读(1644)  评论(0编辑  收藏  举报