`
iaiai
  • 浏览: 2196823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java远程唤醒mac

    博客分类:
  • J2EE
 
阅读更多
关机的,大家都会……想比我就不说了吧!
通过IP,使用shutdown 命令,外加参数……附上地址,OK。

package com.iaiai.test;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 
 * <br/>
 * Title: TestOpenOS.java<br/>
 * E-Mail: 176291935@qq.com<br/>
 * QQ: 176291935<br/>
 * Http: iaiai.iteye.com<br/>
 * Create time: 2013-1-29 上午11:37:56<br/>
 * <br/>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class TestOpenOS {

	private int port = 10000;
	private String mac = "8C-89-A5-19-82-9A";
	private String ipAddress = "255.255.255.255";

	public TestOpenOS() {
		// TODO Auto-generated constructor stub
	}

	private void setMac(String mac) {
		this.mac = mac;
	}

	public TestOpenOS(int port, String mac, String ipAddress) {
		this.port = port;
		this.mac = mac;
		this.ipAddress = ipAddress;
	}

	public void sendOpenOS() {
		InetAddress destHost = null;
		DatagramSocket ds = null;
		try {
			destHost = InetAddress.getByName(ipAddress);
			byte[] destMac = getMacBytes(mac);
			byte[] magicBytes = new byte[102];

			// 将数据包的前六位放入0xFF即“FF”的二进制
			// 发一个BroadCast包,包的内容包括以下数据就可以了。
			// FF FF FF FF FF FF,6个FF是数据的开始,
			// 紧跟着16次MAC地址就可以了。
			for (int i = 0; i < 16; i++) {
				for (int j = 0; j < destMac.length; j++) {
					magicBytes[6 + destMac.length * i + j] = destMac[j];
					magicBytes[j] = (byte) 0xFF;
				}
			}

			// --------------------查看数据报发出的数据---------------------
			for (int i = 1; i <= 102; i++) {
				if (((i - 1) % 6) == 0) {
					System.out.println();
				}
				System.out.print(magicBytes[i - 1] + "===");
			}

			// System.out.println("port =" + port + ", destHost=" + destHost +
			// ",magicBytes.length = " + magicBytes.length);

			DatagramPacket dp = null;
			try {
				dp = new DatagramPacket(magicBytes, magicBytes.length, destHost, port);
				ds = new DatagramSocket();
				ds.send(dp);
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			if (null != ds) {
				// 关闭数据报流
				ds.close();
			}
		}
	}

	// 远程关机
	public void sendCloseOS() {

	}

	/**
	 * 将16进制的mac地址转换为二进制
	 * 
	 * @param macStr
	 * @return
	 * @throws IllegalArgumentException
	 */
	private static byte[] getMacBytes(String macStr) throws IllegalArgumentException {
		byte[] bytes = new byte[6];
		String[] hex = macStr.split("(\\:|\\-)");
		if (hex.length != 6) {
			throw new IllegalArgumentException("mac 地址有问题,你看看对不对?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;
	}

	public static void main(String[] args) {
		TestOpenOS w = new TestOpenOS();
		w.sendOpenOS();

		w.setMac("8C-89-A5-19-80-3D");
		w.sendOpenOS();
	}
}
分享到:
评论

相关推荐

    用Java实现的网络唤醒工具

    Java网络唤醒工具是一种基于Java编程语言开发的软件,它允许用户通过输入目标计算机的MAC地址和网络广播地址来远程启动该计算机。这个工具利用了"网络唤醒"(Wake-on-LAN,简称WOL)技术,这项技术使得在电源关闭或...

    java通过网络远程开机

    Java通过网络远程开机的技术主要基于 Wake-on-LAN (WoL) 协议,这是一种允许计算机在接收到特定的网络数据包后从休眠或关闭状态唤醒的功能。在同一个局域网(LAN)环境下,我们可以利用Java编程语言来发送WoL魔法包...

    网络唤醒专家,MAC地址唤醒电脑工具

    例如,当公司服务器需要定期更新或维护时,IT管理员可以在非工作时间远程唤醒服务器,完成任务后再将其关闭,节省能源。对于家庭用户,如果有一台电脑被设置为下载机,也可以利用WOL在需要时启动下载,不需保持电脑...

    WakeOnLan:通过 socket 广播 magic packet,实现目标主机远程唤醒(Wake on Lan)

    WakeOnLan是一种网络技术,允许用户通过网络远程启动计算机,即便该计算机处于关闭状态。...了解并掌握这一技术,可以帮助你更好地管理和维护网络中的设备,特别是在需要远程唤醒服务器或工作站的场景下。

    远程快关机完整

    - **唤醒网络(WOL)**:这是一种可以在网络上远程唤醒处于休眠或关闭状态的计算机的技术。它的工作原理是通过发送一个特定的“魔法包”(Magic Packet)到目标计算机的MAC地址,从而使其从休眠状态中唤醒。 - **...

    Java实现跨平台的MAC地址读取

    通过利用Java的`NetworkInterface`类,可以实现无需依赖底层操作系统的纯Java MAC地址读取功能,进而支持更广泛的网络应用需求,如远程唤醒和版权保护等。 #### 关键词 Java;MAC地址查询;跨平台 #### 1 引言 在...

    magic-packet-sender:库发送魔术包(唤醒局域网)。 用Java编码

    魔术包(Magic Packet)是一种网络通信协议,常用于远程唤醒(Wake-on-LAN,WOL)功能,允许用户通过网络启动远程计算机。该技术主要应用于局域网环境,通过发送特定格式的数据包来唤醒处于待机或休眠状态的设备。在...

    网络唤醒代码-实现WOL(wake on lan)

    例如,IT管理员可以在晚上关闭所有电脑,然后在需要时通过发送魔术包远程唤醒指定的机器进行更新或维护。 需要注意的是,不是所有的硬件和BIOS都支持WOL功能,因此在尝试使用此代码之前,应确保目标计算机的硬件和...

    WakeOnLanJava:用Java实现的Wake On Lan

    Wake On Lan(WOL)是一种网络唤醒技术,允许远程启动处于待机或关闭状态的计算机。这个技术通过发送一个特定的“魔术包”到目标计算机的网络接口来实现。现在,我们将深入探讨如何使用Java来实现Wake On Lan功能,...

    远程协助.rar

    9. **唤醒功能**:一些高级的远程协助软件,如向日葵,还支持远程唤醒(Wake-on-LAN)功能,即使目标电脑处于休眠状态,也能远程启动并进行控制。 10. **日志记录与审计**:为了追踪和审核远程操作,软件通常会记录...

    java-wakeonlan-开源

    Java WakeOnLan 开源项目是一个实用的工具,专门用于通过网络远程唤醒具有LAN唤醒功能的计算机。这个项目是基于Java编程语言实现的,因此它具备跨平台的特性,可以在任何安装了Java 1.4或更高版本的系统上运行。这种...

    Gui Java WakeOnLan-开源

    如果目标计算机支持WOL且网络设置正确,它将被远程唤醒。 4. **使用Ping功能**:在执行WOL之前,用户可以先进行Ping测试,确保目标计算机可达到且网络连接稳定。 对于开发者而言,这个开源项目提供了一个学习Java ...

    使用Email来唤醒您的计算机还能让Email控制一切

    在IT领域,通过电子邮件(Email)来控制和唤醒远程设备是一种常见的技术,尤其适用于远程管理和自动化操作。在Java开发中,这种技术可以帮助我们实现许多创新的功能。本文将深入探讨如何利用Email来唤醒计算机以及...

    SleepyPowerOnRest:使用唤醒局域网打开电脑的休息端点

    总的来说,SleepyPowerOnRest 是一个利用Java实现的 Wake-on-LAN 解决方案,旨在方便用户远程唤醒处于休眠或待机状态的计算机。通过深入理解和应用这些知识点,用户可以实现远程管理自己的设备,提高工作效率。

    远程开机源码(注意BIOS中要改电源设置)

    4. **编程语言**:远程开机源码可以使用各种编程语言实现,如Python、C++、Java等。这些代码通常会依赖于特定的库或API来处理网络通信。 5. **安全考虑**:尽管远程开机非常方便,但也要注意安全问题。确保只有授权...

    利用魔法封包技术写的远程开机程序

    远程开机技术,也被称为WOL(Wake-on-LAN),是一种允许用户通过网络唤醒处于休眠或关机状态的计算机的技术。这项技术基于“魔法封包”(Magic Packet)的概念,它是一个特殊格式的数据包,包含了目标设备的MAC地址...

    WakeOnLan-Deamon-开源

    "WakeOnLan-Deamon-开源"是一个专为MacOS X设计的开源软件,它以守护进程的形式运行,能够实现远程唤醒局域网(LAN)中的设备。这个程序的核心功能是通过网络发送特定的数据包,这些数据包被称为Magic Packet,能够...

    Nameless-WOL:适用于 Android 的 Wake-On-lan 应用程序,主要设计为与 Tasker 一起使用

    "Nameless-WOL"是一款专为Android平台设计的Wake-On-LAN(WOL)应用程序,其特色在于能够与Tasker集成,提供了一种方便的方式来远程唤醒支持WOL功能的计算机。Wake-On-LAN技术允许用户通过网络启动或唤醒处于休眠...

    Bullet:【主线】基于Ngrok内网穿透开源项目,稳定、高效的内网穿透系统。私有部署、云服务

    什么是 Bullet内网穿透?Bullet是一款开源的反向代理内网穿透利器,...远程网络唤醒(v1.2.3开始支持);Bullet的管理界面目前实现了Mac、linux、window全环境适配.理论上还可以支持ARM,有这方面用户需求的可以联系作

Global site tag (gtag.js) - Google Analytics