一文敲定 WOL 网络唤醒
Wol -> Wake On Lan ,局域网唤醒
阅读本文需要有一定的知识储备和使用经验
这功能 只能 在 局域网 里用,原因是依赖 MAC 地址
进电脑固件设置需要有一定能力,乱改设置把电脑开不了机了和 UP 没啥事
本文介绍的是 Wake On Lan <- 划重点,是局域网,要看 WAN 的,请看3 其他问题.2 最好的方法
Wol^1是一种网络标准,允许通过网络消息启动关机状态的计算机,俗称远程开机局域网。
前提条件
- 主板支持:首先,你的电脑要支持远程开机
没有硬件功能软件再好都没用,一般来讲,电脑支持 PCIe 2.2 标准(其实这个标准很早就推行了) - 保持供电:
没电你用毛电脑。 - 网卡支持:你的电脑网卡要与路由器有线连接。无线也行,但需要支持 WoWLAN 的补充标准
(可以加钱解决一切问题 -> 换网卡)。
配置步骤
启用幻数据包支持
在 BIOS、EFI 固件中配置
在开机时准确按下进入BIOS Setup
的键,包括但不限于F2
、DEL
等等进入 BIOS 设置菜单
找到与下列短语有关的配置:
remote wake-up
wake on WAN
resume by LAN
resume on LAN
wake up on LAN
power on by LAN
power up by LAN
resume by PCIe
resume on PCIe
wake up on PCIe
power on by PCIe
power up by PCIe
唤醒设置
幻数据包
等等,总之和 wake
了WAN
、LAN
这些词,也可能在PCIe
之类的菜单里出现
在系统中配置
无论魏晋,在前面配置了,在这里也要配置
进入操作系统,在开始中搜索devmgmt.msc
,打开设备管理器(其实右键 Win 菜单也有个设备管理器,但照顾一下Win7的用户)
- 找到 网络适配器 ,然后找到你的网卡(譬如
Realtek PCle GbE Family Controller
、Qualcomm Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.30)
) - 双击打开设备属性,找到 电源管理 ,勾选 允许系统关闭此设备以节约电源 、允许此设备唤醒计算机 。
- 至于下面这个 只允许幻数据包唤醒计算机 可勾可不勾
如果勾了,那么只有特定的 Wol 网络帧才能唤醒计算机;如果不勾,则只要有与该网口有关的网络通讯,都会唤醒计算机(不与该网口有关的不会唤醒,所以不需要担心网络上搞个广播电脑自己开了)
如果不勾,可能本来没想打开的设备会莫名其妙打开也不知道咋回事,可以勾上(犹在公共场合,可以防止骚扰)
一般还是建议勾上。 - 切换到 高级 选项卡,将属性
关机网络唤醒
、魔术封包唤醒
什么奇怪翻译、Wake on magic packet
之类名称的值设置为开启
、Enabled
- 应用后退出
电源设置
没错,这个也要配置
对于 用户
来讲。PC有以下几个状态
- 关
- 睡眠
- 开
但其实还挺复杂,光关机就有 2 个状态
描述后的部分是重新写的,因为 原文 实在看不懂
参见下表
状态 | ACPI 状态 | 描述 |
---|---|---|
正在运行Working |
S0 G0 | 系统完全可用。 未使用的硬件组件可以通过进入较低的电源状态来节省电源。 |
新 式 待 机Modern Standby |
S0 低功耗 | 某些 SoC 系统支持称为 新式待机 的低功耗空闲状态。在此状态下,系统可以非常快速地从低功耗状态切换到大功率状态,以响应硬件和网络事件。支持新式待机的系统不使用 S1-S3。 |
睡眠Sleep |
S1 S2 S3 | 系统似乎已关闭。 S1-S3 状态消耗的电力量小于 S0,S4以上。 S3 消耗的功率小于 S2,S2 消耗的功率于 S1。 系统通常支持这三种状态之一,而不是全部三种状态。在 S1-S3 状态的状态中,将刷新易失性内存以保持系统状态。 某些组件保持电源,以便计算机可以从键盘、LAN 或 USB 设备的输入中唤醒。在桌面上使用的混合睡眠是系统使用具有 S1-S3休眠文件的地方。 休眠文件保存系统状态,以防系统在睡眠时断电。注意: 支持新式待机的 SoC 系统不使用 S1-S3。 |
休眠Hibernate |
S4 | 系统似乎已关闭。 能耗降低到最低水平。 系统将易失性内存的内容保存到休眠文件以保留系统状态。 某些组件保持电源,以便计算机可以从键盘、LAN 或 USB 设备的输入中唤醒。 如果工作上下文存储在非易失性媒体上,则可以还原它。快速启动 是在创建休眠文件之前注销用户的位置。 这允许较小的休眠文件,更适合具有较少存储功能的系统。 |
软关机Soft off |
S5 G2 | 系统似乎已关闭。 此状态由完全关闭和启动周期组成。 |
机 械 关 闭Mechanical off |
G3 | 系统完全关闭,无需电源。 系统仅在完全重新启动后返回到工作状态。 |
从 Windows 8.1 开始至今(Windows 11),系统将 快速启动(S4)作为默认的关机方式。而在这种关机状态下,是 不支持 网络唤醒的。
休眠 和 快速启动的原理是一样的,但应用场景不同,写入休眠文件的内容也不同
就一般来讲,休眠会把几乎所有内存都写入内存文件,而快速启动只会写入譬如驱动程序、服务的内存进内存文件。
这也是大多数 WoL 相关的教程(包括本文)都会教你 关闭快速启动的原因:
如果你的电脑不支持休眠,那也肯定不支持快速启动。
- 打开
控制面板
- 硬件和声音 -> 电源选项 -> 更改电源按钮的功能
- 在下面的 关机设置 里 取消勾选 启用快速启动(推荐)
(如果是禁用状态无法设置,先点击 更改当前不可用的设置 进行授权)
验证
唤醒设备
命令提示符运行
1 | powercfg -devicequery wake_armed |
C:\Users\Administrator>powercfg -devicequery wake_armed
Qualcomm Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.30)
C:\Users\Administrator>
这里可以看到只有网卡一个设备被允许唤醒计算机
电源状态
可以 Win
+ R
运行下命令查看支持电源状态:
1 | cmd /k powercfg /a |
可以看到系统只有 S3 睡眠
C:\Users\Administrator>cmd /k powercfg /a
此系统上有以下睡眠状态:
待机 (S3)
此系统上没有以下睡眠状态:
待机 (S1)
系统固件不支持此待机状态。
待机 (S2)
系统固件不支持此待机状态。
休眠
无法检索详细理由说明此系统上的睡眠状态不可用。
C:\Users\Administrator>_
成果
如果没有其他问题,将配置好的本机正常关机;再通过别的电脑之类的,就可以尝试远程启动这台电脑了。
可以用 WOl.exe
、wakeonlan
DOWN:https://www.gammadyne.com/wol.exe
具体用法就不说了
其他问题
断电恢复
因为 WoL 的原理是关电脑不关网卡:虽然关机了,但网卡仍然处于低功耗工作状态。 如果意外断电,所有硬件——都得离线关闭这不废话吗,除了时钟芯片有电池,别的没电有毛用。
系统离线后再恢复供电,在重新上电后,大概可以自动恢复到断电之前的状态;
有些就不行了,因此网络唤醒就失效了。
- BIOS 里是否支持
Restore AC Power Loss blue
(断电恢复 / 来电开机 / 意外断电后来电状态 ),设置为label Last State blue
(之前的状态 / 断电前的最后状态 )
最好的方法
Wol包实际上是一个网络帧
大概长这样:
Offset | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
00000000 | FF FF FF FF FF FF 50 E5 49 58 91 8A 50 E5 49 58 |
00000010 | 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A 50 E5 |
00000020 | 49 58 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A |
00000030 | 50 E5 49 58 91 8A 50 E5 49 58 91 8A 50 E5 49 58 |
00000040 | 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A 50 E5 |
00000050 | 49 58 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A |
00000060 | 50 E5 49 58 91 8A |
结构就是 (6*ff + 16*MAC)也是很奇怪的东西,喊一声,然后在网上喊16遍你的名字,试图叫醒你。,肯定走UDP
协议,只去不回,不需要客户端应答。
附表:传输协议层级
TCP/IP 五层模型 | 常用协议 |
---|---|
5 应用层 | HTTPS、HTTP、Telnet、FTP、SMTP、DNS、RDP |
4 传输层 | TCP、UDP |
3 网络层 | IP、ICMP、RIP、IGMP、OSPF |
2 数据链路层 | 以太网、令牌环、PPP、PPTP、L2TP、ARP、ATMP |
1 物理层 | 网线、光纤、电磁波 |
WoL 在 2 层 数据链路层 传播。
从上表可以看到,由于无关具体的传输协议(TCP / UDP)但实际通常用UDP,只要网卡识别到特定的 广播帧
就会唤醒电脑。
如果使用内网穿透,从 WAN 直接发送 WoL 请求,就必须依靠路由器的ARP 绑定、端口映射 来精确地把数据包塞到设备嘴里。麻烦不说,还不稳定
那咋办呢,弄端口映射还挺麻烦,所以可以换一种方法,
网络唤醒在局域网中是管用的,所以可以用 SSH 连接到内网设备上(NAS、服务器)的终端,用发包程序(如WOL.exe
)把幻包发出去,这样就实现了 Wake On Wan,也不需要弄静态 ARP。
@注解
- WoL 技术由 AMD 和惠普共同开发,于 1995 年作为标准提出。此后,该标准很快被 IBM、Intel 和其他公司采用。