文章

Wol技术

Wol技术

概述

Wake-on-LAN 简称 WOL 或 WoL ,中文多译为“网络唤醒”、“远程唤醒”技术。WOL是一种技术,同时也是该技术的规范标准,它的功效在于让已经进入休眠状态或关机状态的计算机,透过局域网(多半为以太网)的另一端对其发令,使其从休眠状态唤醒、恢复成运作状态,或从关机状态转成引导状态。此外,与WOL相关的技术也包括远程下令关机、远程下令重启等相关的遥控机制。

——引用自 网络唤醒 - 维基百科,自由的百科全书

前提

被唤醒的电脑满足下列条件即可:

  • 主板支持。现在的主板基本都支持,所以基本不用担心。很旧的主板好像是 2000 年左右的,需要插网卡(PCI2.1标准),这时才需要 3 针 WOL 线连接主板
  • 关机时候为主板通电。被唤醒电脑的网卡需要有微弱的供电,以接收来自局域网内的唤醒数据包(魔术包)
  • 正常关机。非正常关机可能会导致唤醒失败,例如意外断电、休眠等
  • 通过有线方式连接到局域网。无线网卡可能不受支持,具体未测试。

原理

概述

计算机处在关机(或休眠)状态时,机内的网卡及主板部分仍保有微弱的供电,此微弱供电能让网卡保有最低的运作能力,使网卡能聆听来自计算机外部的网络广播信息,并对信息内容进行侦测与解读,一旦发现网络广播的内容中有特定的信息内容,此种特定内容称为“魔法数据包”(Magic Packet),就会对该数据包的内容进行反应(即执行开机操作)。

魔法数据包是以广播方式发送的,广播的方式与范畴可以是整个局域网(LAN),也可以是特定的子网(Subnet),同时魔法数据包内会有某部(或一群)计算机的网络地址数据,网卡一旦发现解读出来的的地址是自身所处的计算机时,网卡就会通知机内的主板、电源供应器,开始进行引导(或唤醒)的程序。

——引用自 网络唤醒 - 维基百科,自由的百科全书——如何運用

魔法数据包

魔法数据包(Magic Packet)是一个广播性的帧(frame),透过端口79发送,可以使用无需建立连接(Connectionless protocol)的通信协议(如UDP、IPX)来传递,目前鉴于已很少采用Novell NetWare网络操作系统的IPX协议而多选用UDP

在魔法数据包内,每次都会先有连续6个”FF”(十六进制,换算成二进制即:11111111)的数据,即:FF FF FF FF FF FF,在连续6个”FF”后则开始带出MAC地址信息,有时还会带出4字节或6字节的密码,一旦经由网卡侦测、解读、研判(广播)魔法数据包的内容,内容中的MAC地址、密码若与电脑自身的地址、密码吻合,就会启动唤醒、开机的程序。

——引用自 网络唤醒 - 维基百科,自由的百科全书——魔法数据包

事实上,WoL 最常用的是 UDP 端口号 9。

wireshark 抓包

使用 wireshark 抓包截图如下:

wol-wireshark.png

注意:截图中使用的 wireshark 是较旧的版本,在新版本(比如 4.4.8)中,可能无法直接使用 wol 来过滤相应的包(该包会被标记为 DISCARD 协议),这是新版本引入的bug,详见 官方 issues

关键内容说明如下:

  • 数据链路层(以太网):源地址为发送魔法数据包的设备的 MAC 地址(图中为7c:11:cb:83:86:79),目的地址为广播地址(ff:ff:ff:ff:ff:ff
  • 网络层(IP):源地址为发送魔法数据包的设备的 IP 地址(图中为192.168.2.100),目的地址为子网广播地址(192.168.2.255
  • 传输层(UDP):源端口为任意端口(图中为53166),目的端口为 9 号或 7 号端口
  • 应用层(WOL):由同步流(ffffffffffff)和被唤醒电脑的 MAC 地址(重复 16 次)组成

使用方法

被唤醒电脑设置

固件(BIOS/UEFI)设置

市面上几乎所有固件(BIOS/UEFI)都支持 WoL ,但几乎所有的 WoL 默认都是关闭的,并且打开方式有所区别。新式电脑(2000年之后)常见设置位置如下:

  • Power Management->PME Event Wakeup->Enabled

其他常见设置位置如下:

  • Power Management->Wake-Up by PCI card->Enabled
  • Advanced->Power by PCIE/PCI->Enabled
  • Boot->Wake-On LAN->Enabled

注意查找如下关键字即可:Wake Up(唤醒)、NIC(网卡)、PCI(一种较老的总线标准,现在主要使用PCIe)、PME(电源管理事件)

Linux 设置

Linux 有多种发行版,对于 Ubuntu 而言无需额外设置。其他未做测试。

Windows 设置

网卡驱动程序升级

该项是可选的,可以在失败后再尝试该项。

采用如下方法之一即可:

  • 通过搜索引擎搜索关键字你的网卡型号 驱动程序 下载找到下载链接,例如我的网卡对应的搜索关键字为Realtek PCIe GBE Family Controller 驱动程序 下载
  • 在你的网卡驱动程序的官方网站(或者在你的电脑品牌官网)处查找并下载最新的驱动程序。
网卡驱动程序设置
  1. 打开设备管理器。Win10 使用快捷键Win+X,M即可
  2. 找到有线的网络适配器。我的是Realtek PCIe GBE Family Controller(无线的可能也行。我的是Intel(R) Dual Band Wireless-AC 3165
  3. 右键找到的适配器,点击属性(或者直接使用快捷键Alt+Enter
  4. 点击标签高级,在属性中找到Wake On Magic Packet(魔术封包唤醒),在处选择Enabled以启用。以同样的方式启用关机 网络唤醒
关闭快速启动

在 Windows 8 及更高版本,以及 Windows Server 2012 及更高版本中,不支持从混合关闭状态(S4)唤醒。因此需要关闭快速启动功能,以防止其进入混合关闭状态

  1. 打开电源选项。Win10 使用快捷键Win+X,O即可
  2. 在右侧点击其它电源设置
  3. 在左侧点击选择电源按钮的功能
  4. 点击更改当前不可用的设置
  5. 取消勾选启用快速启动(推荐)

用来唤醒的设备和软件

任何可以发送魔法数据包(即一个 UDP 报文)的设备都能用来唤醒上述的电脑。包括但不限于手机、笔记本电脑、台式机。

可以自己写一个简单的网络应用程序来实现,也可以使用现有的软件,如 depicus,它支持 Web、Windows、MacOS、iPhone、Android 等多个平台

为了更加方便,还可以将相关命令或脚本放在 AHK 脚本中,使用一个快捷键一键启动,如下所示:

~Capslock & w::run "C:\Users\wsxq2\Documents\MY\WolCmd.exe" ec:d6:8a:be:bc:60 192.168.3.108 255.255.255.0 9,,

这样按住 Caps 按键的前提下再按 w 键,即可发送魔法数据包到目标主机。

本文由作者按照 CC BY 4.0 进行授权