C#远程开机
什么是网络唤醒
网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的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#远程开机的更多相关文章
- 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,开放式系统互联 ...
- java实现远程开机
import java.io.IOException; import java.net.*;public class 远程开机 { public static void main(String[] a ...
- linux远程开机
它需要wakeonlan这个软件, 从何处得到它? 它的官方站是:http://sourceforge.net/projects/wake-on-lan/ 如果使用rpm包可以 ...
- linux 通过wol远程开机【转】
转自:http://yangbajing.blog.chinaunix.net/uid-10480699-id-5179860.html 今天发现个可以对linux服务器进行远程开机的软件-wakeo ...
- FRP+WoL实现远程开机+远程桌面
FRP+WoL实现远程开机+远程桌面 故事背景 这是一个很复杂而且很久远的故事,如果要讲的话,这个故事可以追溯到1981年(「都是废话,没有干货,如果不感兴趣请从第二章开始」),简单来说: 1981年 ...
- ubuntu 远程开机
启动者(电脑A) -----------> 被远程开启的电脑(电脑B) 一.被远程开启的电脑(电脑B):1. 重新开机,并进到BIOS设定2. 把Wake On Land / Wake On ...
- Ubuntu远程开机 (Wake on Lan)
启动者(A) 被远程开启者(B) 一.被远程开启的电脑(电脑B):1. 重新开机,并进到BIOS设定2. 把Wake On Land / Wake On PCI(E)设为Enable3. 储存并进入U ...
随机推荐
- ios cocos2d 使用 sneakyInput 插件
昨晚看了篇使用sneakyInput插件实现模拟手柄的代码,不过我加上后出现了很多问题.最后只看如何实现,没有自己动手去操作.今天终于吧问题都解决了.记录下来.也供别人参考. 首先要先加入libz.d ...
- WebService 综合案例
1. 需求: 集成公网手机号归属地查询服务; 对外发布自己的手机号归属地查询服务; 提供查询界面 //1. 使用 wsimport 生成公网客户端代码 // 2. 创建 SEI 接口 @WebServ ...
- js身份证号有效性验证
1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用户名和身份证号就可以实名 ...
- git 添加远程仓库后无法push
push的时候提示fatal: refusing to merge unrelated histories 假如我们的源是origin,分支是master,那么我们 需要这样写git pull o ...
- ionic3使用echart插件
安装 看官方文档可以知道ECharts可以在webpack中使用看这里,故我们可以使用npm下载安装到项目中 npm install echarts --save //下载ECharts npm in ...
- Java架构搜集
1. 2.
- 利用同步网盘搭建个人或团队SVN服务器
这篇文章是以前写的,现在强烈推荐两个站.1.http://git.oschina.com 2.http://www.coding.net. 推荐理由:1.可创建私有项目.2.免费稳定.3.VS2013 ...
- 双camera景深计算
https://sanwen8.cn/p/2e41VC5.html 本文系微信公众号<大话成像>,知乎专栏< all in camera>原创文章,转载请注明出处. 接着上一篇 ...
- 基于Promise对象的新一代Ajax API--fetch
***************************************************************** #fetch Request 使用isomorphic-fetch发 ...
- Android Studio Gradle Could not reserve enough space for object heap
Studio 创建第一个工程报错 Error:Unable to start the daemon process.This problem might be caused by incorrect ...