java实现远程局域网内pc开机
2015-07-13 18:07
176 查看
远程唤醒的主机需要具备以下条件:
1. 运行gpedit.msc,计算机配置,windows设置,安全设置,本地策略,用户权利指派,从远程系统强制关机,双击,添加用户或组,高级,立即查找,添加everyone即可。
2. 主板(和网卡)支持WOL功能,有些机器还需要在BIOS中设置开启该功
原理是:
设置bios开启Wake onLAN(WOL)功能
查看主机网卡的mac地址
将主机通过网卡连接到以太网上
发送开机编码,启动系统
其实就是通过socket向目标的机器发送MagicPacket(魔术包),魔术包的格式,包含有连续6个字节的“FF”和连续重复16次的MAC地址。你可以在任何协议的数据包(如在TCP/IP、IPX包)中填上 “FFFFFFFFFFFF”+连续重复16次的MAC地址,就可利用该协议作出一个使用该协议的MagicPacket。只要NIC检测到数据包中任何地方有这样的片段,便会将计算机唤醒。
1. 运行gpedit.msc,计算机配置,windows设置,安全设置,本地策略,用户权利指派,从远程系统强制关机,双击,添加用户或组,高级,立即查找,添加everyone即可。
2. 主板(和网卡)支持WOL功能,有些机器还需要在BIOS中设置开启该功
package Remoteboot; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 远程开机 * @author Administrator * */ public class test { public static void main(String[] args) throws IOException { int port = 20105; String macAddress = "00-E0-B4-0C-9F-10"; // String destIP = "255.255.255.255";// 广播地址 String destIP = "192.168.3.210";// 广播地址 // 检测 mac 地址,并将其转换为二进制 byte[] destMac = getMacBytes(macAddress); if (destMac == null){ return; } InetAddress destHost = InetAddress.getByName(destIP); // construct packet data byte[] magicBytes = new byte[102]; // 将数据包的前6位放入0xFF即 "FF"的二进制 for (int i = 0; i < 6; i++){ magicBytes[i] = (byte) 0xFF; } // 从第7个位置开始把mac地址放入16次 for (int i = 0; i < 16; i++) { for (int j = 0; j < destMac.length; j++) { magicBytes[6 + destMac.length * i + j] = destMac[j]; } } // create packet DatagramPacket dp = null; dp = new DatagramPacket(magicBytes, magicBytes.length, destHost, port); DatagramSocket ds = new DatagramSocket(); ds.send(dp); ds.close(); System.out.println("ok"); } private static byte[] getMacBytes(String macStr) throws IllegalArgumentException { byte[] bytes = new byte[6]; String[] hex = macStr.split("(\\:|\\-)"); if (hex.length != 6) { throw new IllegalArgumentException("Invalid MAC address."); } try { for (int i = 0; i < 6; i++) { bytes[i] = (byte) Integer.parseInt(hex[i], 16); } } catch (NumberFormatException e) { throw new IllegalArgumentException("Invalid hex digit in MAC address."); } return bytes; } }
原理是:
设置bios开启Wake onLAN(WOL)功能
查看主机网卡的mac地址
将主机通过网卡连接到以太网上
发送开机编码,启动系统
其实就是通过socket向目标的机器发送MagicPacket(魔术包),魔术包的格式,包含有连续6个字节的“FF”和连续重复16次的MAC地址。你可以在任何协议的数据包(如在TCP/IP、IPX包)中填上 “FFFFFFFFFFFF”+连续重复16次的MAC地址,就可利用该协议作出一个使用该协议的MagicPacket。只要NIC检测到数据包中任何地方有这样的片段,便会将计算机唤醒。
相关文章推荐
- java.io.OutputStream.flush()
- Eclipse中如何查看spring的bean之间的关联(依赖)
- Eclipse常用设置
- 安装Eclipse打包插件Fat Jar
- java之 ------ 文件的输入、输出(二)
- Java读取json文件并对json数据进行读取、添加、删除与修改操作
- java 时间纪元与时区介绍
- Java Webservice简单示例(非框架)
- Android Studio 1.1.0 导入eclipse android project
- struts2 redirect 传参数
- [LeetCode][Java] Multiply Strings
- 关于springMVC转换json出现的异常
- 关于springMVC转换json出现的异常
- ExecutorService与Executors例子的简单剖析
- JAVA实现DAO基本层CRUD操作
- 一个适合初学者看的java开发环境搭建
- 获取java native函数signature的快捷方法--javap工具
- Java图像拼接处理
- Android Studio,Eclipse常用快捷键中英文对照
- Java反编译插件