什么是网络唤醒
网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的IT管理人员可以经由网络远程唤醒一台处于休眠或关机状态的计算机。使用这一功能,IT管理人员可以在下班后,网络流量最小以及企业的正常运作最不受影响的时候完成所有操作系统及应用软件的升级及其他管理任务。

为了唤醒网络上的计算机,用户必须发出一种数据包,该数据包的格式与普通数据包不同,而且还必须使用相应的专用软件才能产生。当前比较普遍采用的是AMD公司制作的Magic
Packet,这套软件可以生成网络唤醒所需要的特殊数据包。该数据包包含有连续6个字节的“FF”和连续重复16次的MAC地址。Magic Packet
虽然只是AMD公司开发推广的一项技术,并非业界公认的标准,但是仍受到很多网卡制造商的支持,因此许多具有网络唤醒功能的网卡都能与之兼容。

今天说的就是如何用C#程序来远程唤醒局域网中的计算机,

要使用网络唤醒,你必须拥有:

1:可向网卡发送网络“唤醒帧”的软件。
2:可解码“唤醒帧”的网卡,该网卡同时还必须可以从辅助电源中获取能量,并能够向主板发送“唤醒信号”。

先说被唤醒机器如何设置
必须将被唤醒计算机BIOS中“Wake On LAN”或者“Resume by LAN”选项必须设置为“Enable”。
必须获取到被唤醒计算机网卡MAC

C#代码如下

    private IPEndPoint point;
private UdpClient client = new UdpClient(); /***唤醒远程机器方法
* @param
* mac 要唤醒的机器的MAC
*IP
* port udp消息发送端口
*摘要:唤醒方法为网卡提供的魔术封包功能,即以广播模式发送6个FF加上16遍目标MAC地址的字节数组
**/
private void wakeUp(string mac,int port)
{
byte[] magicBytes =StrUtility.getMagicPacket(mac);
point = new IPEndPoint(IPAddress.Parse("255.255.255.255"),port);//广播模式:255.255.255.255 try
{ client.Send(magicBytes, magicBytes.Length,point);
}
catch (SocketException) { } }
StrUtility.getMagicPacket代码如下 ///<summary>
///字符串转16进制字节数组
///</summary>
/// <param name="hexString"></param>
///<returns></returns>
public static byte[] strToHexByte(string hexString)
{
hexString =hexString.Replace(" ","");
if((hexString.Length % ) !=)
hexString += "";
byte[] returnBytes = new byte[hexString.Length /];
for (int i =; i < returnBytes.Length;i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * , ),);
return returnBytes; } ///<summary>
///拼装MAC魔术封包
///</summary>
/// <param name="hexString"></param>
///<returns></returns>
public static byte[] getMagicPacket(string macString)
{
byte[] returnBytes = new byte[];
string commandString ="FFFFFFFFFFFF"; for (int i = ; i < ;i++)
returnBytes[i] = Convert.ToByte(commandString.Substring(i * , ),);
byte[] macBytes =strToHexByte(macString);
for (int i = ; i < ;i++)
{
returnBytes[i] = macBytes[i %];
}
return returnBytes;
}

C#远程开机的更多相关文章

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

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

  2. Python 远程开机

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

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

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

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

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

  5. java实现远程开机

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

  6. linux远程开机

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

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

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

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

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

  9. ubuntu 远程开机

    启动者(电脑A)  ----------->  被远程开启的电脑(电脑B) 一.被远程开启的电脑(电脑B):1. 重新开机,并进到BIOS设定2. 把Wake On Land / Wake On ...

  10. Ubuntu远程开机 (Wake on Lan)

    启动者(A) 被远程开启者(B) 一.被远程开启的电脑(电脑B):1. 重新开机,并进到BIOS设定2. 把Wake On Land / Wake On PCI(E)设为Enable3. 储存并进入U ...

随机推荐

  1. DBA学习参考绝佳资料

    原文来自:pursuer.chen 原文地址:https://www.cnblogs.com/chenmh/default.aspx?page=1 [置顶]MongoDB 文章目录 2018-02-0 ...

  2. ubuntu16.04 tomcat7安装和编码修改(转发:https://blog.csdn.net/zl544434558/article/details/76735564)

    有直接通过命令安装的,但是我还是喜欢把文件下载下来,然后自己配置. 1,下载tomcat7二进制文件 https://tomcat.apache.org/download-70.cgi 2,解压tom ...

  3. myeclipse如何删除自带Javaee里面jar包

    myeclipse是我们在使用Java开发时的一款不错的集成开发环境软件,一般在开发web项目的时候,都要引入相关的jar包,javaee包就是其中一个,有时候其里面的jar包可能与我们需要的不匹配, ...

  4. nginx灰度环境

    1.nginx.conf split_clients "${remote_addr}AAA" $request_type { 25% "abtest"; * & ...

  5. 基本运算符与流程控制(Day5)

    一  运算符 1.算数运算 2.比较运算 3.赋值运算 4.逻辑运算 and注解: 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际 ...

  6. table实现 js数据访问 传递json数据用render_to_response

    $(document).ready(function(){ $.ajax({ url:'/query/', dataType:'json', type:'GET', success:function( ...

  7. s5_day9作业

    # 1 编写 tail -f a.txt |grep 'error' |grep '404'命令,周一默写 # import time # def tail(filepath,encoding='ut ...

  8. PL/SQL编程—包

    1.PLSQL 中的包就相当于java中的package,主要好处有(1)防止命名污染,(2)功能统一,(3)允许重载,(4)可以隐藏核心代码,(5)最重要的就是断开依赖链. 2.对于一个程序需要大量 ...

  9. POJ - 2289 Jamie's Contact Groups (二分图多重匹配)

    题意:N个人,M个团体.每个人有属于自己的一些团体编号.将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少. 分析:一个一对多的二分图匹配,且是最大值最小化问题.二分图的多重匹配建 ...

  10. Loadrunner场景设计篇——负载生成器

    1  简介 当执行一个场景时,Controller把场景中的每个用户配到负载生成器(Load generator). 所谓的负载生成器(Load Generator)就是执行Vuser脚本,运行Vus ...