使用Wake-on-LAN协议通过互联网远程开启PC的程序

2025年2月26日 | 4 分钟阅读

引言

Wake-on-LAN (WoL) 是一种以太网或令牌环网的网络通信标准,它允许通过网络消息来开启或唤醒计算机。

  • 通常,运行在智能手机或其他连接到同一局域网的设备上的程序会将消息发送给目标计算机。
  • 通过 WoL 网关服务和子网定向广播,可以从其他网络启动消息。
Program to remotely Power on a PC over the internet using the Wake-on-LAN protocol

工作原理

  • 要激活 Wake-on-LAN (WoL),需要向连接到网络的每台计算机(包括需要被唤醒的那台)发送一个“魔术数据包”(一个经过特殊构造的数据包)。
  • 计算机上的每个网络接口卡(“NIC”)和其他以太网设备都有一个唯一的标识号,称为 MAC 地址。这个 MAC 地址包含在魔术数据包中,用于在网络上识别和寻址该计算机。
  • 能够从睡眠模式唤醒或完全关闭的计算机,其网络设备能够以低功耗模式“监听”传入的数据包。
  • 如果 NIC 收到一个发往该设备 MAC 地址的魔术数据包,它会通知主板或计算机的电源启动系统唤醒过程,就像按下电源按钮一样。
  • 魔术数据包通过数据链路层发送,而不是通过 IP 地址(第 3 层)。它被广播到连接到特定网络的所有设备。

在某些情况下,Wake-on-LAN 需要网络接口保持通电。与正常工作功耗相比,这只需要极低的待机功耗。因此,对于已关机但仍插入电源插座的计算机,在不需要时禁用 Wake-on-LAN 可以稍微降低功耗。

魔术数据包结构

魔术数据包的载荷包含六个 255 字节,形成一个广播帧。该帧包含目标计算机 48 位 MAC 地址的 16 次重复,总共 102 字节。魔术数据包可以通过网络层和传输层协议发送,但通常通过以太网作为 UDP 数据报发送到端口 0 或 7,或者使用 EtherType 0x0842。这是因为魔术数据包不会被协议栈完全解析,而只是扫描其中的字符串。

标准魔术数据包的基本限制包括:

  • 需要目标计算机的 MAC 地址(可能还需要 SecureOn 密码)。
  • 不发送送达确认。
  • 如果连接到本地网络,可能无法工作。
  • 需要目标计算机支持 Wake-On-LAN 硬件。
  • 大多数 802.11 无线接口在低功耗情况下会断开连接并无法接收魔术数据包。

Wake-on-LAN 实现旨在非常易于使用、功耗极低,并由网络接口卡的电路快速处理。由于 Wake-on-LAN 在 IP 协议层之下工作,需要 MAC 地址,因此 IP 地址和 DNS 名称无效。

程序

输出

Program to remotely Power on a PC over the internet using the Wake-on-LAN protocol

代码解释

实现 Wake-on-LAN (WoL) 的第一步是创建一个 UDP 套接字以启用广播通信,从而确保 WoL 魔术数据包能够到达所有本地网络设备。WoL 数据包通过以“0xFF”字节为起始流,然后重复目标计算机的 MAC 地址多次来构建。接下来,通过 UDP 套接字使用 sendto() 函数将此数据包发送到本地区域网络 (LAN) 的广播地址,通常是 255.255.255.255,或者发送到指定的子网广播地址,例如 192.168.1.255。发送后,一条确认消息会告知 WoL 信号已成功发出。


下一主题RFC