WOL远程开机

WOL远程开机

http://www.cnblogs.com/ZHF/p/3303082.html

最近在一直都在研究PC机硬件和软件相结合的软件,硬件信息都是通过C++与驱动结合获取。对于一个好久都没有接触C++的人来说看这些东西太费劲了,必须的重新捡一下C++的基础知识,必然也少不了C知识,底层都是通过C++与C结合,提供接口给J2EE调用,J2EE也忘的一干二净了。从C++那也了解到了AMT、ACPI、DPM等不少驱动的结合,可以取到哪些硬件信息和对硬件操作,有空就使用C#做了Demo,不过还是使用C#比较得心应手。

  这次是试验了一下网卡的Wake On Lan功能,就是能够在广域网和局域网能远程启动目标机器,需要网卡支持Wake on Lan功能,关闭机器后网卡的灯会一直亮着,还需要检查以下2点设置。

  1. 进入BIOS设置,Power->Automatic Power On里面,设置Wake on LAN = Enable/Automatic,不同机器的BIOS设置位置不同,找到对应的Wake on LAN选项设置就OK。

  2. 进入网卡设置,我的电脑->右键”管理“->设备管理器->网络适配器,找到对应的网卡右键”属性“->电源管理,勾选允许此设备唤醒计算机和子选项(只允许幻数据包唤醒计算机),”高级“选项卡里面,检查属性里的唤醒幻数据包=已启用 and 唤醒模式匹配=已启用。

  注:不同的网卡设置可能会不一样

  下面就用代码详细说明实现方式:

#region WOL远程唤醒机器
        /// <summary>
        /// 通过WOL远程唤醒机器方法
        /// 摘要:唤醒方法为网卡提供的魔术封包功能,即以广播模式发送6个FF加上16遍目标机器MAC地址的字节数组
        /// </summary>
        /// <param name="mac">要唤醒机器的MAC</param>
        /// <param name="ip">要唤醒机器的子网掩码</param>
        /// <param name="port">UDP消息发送端口</param>
        private static void WakeOnLan(string mac,string ip, int port)
        {
            IPEndPoint point;
            UdpClient client = new UdpClient();
            byte[] magicBytes = GetMagicPacket(mac);
            point = new IPEndPoint(IPAddress.Parse(ip), port);//广播模式:255.255.255.255
            try
            {
                int result = client.Send(magicBytes, magicBytes.Length, point);
            }
            catch (SocketException ex) {
                throw new Exception(ex.ToString());
            }
        }
        /// <summary>
        /// 拼装MAC魔术封包
        /// </summary>
        /// <param name="hexString">MAC地址字符串</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;
        }
        /// <summary>
        /// MAC地址字符串转16进制字节数组
        /// </summary>
        /// <param name="hexString">MAC地址字符串</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;
        }
        #endregion

  调用主函数:

static void Main(string[] args)
        {
            string macAddress, ipAddress;
            int port;
            Console.Write("Please input MAC:");
            macAddress = Console.ReadLine();
            if (string.IsNullOrEmpty(macAddress))
            {
                macAddress = "F8-0F-41-21-12-68";
                Console.WriteLine("Default MAC:" + macAddress);
            }

            Console.Write("Please input Subnet:");
            ipAddress = Console.ReadLine();
            if (string.IsNullOrEmpty(ipAddress))
            {
                ipAddress = "255.255.255.255";
                Console.WriteLine("Default Subnet:" + ipAddress);
            }

            Console.Write("Please input Port:");
            if (!string.IsNullOrEmpty(Console.ReadLine()))
            {
                port = int.Parse(Console.ReadLine());
            }
            else
            {
                port = 9000;
                Console.WriteLine("Default Port:" + port);
            }

            WakeOnLan(macAddress, ipAddress, port);

            Console.Read();
        }

  

  这个实例就介绍到这里吧,欢迎大家来拍砖!如有其它好的方法希望不要吝啬,拿出来分享给大家一块学习进步!

时间: 2024-08-08 17:54:54

WOL远程开机的相关文章

java代码实现网络远程开机

