什么是网络唤醒

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

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

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

1:可向网卡发送网络“唤醒帧”的软件。

2:可解码“唤醒帧”的网卡,该网卡同时还必须可以从辅助电源中获取能量,并能够向主板发送“唤醒信号”。 (基本上都支持)

先说被唤醒机器如何设置

1.Win7系统下设置如下图,计算机-》设备管理器-》网卡驱动属性

2.ipconfig –all 命令查看本机网卡的MAC地址

发送的网络数据包显示如下图,其中mac地址是随便填写的重复的09。

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, string ip)
{
byte[] magicBytes = getMagicPacket(mac);
point = new IPEndPoint(IPAddress.Parse(ip), port);//广播模式:255.255.255.255
try
{
client.Send(magicBytes, magicBytes.Length, point);
}
catch (SocketException e) { MessageBox.Show(e.Message); }
} /// <summary>
/// 字符串转16进制字节数组
/// </summary>
/// <param name="hexString"></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;
} /// <summary>
/// 拼装MAC魔术封包
/// </summary>
/// <param name="hexString"></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;
}

当然这只是在局域网中实现的,如果要在广域网中实现的话还需要路由器映射等什么的,本文不做讨论。

AMD官方的技术文档:http://files.cnblogs.com/zxlovenet/MagicPacket%E7%99%BD%E7%9A%AE%E4%B9%A6.pdf

C#网络唤醒的更多相关文章

  1. C# 远程网络唤醒介绍及代码

    一.定义 网络唤醒:唤醒休眠状态下的计算机,而不是已关机的计算机. 优势:可通过定时功能实现自动唤醒计算机,减少人力使用. 实现方法:通过被唤醒机的MAC地址进行广播发送请求,唤醒计算机. 二.硬件设 ...

  2. python socket发送魔法包网络唤醒开机.py

    python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...

  3. 网络唤醒全攻略(Wake On Lan)

    家里组了台服务器存放资料,或者作为开发服务器,远程登陆成为刚性需求,由于机器需要的时候才用到,所以如果经常开机的话很费电,按需开机是最佳办法:网上教程很多,但是比较杂乱,表达累赘:还是自己总结一篇简单 ...

  4. 网络唤醒原理浅析(Wake On LAN)

    之前我的一篇文章<网络唤醒全攻略(Wake On Lan)>介绍过如何设置远程唤醒电脑,着重于使用,这篇主要从原理方面解析一下当中的奥妙: 原理 将唤醒魔术包发送的被唤醒机器的网卡上,魔术 ...

  5. 网络唤醒(WOL)全解指南:原理篇

    什么是网络唤醒 网络唤醒(Wake-on-LAN,WOL)是一种计算机局域网唤醒技术,使局域网内处于关机或休眠状态的计算机,将状态转换成引导(Boot Loader)或运行状态.无线唤醒(Wake-o ...

  6. 网络唤醒(WOL)全解指南:原理篇【转】

    转自:https://blog.csdn.net/z5859095/article/details/82819075 什么是网络唤醒网络唤醒(Wake-on-LAN,WOL)是一种计算机局域网唤醒技术 ...

  7. Linux_10个需要了解的Linux网络和监控命令(转)

    源文地址:http://www.linuxde.net/2013/10/15325.html 1. hostname hostname 没有选项,显示主机名字 hostname –d 显示机器所属域名 ...

  8. 新华龙电子推出最新网络开发板(W5100&W5500方案)

    2014/12/16 | Filed under: TCP/IP芯片 and tagged with: C8051, W5100, W5500, 新华龙电子, 网络开发板 42 Views 深圳新华龙 ...

  9. 需要了解的 Linux 网络和监控命令

    列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslookup ...

随机推荐

  1. FTP主动模式和被动模式的区别【转】

    转自:http://www.cnblogs.com/xiaohh/p/4789813.html 基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口 ...

  2. Spark 保存文件 自定义分隔符

    Spark 保存文件 调整分隔符 废话 找了半天没找到,在某个地方看到了类似的(文中说的是读取的时候指定),试了一下保存,发现也好用,详细如下. 用法 df.write.option("de ...

  3. nexus maven私服搭建

    1.在服务器上安装jdk 2.下载 nexus-3.14.0-04-unix.tar.gz,并上传到服务器/opt目录 3.解压 tar -zxvf nexus-3.14.0-04-unix.tar. ...

  4. Python写入连接mysql失败

    执行如下连接数据库的语句: engine = create_engine('mysql://root:root@127.0.0.1/stock?charset=utf8') 报错如下: ImportE ...

  5. 【神经网络】BP算法解决XOR异或问题MATLAB版

    第一种 %% %用神经网络解决异或问题 clear clc close ms=4;%设置4个样本 a=[0 0;0 1;1 0;1 1];%设置输入向量 y=[0,1,1,0];%设置输出向量 n=2 ...

  6. sed行处理详解(交换行,合并行,删除行等)

    1.合并行 zj@zj:~/Script/blog_script$ cat test11234合并上下两行zj@zj:~/Script/blog_script$ sed '$!N;s/\n/\t/' ...

  7. python.pandas read and write CSV file

    #read and write csv of pandasimport pandas as pd goog =pd.read_csv(r'C:\python\demo\LiaoXueFeng\data ...

  8. 【Java】定义魔法数字,以及枚举类的构造方法的使用

    JavaWeb项目中需要定义各种常量时,常用方法有: 写到Property配置文件中,用静态代码块优先加载配置文件.参考http://www.cnblogs.com/guxin/p/java-prop ...

  9. centos 7 64安装mongodb

    官网连接地址:https://www.mongodb.com/download-center?jmp=nav#community 列表中没有CentOS!!我选的是这个Linux 64-bit leg ...

  10. git实践:对比svn

    先前只用过svn,自然也没有去对比什么好坏,亲自上手之后发现svn和git实在是有很多不同 svn优点: 学习成本对比非常低 服务器公司统一控制管理 安全机制, 不会每个人都拷贝一份, 可以对组员限制 ...