c#网络唤醒功能实现
发布时间:2022-07-03 03:26:51
标签:网络唤醒
网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的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;
}
0
投稿
猜你喜欢
- 使用spring redis的increment方法时,报错:nested exception is redis.clients.jedis
- 只需要调用该类的一个方法createNewFile(),但是在实际操作中需要注意一些事项,如判断文件是否存在,以及如何向新建文件中写入数据等
- 本文为大家分享两个实例,相信大家一定会喜欢。实例1:随机生成验证码图片并将之输出为一个png文件效果图:import java.awt.Co
- 一、项目概述之前有不少粉丝私信我说,能不能用Android原生的语言开发一款在手机上运行的游戏呢?说实话,使用java语言直接开发游戏这个需
- 本文实例讲述了C#实现终止正在执行的线程的实现方法,并针对一些容易出错的地方进行了深入分析,具体方法如下:一般来说,很多人都会使用Abort
- 本文实例为大家分享了Java实现24点小游戏的具体代码,供大家参考,具体内容如下程序设计要求:24点游戏是经典的纸牌益智游戏。常见游戏规则:
- 先看下面的这组字符,如果输出来,它是无法靠右对齐: Source Codestring[] s1 = { "300",
- 本文实例讲述了java采用中文方式显示时间的方法。分享给大家供大家参考。具体如下:其中t为秒,比如有时候需要计算两个任务相差多久,或者该任务
- 为什么要使用路由在之前我们的代码中,页面跳转使用的代码如下所示:Navigator.of(context).push( Mate
- 我就废话不多说了,大家还是直接看代码吧~Caused by: java.net.SocketException: Software caus
- java使用stream实现list中对象属性的合并:根据两个List中的某个相同字段合并成一条List,包含两个List中的字段一、前言为
- Netty是一个非常优秀的Socket框架。如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择。
- 本篇紧接上一篇内容继续,还是从继承里的细节开始1.代码块初始化关于代码块的定义和使用因为之前已经进行过介绍,所以这里就不再赘述,我们所关注的
- Jackson解析嵌套类(MismatchedInputException)具体报错如下问题描述:Jackson解析嵌套类问题 调
- 前言Word中可以针对不同文档排版设计要求来设置背景设置颜色。常见的可设置单一颜色、渐变色或加载图片来设置成背景。下面通过Java来设置以上
- 前言在 上一节 Spring解密 - 默认标签的解析 中,重点分析了 Spring 对默认标签是如何解析的,那么本章继续讲解标签解析,着重讲
- 前言最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录。供大家学习参考。Synchronized修饰非静态方法Syn
- 表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交造成的根本原因: 没有完整的进行一次,先请求表单页
- Commons Beanutils是Apache开源组
- 1、synchronized的作用为了避免临界区的竞态条件发生,有多种手段可以达到目的。阻塞式的解决方案:synchronized,Lock