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

1、远程开机原理

     远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊数据包,俗称魔术包(Magic Packet)。魔术包的格式,包含有连续6个字节的“FF”和连续重复16次的MAC地址,你可以在任何协议的数据包中填上 "FFFFFFFFFFFF"+连续重复16次的MAC地址,就可利用该协议作出一个使用该协议的MagicPacket。如果远程计算机最后一次关机的时候是属于非正常关机(突然断电或者关机时死机等),唤醒就有可能会失败。

2、软硬件配置

    主板和网卡必须都支持远程唤醒功能。现在的主板和网卡一般都支持远程唤醒功能,在网卡中WOL一般默认Disable,所以需要在BIOS模式选择电源管理设置“Power ”选项,将“Wake up on LAN”项或“Wake on PCI Card”项均设置为“Enable”,启用该计算机的远程唤醒功能,如图1所示。

                                                                                         图1 BIOS中WOL设置界面

3、编程实现

        /// <summary>         /// 远程开机,网卡需要具备远程唤醒功能         /// </summary>         /// <param name="mac">网卡物理地址字符数组</param>         public static void WakeUp(byte[] mac)         {             UdpClient client = new UdpClient();             client.Connect(IPAddress.Broadcast, 9090);

            byte[] packet = new byte[17 * 6];

            for (int i = 0; i < 6; i++)                 packet[i] = 0xFF;

            for (int i = 1; i <= 16; i++)                 for (int j = 0; j < 6; j++)                     packet[i * 6 + j] = mac[j];

            int result = client.Send(packet, packet.Length);         }

        // 唤醒按钮事件代码

        private void button_Click(object sender, EventArgs e)         {             byte[] mac = new byte[6];

            //MAC地址分配到mac数组中             mac[0] = 0x00;             mac[1] = 0x01;             mac[2] = 0x80;             mac[3] = 0x79;             mac[4] = 0x08;             mac[5] = 0xD8;

            WakeUp(mac);         }

4、参考文献

    http://blog.csdn.net/config_man/article/details/6906566

    http://baike.baidu.com/view/1965454.htm

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能服务器开发

C++日志系统如何设计

笔者在写作本章节的时候,并不敢把此章节的标题叫做《高性能日志系统的设计》,之所以不敢加上“高性能”三个字的原因是,第一,我的对于日志系统设计知识和经验都来自于学...

1793
来自专栏FreeBuf

“撬锁”实战:绕过云锁提权某游戏私服

朋友给我了我一个游戏私服的shell,说是提权不下服务器,让我帮忙看看。本文仅为大家提供一个思路,这个方法可能很多人知道但是并没有公布到网络。我今天写出来只是为...

1155
来自专栏熊二哥

Linux快速入门01-基础概念

4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它。现在经过慢慢的成长,越来越觉得,Linux是每一个...

2065
来自专栏FreeBuf

没有身份凭证的情况下,攻击者就能登录FreeRADIUS

近期,来自卢森堡RESTENA的安全研究专家Stefan Winter在当前全球最流行的radius服务器中发现了一个TLS认证绕过漏洞。 ? FreeRADI...

2549
来自专栏云瓣

用 Node.js 把玩一番 Alfred Workflow

作为 Mac 上常年位居神器榜第一位的软件来说,Alfred 给我们带来的便利是不言而喻的,其中 workflow(工作流) 功不可没,在它上面可以轻松地查找任...

3813
来自专栏张戈的专栏

WordPress发布文章主动推送到百度,加快收录保护原创

工作实在太忙,也没时间打理网站。最近公司额外交待了一些网站 SEO 方面的优化任务让我关注(这就是啥都要会、啥都要做的苦逼运维的真实写照了...)。 于是抽空看...

2816
来自专栏Java帮帮-微信公众号-技术文章全总结

java中调用web service接口

1.首先要把AXIS包里的jar文件放到java项目的lib目录下,这里用的是AXIS1_4版本

1392
来自专栏电光石火

idea 创建的maven+spring+mybatis项目整合 报错无法创建bean

最近在做一个由maven构建的spring+spring mvc+mybatis项目,刚开始的时候是用自己的电脑Win10环境下的eclipse写的,托管到了码...

2796
来自专栏友弟技术工作室

Mac Book 上的touch id妙用1password6用 Touch ID 授权 sudo

使用新版的macbook或pro都是支持Touch ID。 Touch ID在工作生活中,有哪些妙用。 今天介绍一下我常用的touch id 1passwor...

3328
来自专栏Fundebug

Web应用架构入门之11个基本要素

译者: 读完这篇博客,你就可以回答一个经典的面试题:当你访问Google时,到底发生了什么?

1173

扫码关注云+社区