文章目录[隐藏]
  • 前言
  • 远程开机实现思路(不能开机就死磕这几点)
  • 远程开机说明
  • 远程开机 bios 配置
  • 网卡设置
  • 各大主板厂商官网
  • 远程开机代码
  • 总结

前言

最近又开始部署以前的软件,软件使用了远程开关机功能。但是这次部署又遇到新的问题,有 win7 的计算机不能实现远程开机功能,测试了许久找到答案。如有其他问题可以讨论。

远程开机实现思路(不能开机就死磕这几点)

1. 首先需要计算机硬件支持,具体支持与否目前我也不知道,我遇到的计算机基本都支持,有一些很老的 xp 都支持;

2. 配置 bios,将有关 wake on lan 关键词的项设置为 enable;

3. 配置网卡;

4. 将 mac 地址组包后用 UDP 关播发出。

远程开机说明

远程开机原理(官方话)

网络远程开机,也被称作 Wake On Lan,其原理很简单,就是计算机处于关闭状态时,网卡仍然处于激活状态,可以接收来自网络的数据包,如果收到的数据包符合特定的格式,那么就启动机器。

这种数据包是具有特定格式的 UDP 数据报,被称为“魔术包”。UDP 端口不限,但很多实现都使用 2034 这个端口号。报文的载荷部分共 102 个字节,每六个字节为一组,这样就分成了 17 个组。其中第 1 组为固定的 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,第 2-17 组中的每个组都是远程机器网卡的 MAC 地址。

由于远程网卡虽然处于活动状态,但并没有网络协议栈的软件功能,所以也就不存在 IP 地址的概念,所以“魔术包”通常是 UDP 广播包,因为 UDP 广播包会使用对应的以太网广播包发送。

个人理解

其实就是将 MAC 地址转换成特定的数据包,然后通过 udp 广播发送出去。这是最基本的原理,前提是计算机要支持远程唤醒功能。

远程开机 bios 配置

关键词:wake on lan s5/wake on lan

"Remote Wake Up";

"Boot on LAN";

"Wake on LAN";

"PME Event WakeUp",;

"Resume by MAC LAN";

"Wake-Up by PCI card";

"Wake Up On PCI PME";

"Power On by PCI Card";

"WakeUp by PME of PCI";

"Power On By PCI Devices";

"WakeUp by Onborad LAN";

"Resume By PCI or PCI-E Ddevice

PCI 唤醒

关键词:Restore on AC power loss

我再这里卡了:

1、Power Off(当电流恢复时,计算机处在关机状态)

2、Power On(当电流恢复时,计算机处在开机状态)

3、Last state(最近一次的状态,也就是断电时的状态)

网卡设置

1. 进入设备管理器

 

远程开机配置说明_linux
2. 高级设置

 

远程开机配置说明_java_02
3. 电源管理(取消第一个,一般情况第一个取消了后面的都不能点了)

 

远程开机配置说明_http_03

各大主板厂商官网

技嘉   http://www.gigabyte.com.cn/
华硕   http://www.asus.com.cn/
微星   http://www.microstar.com.cn/
升技   http://www.abit.com.cn/
华擎   http://www.asrock.com.tw/index.cn.asp
英特尔 http://www.intel.com.cn/
精英   http://www.ecs.com.cn
磐正   http://www.epox.cn/
富士康 http://www.foxconn.com.cn/
七彩虹 http://tec.colorful.cn/
昂达   http://www.onda.cn/index.jsp
硕泰克 http://www.soltek.com.cn/
捷波   http://www.jetway.com.cn/home/index.asp
青云   http://www.albatron.com.tw/
富士康 http://www.foxconnchannel.com/
映泰   http://www.biostar.cn/
奔驰   http://www.sz-paradise.com/
建基   http://www.aopen.com.cn/
梅捷   http://www.soyo.com.cn/
双敏   http://www.unika.com.cn/(磐英)
泰安   http://www.tyan.com/l_chinese/
奥美嘉 http://www.aomg.com.cn/
冠盟   http://www.gamen.com.cn/

远程开机代码

注意点: MAC 地址一定要对/我用的是广播,你可以试试其他/端口我随便写的,似乎不影响
/* Note:
 * 被控计算机需要支持网络唤醒功能(Wake on LAN)
 * 1.组织魔法包(MgicPacket) 由 6 字节 0xFF 和重复 16 次的 MAC 地址  102 字节
 * 2.通过 UDP 的方式广播 IP 地址为路由的广播地址 如:网段为 192.168.1.x,IP 设为 192.168.1.255
 * @strMac:  格式示例 "20:af:0a:47:aa:bb"
 */
void TRemoteCtrlPC::wakeOnLAN(QString strMac)
{
    /*将字符串 MAC 转换成十六进制 存入数组*/
    char cstrMacAddr[6];
    bool isOK;
    for(int j = 0;j < 6; j++){
        if(j < 5){
            cstrMacAddr[j] = strMac.mid(strMac.indexOf(":",j*3) - 2,2).toInt(&isOK,16);
            if(false == isOK)
                return ;
        }else if(j == 5){
            cstrMacAddr[j] = strMac.mid(strMac.indexOf(":",j*3 - 1) + 1,2).toInt(&isOK,16);
            if(false == isOK)
                return ;
        }
    }

    /*构建一个魔术唤醒包  6 字节 0xFF 和  16 次的 Mac 地址*/
    QByteArray magicPacket;

    /*6 个 0xFF*/
    for(int i = 0;i < 6; i++){
        magicPacket[i] = 0xFF;
    }

    /*16 个 MAC*/
    for(int k = 0; k < 16; k++)
    {
        for(int l = 0; l < 6; l++)
            magicPacket[(k+1)*6 + l] = cstrMacAddr[l];
    }

    QHostAddress FakeAddress;
    FakeAddress.setAddress ("192.168.1.255");

    QUdpSocket udpSocket;
    udpSocket.writeDatagram(magicPacket, 102, FakeAddress, 9);
}

总结

开机不成功,死磕上面几点。我就是这样的,现在遇到的计算机都能开机。