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 ...
随机推荐
- [算法]——全排列(Permutation)以及next_permutation
排列(Arrangement),简单讲是从N个不同元素中取出M个,按照一定顺序排成一列,通常用A(M,N)表示.当M=N时,称为全排列(Permutation).从数学角度讲,全排列的个数A(N,N) ...
- 解决:Could not load type 'System.ServiceModel.Activation.HttpModule' from assemb
解决:Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceMode ...
- csc一些命令简记
C#在命令行进行编译的一些命令: csc使用详解 @echo off cd / cd C:\Program Files (x86)\MSBuild\12.0\Bin set /p var= 请输入文件 ...
- LoadTest内存和线程Troubleshooting实战
在端午节放假的三天中,我对正在开发的 Service 进行了 LoadTest,尝试在增大压力的条件下发现问题. 该 Service 为独立进程的 WCF 服务,宿主于 WindowsService, ...
- git tag查看、创建与删除
tag管理 查看tag 太多的话用 grep 过滤 $ git tag | grep dev_20150525 # 创建tag $ git tag -a dev_20150525_16 -m 'xxx ...
- 通俗易懂的深入理解js闭包
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...
- 有关HTML5 Video对象的ontimeupdate事件的问题
日前在做一个视频播放的页面,其中用到了HTML5的Video对象,这个是HTML5中新增的一个对象,支持多种不同格式的视频在线播放,功能比较强大,而且还扩展了许多事件,可以通过JavaScript脚本 ...
- CSS中一些不经意的细节问题1
CSS这样的语法,细节问题非常多,往往一些难以处理的问题,有可能是一些细节问题不到位,所以先记下一些,留给以后自己看看. 1.line-height:150%与line-height:1.5 的区别 ...
- 虚拟机锁定文件失败,开启模块snapshot失败解决办法
今天由于没有正常关闭虚拟机,导致出现打开虚拟机提示:锁定文件失败 虚拟机开启模块snapshot失败,后来从网上找打了资料解决了.解决办法:一:打开你存放虚拟机系统文件的文件夹,注意,是系统文件,不是 ...
- css解决谷歌,360浏览器默认最小字体为12px问题
当我们设置前台html页面样式问题字体小于12px;时,会发现不管怎么设置小于12px字体,在谷歌.360浏览器上都不生效. 但在火狐等浏览器上却可以正常设置,当你打开谷歌360的设置后会发现,它们设 ...