最近在一直都在研究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远程开机的更多相关文章

  1. linux 通过wol远程开机【转】

    转自:http://yangbajing.blog.chinaunix.net/uid-10480699-id-5179860.html 今天发现个可以对linux服务器进行远程开机的软件-wakeo ...

  2. java使用wol远程开机

    param类 package com.meeno.framework.wol.params; import lombok.Getter; import lombok.NoArgsConstructor ...

  3. FRP+WoL实现远程开机+远程桌面

    FRP+WoL实现远程开机+远程桌面 故事背景 这是一个很复杂而且很久远的故事,如果要讲的话,这个故事可以追溯到1981年(「都是废话,没有干货,如果不感兴趣请从第二章开始」),简单来说: 1981年 ...

  4. C#实现局域网内远程开机

    1.远程开机原理 远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊 ...

  5. Python 远程开机

    用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机. 本文目标 远程开机原理 Python 远程开机代码实现 Python ...

  6. java代码实现网络远程开机

    http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其 ...

  7. C#实现远程开机(局域网测试通过)

    首先介绍相关知识. UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联 ...

  8. linux远程开机

    它需要wakeonlan这个软件,     从何处得到它?     它的官方站是:http://sourceforge.net/projects/wake-on-lan/     如果使用rpm包可以 ...

  9. java实现远程开机

    import java.io.IOException; import java.net.*;public class 远程开机 { public static void main(String[] a ...

随机推荐

  1. Memcached监听多个端口_同一台Windows机器中启动多个Memcached服务

    下载Memcached服务器 假设你解压在"C:\Program Files\memcached\memcached.exe" 那么可以如下创建多个服务监听不同的端口啦 监听第一个 ...

  2. C2第四次作业解题报告

    看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量 http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.h ...

  3. 【原创】-- tftp安装配置及使用

    环境:Ubuntu 14.04  OK6410 环境搭建: (1) $ sudo apt-get install tftp tftpd openbsd-inetd 或者安装tftp的增强版本tftp- ...

  4. Docker Hub仓库注册,使用

    首先保证可以访问Docker Hub,所以需要先把host替换一下 : Google hosts ; 然后就是注册Docker Hub账户:https://hub.docker.com/; 然后就是在 ...

  5. Kali Linux Web 渗透测试视频教程— 第八课 nessus

    Kali Linux Web 渗透测试视频教程— 第八课 nessus 文/玄魂 视频课程地址:http://edu.51cto.com/course/course_id-1887.html 目录 n ...

  6. 通用对象池ObjectPool的一种简易设计和实现方案

    对象池,最简单直接的作用当然是通过池来减少创建和销毁对象次数,实现对象的缓存和复用.我们熟知的线程池.数据库连接池.TCP连接池等等都是非常典型的对象池. 一个基本的简易对象池的主要功能实现我认为应该 ...

  7. AngularJS快速入门指南10:DOM节点

    AngularJS通过指令将application数据绑定到HTML DOM元素的属性上. ng-disabled指令 ng-disabled指令将AngularJS application数据绑定到 ...

  8. IMP-00038:无法转换为环境字符集句柄

    参考解决方案:http://www.cnblogs.com/wangsaiming/p/4947151.html

  9. 三国杀3v3心法——总述篇

    昔日,独孤求败前辈精研剑法,将其中奥妙化为独孤九剑,破尽天下武功.其中开篇总诀式提纲挈领,从宏观的层面阐述剑道,是领悟后面八式的基石,而之后各式则深入微观,可各破一类具体的武功.笔者亦曾苦心研究三国杀 ...

  10. PHP读取大文件的几种方法介绍

    读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办 ...