java使用wol远程开机
param类
package com.meeno.framework.wol.params;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Setter
@Getter
@NoArgsConstructor
public class WolParam {
/**
* ip
*/
private String ip;
/**
* mac
*/
private String mac;
public WolParam(String ip, String mac) {
this.ip = ip;
this.mac = mac;
}
}
WolUtils
package com.meeno.framework.wol;
import com.meeno.framework.wol.params.WolParam;
import org.springframework.util.CollectionUtils;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class WolUtils {
/**
* 批量唤醒
* @param params
*/
public static void batchWake(WolParam... params){
if(params != null && params.length != 0){
List<WolParam> list = Arrays.stream(params).collect(Collectors.toList());
batchWake(list);
}
}
/**
* 批量唤醒
* @param list
*/
public static void batchWake(List<WolParam> list){
if(!CollectionUtils.isEmpty(list)){
for (WolParam wolParam : list) {
wake(wolParam.getIp(), wolParam.getMac(), 4343);
}
}
}
/**
* 唤醒
* @param ip
* @param macAddr
* @param port
*/
// 魔术包的组成
// 魔术包的组成非常固定,由6对“FF”组成前缀,其余为重复16次的MAC地址组成。例如:试验机的MAC为:“28-D2-44-35-68-A7”,那么魔术包为:
// “0xFFFFFFFFFFFF28D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A7”
public static void wake(String ip, String macAddr, int port){
try {
//String ip = "192.168.0.72";
//mac地址
//String macAddr = "70-85-C2-8E-36-0B";
//端口
//int port = 4343;
byte[] macByte = new byte[6];
String[] ips = macAddr.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);
// 生成标准的数据报
DatagramPacket pack = new DatagramPacket(bys, bys.length, address, port);
// 创建标准套接字,用来发送数据报
DatagramSocket socket = new DatagramSocket();
// 发送魔法包
socket.send(pack);
socket.close();
System.out.println("发送结束");
} catch (Exception e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
batchWake(new WolParam("192.168.0.72","70-85-C2-8E-36-0B"));
}
}
java使用wol远程开机的更多相关文章
- linux 通过wol远程开机【转】
转自:http://yangbajing.blog.chinaunix.net/uid-10480699-id-5179860.html 今天发现个可以对linux服务器进行远程开机的软件-wakeo ...
- WOL远程开机
最近在一直都在研究PC机硬件和软件相结合的软件,硬件信息都是通过C++与驱动结合获取.对于一个好久都没有接触C++的人来说看这些东西太费劲了,必须的重新捡一下C++的基础知识,必然也少不了C知识,底层 ...
- java代码实现网络远程开机
http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其 ...
- java实现远程开机
import java.io.IOException; import java.net.*;public class 远程开机 { public static void main(String[] a ...
- FRP+WoL实现远程开机+远程桌面
FRP+WoL实现远程开机+远程桌面 故事背景 这是一个很复杂而且很久远的故事,如果要讲的话,这个故事可以追溯到1981年(「都是废话,没有干货,如果不感兴趣请从第二章开始」),简单来说: 1981年 ...
- C#实现局域网内远程开机
1.远程开机原理 远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊 ...
- Python 远程开机
用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机. 本文目标 远程开机原理 Python 远程开机代码实现 Python ...
- C#实现远程开机(局域网测试通过)
首先介绍相关知识. UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联 ...
- linux远程开机
它需要wakeonlan这个软件, 从何处得到它? 它的官方站是:http://sourceforge.net/projects/wake-on-lan/ 如果使用rpm包可以 ...
随机推荐
- ESP32非易失性存储整型数据笔记
基于ESP-IDF4.1 1 #include <stdio.h> 2 #include "freertos/FreeRTOS.h" 3 #include " ...
- Java | 字符串缓冲区(StringBuilder)
为什么要出现字符缓冲区 我们都知道,String类是不可变的,但是有的时候,我们要用到字符串的拼接,如果拼接的数量小的时候,还可以,但是如果拼接的数据量太大的话,内存的占用就太大了,所以这个时候再用S ...
- react-router 基本使用
# 1. 理解react-router react的一个插件库 专门用来实现一个SPA应用 基于react的项目基本都会用到此库 # 2. 几个重要问题## 1). SPA应用 单页Web应用(sin ...
- HTML - form表单操作
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- shell脚本(6)-shell数组
一.数组介绍 一个变量只能存一个值,现实中很多值需要存储,可以定义数组来存储一类的值. 二.基本数组 1.概念: 数组可以让用户一次性赋予多个值,需要读取数据时只需通过索引调用就可以方便读出. 2. ...
- Leetcode:637. 二叉树的层平均值
Leetcode:637. 二叉树的层平均值 Leetcode:637. 二叉树的层平均值 Talk is cheap . Show me the code . /** * Definition fo ...
- OOP-Klass模型 简略
class Model { public static int a = 1; public int b; public Model(int b) { this.b = b; } } public st ...
- 【LeetCode】面试题62. 圆圈中最后剩下的数字
题目:面试题62. 圆圈中最后剩下的数字 这题很有意思,也很巧妙,故记录下来. 官方题解思路,是约瑟夫环的数学解法: 我们将上述问题建模为函数 f(n, m),该函数的返回值为最终留下的元素的序号. ...
- GoAhead 远程命令执行漏洞(CVE-2017-17562)
poc地址 https://github.com/ivanitlearning/CVE-2017-17562 执行 msfvenom -a x64 --platform Linux -p linux/ ...
- 一、MinIO的基本概念
MinIO的官方网站非常详细,以下只是本人学习过程的整理 一.MinIO的基本概念 二.Windows安装与简单使用MinIO 三.Linux部署MinIO分布式集群 四.C#简单操作MinIO 一. ...