http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其原理简单来说是向目标主机发送特殊格式的数据包, 目标主机收到后,对系统进行启动. 具体方法. 设置bios开启Wake onLAN(WOL)功能 查看主机网卡的mac地址 将主机通过网卡连接到以太网上 发送开机编码,启动系统 其实就是通过socket向目标的机器发送MagicPacket(魔术包),

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

1.远程开机原理 远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊数据包,俗称魔术包(Magic Packet).魔术包的格式,包含有连续6个字节的“FF”和连续重复16次的MAC地址,你可以在任何协议的数据包中填上 "FFFFFFFFFFFF"+连续重复16次的MAC地址,就可利用该协议作出一个使用该协议的MagicPacket.如果远程计算机最后一次

极路由电脑远程开机

这算是一个老问题了,互联网上的方法一堆!前些天自己也折腾了下,主意是要取家里面的电脑,一天到晚天着耗电,关机了,要是想取东西取不出来!所以自然需要远程开机了,网上有好多说远程开机软件之类的,有些要收费有些不收费,但是实现不了!下面看看我的做法! 工具/原料 极路由一台 支持wake on lan的网卡一块(主要网卡支持即可) 方法/步骤 1 1.准备支持wake on lan网卡,大多数电脑主板自带的集成网卡都是支持的!大家先到BIOS里面去看下!有没这个选择项,如果有则说明支持该功能! 2 2

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

首先介绍相关知识. UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务. 下面是UDP与TCP的一些区别: **A)**UDP是无连接的.相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接. **B)**UDP是尽最大努力交付的.也就是说UDP协议无法保证数据能够准确的

Linux远程开机

一,什么情况下需要远程开机?    如果我们的服务器没有部署在本地(实际上通常都是这样的,我们会把服务器托管到IDC机房),   而且服务器在机房中不止一台,其中一台被关闭时,则我们可以远程连接一台没有关机的服务器上,   然后进行远程开机.    二,远程开机需要的软件     它需要wakeonlan这个软件,     从何处得到它?     它的官方站是:http://sourceforge.net/projects/wake-on-lan/     如果使用rpm包可以从这里下载:htt

网卡远程唤醒-远程开机再配合远程控制

远程开机再配合远程控制 procedure TForm1.Button2Click(Sender: TObject);var  vBuf:array[0..101] of char;  i,j:integer;begin  //包的格式很简单,在以太网包的任何位置上,  //以6个FF为先导,后面跟相应MAC地址重复16次即可:  for i:=0 to 5 do vBuf:=char($FF);  for i:=0 to 15 do  begin    j:=6+i*6;    vBuf[j]

如何实现LAN或WAN远程开机?

一.实现远程开机的原理 远程唤醒Wake onLAN(WOL),又叫远程开机.现在很多网卡都支持的功能.而远程唤醒的实现,主要是向目标主机发送特殊格式的数据包.其实就是通过socket向目标的机器发送MagicPacket(魔术包),魔术包的格式,包含有连续6个字节的"FF"和连续重复16次的MAC地址. 你可以在任何协议的数据包(如在TCP/IP.IPX包)中填上 "FFFFFFFFFFFF"+连续重复16次的MAC地址,就可利用该协议作出一个使用该协议的Magi

centos远程开机的操作

如果我们的服务器没有部署在本地(通常都会把服务器托管到IDC机房),而且服务器在机房中不止一台,其中一台被关闭时,则我们可以远程连接一台没有关机的服务器上,然后进行远程开机. 用yum命令安装远程开机需要的软件:yum install wol 如何进行远程开机? 第一步:首先要确定你的linux服务器是否支持远程开机?登录到目标服务器,用ethtool这个命令打印出网卡的信息 [[email protected] lhd]# ethtool eth0 Settings for eth0: Sup

Python 远程开机

用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机. 本文目标 远程开机原理 Python 远程开机代码实现 Python 关机说明 Python 开机 关于用程序来开机,是怎么做到的呢?这就是 WOL 技术 Wake-On-Lan, 利用计算机在关机或休眠状态时,网卡及主板部分仍然有微弱的供电,当然要保持电源是插上的,而且是有线连接.所以即使在关机情况下,网卡还是有一定运作能力的,可以监听计算机外部的网上广播信息,当发