- 前言
- 远程开机实现思路(不能开机就死磕这几点)
- 远程开机说明
- 远程开机 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. 进入设备管理器
2. 高级设置
3. 电源管理(取消第一个,一般情况第一个取消了后面的都不能点了)
各大主板厂商官网
技嘉 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); }
总结
开机不成功,死磕上面几点。我就是这样的,现在遇到的计算机都能开机。