WOL远程开机
最近在一直都在研究PC机硬件和软件相结合的软件,硬件信息都是通过C++与驱动结合获取。对于一个好久都没有接触C++的人来说看这些东西太费劲了,必须的重新捡一下C++的基础知识,必然也少不了C知识,底层都是通过C++与C结合,提供接口给J2EE调用,J2EE也忘的一干二净了。从C++那也了解到了AMT、ACPI、DPM等不少驱动的结合,可以取到哪些硬件信息和对硬件操作,有空就使用C#做了Demo,不过还是使用C#比较得心应手。
这次是试验了一下网卡的Wake On Lan功能,就是能够在广域网和局域网能远程启动目标机器,需要网卡支持Wake on Lan功能,关闭机器后网卡的灯会一直亮着,还需要检查以下2点设置。
1. 进入BIOS设置,Power->Automatic Power On里面,设置Wake on LAN = Enable/Automatic,不同机器的BIOS设置位置不同,找到对应的Wake on LAN选项设置就OK。
2. 进入网卡设置,我的电脑->右键”管理“->设备管理器->网络适配器,找到对应的网卡右键”属性“->电源管理,勾选允许此设备唤醒计算机和子选项(只允许幻数据包唤醒计算机),”高级“选项卡里面,检查属性里的唤醒幻数据包=已启用 and 唤醒模式匹配=已启用。
注:不同的网卡设置可能会不一样
下面就用代码详细说明实现方式:
#region WOL远程唤醒机器
/// <summary>
/// 通过WOL远程唤醒机器方法
/// 摘要:唤醒方法为网卡提供的魔术封包功能,即以广播模式发送6个FF加上16遍目标机器MAC地址的字节数组
/// </summary>
/// <param name="mac">要唤醒机器的MAC</param>
/// <param name="ip">要唤醒机器的子网掩码</param>
/// <param name="port">UDP消息发送端口</param>
private static void WakeOnLan(string mac,string ip, int port)
{
IPEndPoint point;
UdpClient client = new UdpClient();
byte[] magicBytes = GetMagicPacket(mac);
point = new IPEndPoint(IPAddress.Parse(ip), port);//广播模式:255.255.255.255
try
{
int result = client.Send(magicBytes, magicBytes.Length, point);
}
catch (SocketException ex) {
throw new Exception(ex.ToString());
}
}
/// <summary>
/// 拼装MAC魔术封包
/// </summary>
/// <param name="hexString">MAC地址字符串</param>
/// <returns></returns>
public static byte[] GetMagicPacket(string macString)
{
byte[] returnBytes = new byte[102];
string commandString = "FFFFFFFFFFFF";
for (int i = 0; i < 6; i++)
returnBytes[i] = Convert.ToByte(commandString.Substring(i * 2, 2), 16);
byte[] macBytes = StrToHexByte(macString);
for (int i = 6; i < 102; i++)
{
returnBytes[i] = macBytes[i % 6];
}
return returnBytes;
}
/// <summary>
/// MAC地址字符串转16进制字节数组
/// </summary>
/// <param name="hexString">MAC地址字符串</param>
/// <returns></returns>
public static byte[] StrToHexByte(string hexString)
{
hexString = hexString.Replace("-", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
#endregion
调用主函数:
static void Main(string[] args)
{
string macAddress, ipAddress;
int port;
Console.Write("Please input MAC:");
macAddress = Console.ReadLine();
if (string.IsNullOrEmpty(macAddress))
{
macAddress = "F8-0F-41-21-12-68";
Console.WriteLine("Default MAC:" + macAddress);
} Console.Write("Please input Subnet:");
ipAddress = Console.ReadLine();
if (string.IsNullOrEmpty(ipAddress))
{
ipAddress = "255.255.255.255";
Console.WriteLine("Default Subnet:" + ipAddress);
} Console.Write("Please input Port:");
if (!string.IsNullOrEmpty(Console.ReadLine()))
{
port = int.Parse(Console.ReadLine());
}
else
{
port = 9000;
Console.WriteLine("Default Port:" + port);
} WakeOnLan(macAddress, ipAddress, port); Console.Read();
}
这个实例就介绍到这里吧,欢迎大家来拍砖!如有其它好的方法希望不要吝啬,拿出来分享给大家一块学习进步!
WOL远程开机的更多相关文章
- linux 通过wol远程开机【转】
转自:http://yangbajing.blog.chinaunix.net/uid-10480699-id-5179860.html 今天发现个可以对linux服务器进行远程开机的软件-wakeo ...
- java使用wol远程开机
param类 package com.meeno.framework.wol.params; import lombok.Getter; import lombok.NoArgsConstructor ...
- FRP+WoL实现远程开机+远程桌面
FRP+WoL实现远程开机+远程桌面 故事背景 这是一个很复杂而且很久远的故事,如果要讲的话,这个故事可以追溯到1981年(「都是废话,没有干货,如果不感兴趣请从第二章开始」),简单来说: 1981年 ...
- C#实现局域网内远程开机
1.远程开机原理 远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊 ...
- Python 远程开机
用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机. 本文目标 远程开机原理 Python 远程开机代码实现 Python ...
- java代码实现网络远程开机
http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其 ...
- C#实现远程开机(局域网测试通过)
首先介绍相关知识. UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联 ...
- linux远程开机
它需要wakeonlan这个软件, 从何处得到它? 它的官方站是:http://sourceforge.net/projects/wake-on-lan/ 如果使用rpm包可以 ...
- java实现远程开机
import java.io.IOException; import java.net.*;public class 远程开机 { public static void main(String[] a ...
随机推荐
- 如何在子线程中使用Toast和更新UI
因为没一个Looper处理消息循环,所以子线程中无法使用Toast 方法: Looper.prepare(); Toast.makeText(getActivity(),"刷到底啦" ...
- React Native填坑之旅--Button篇
从React过来,发现React Native(以下简称RN)居然没有Button.隔壁的iOS是有UIButton的,隔壁的隔壁的Android里也是有的.没有Button,就没有点击效果啊.这还真 ...
- 河南省第八届ACM程序设计大赛
A:挑战密室 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...
- Druid的使用步骤
一.关于Druid Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource 高效可 ...
- 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题
微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImage ...
- 《Linux内核设计与实现》读书笔记(十四)- 块I/O层
最近太忙,居然过了2个月才更新第十四章.... 主要内容: 块设备简介 内核访问块设备的方法 内核I/O调度程序 1. 块设备简介 I/O设备主要有2类: 字符设备:只能顺序读写设备中的内容,比如 串 ...
- 消灭ASP.NET CachedPathData.ValidatePath引起的HttpException异常
在博客程序的日志中经常会出现这样的错误日志: Url: http://www.cnblogs.com/cmt/p/sokcet_memory_leak.html (这个URL仅是示例)UserAgen ...
- [Hyper-V]制作一个干净的操作系统模板
描述: 在Hyper-V里创建虚拟机的时候,我们可以先来创建一个干净的操作系统,将其制作为操作系统模板,该虚拟机的磁盘文件也将被视作基础磁盘以方便基于它创建差异化磁盘 安装其它虚拟机的时候就可以差异化 ...
- Twitter API升级至1.1
Twitter API 1.1是至今最大的一次升级,从3月份提出,到6月11日1.0版本已经全面停止调用.关于1.1版本升级特性可访问: https://dev.twitter.com/docs/ap ...
- memcached(二)事件模型源码分析
memcachedd事件模型 在memcachedd中,作者为了专注于缓存的设计,使用了libevent来开发事件模型.memcachedd的时间模型同nginx的类似,拥有一个主进行(master) ...