wol php实现
PHP 实现 WOL(网络唤醒)功能
WOL(Wake-on-LAN)是一种通过网络发送魔术包(Magic Packet)唤醒处于休眠或关机状态设备的协议。以下是使用 PHP 实现 WOL 功能的几种方法。

使用 UDP 发送魔术包
魔术包是一个特定格式的 UDP 数据包,包含目标设备的 MAC 地址重复多次。以下是一个简单的 PHP 实现:

function wakeOnLan($macAddress, $broadcastIp = '255.255.255.255', $port = 9) {
$macAddress = str_replace([':', '-'], '', $macAddress);
$macBinary = pack('H*', $macAddress);
$magicPacket = str_repeat("\xFF", 6) . str_repeat($macBinary, 16);
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
socket_sendto($socket, $magicPacket, strlen($magicPacket), 0, $broadcastIp, $port);
socket_close($socket);
}
调用方法:
wakeOnLan('00:11:22:33:44:55');
使用 fsockopen 发送魔术包
如果服务器环境不支持 socket 函数,可以使用 fsockopen 实现:
function wakeOnLanFsock($macAddress, $broadcastIp = '255.255.255.255', $port = 9) {
$macAddress = str_replace([':', '-'], '', $macAddress);
$macBinary = pack('H*', $macAddress);
$magicPacket = str_repeat("\xFF", 6) . str_repeat($macBinary, 16);
$fp = fsockopen("udp://$broadcastIp", $port, $errno, $errstr);
if ($fp) {
fwrite($fp, $magicPacket);
fclose($fp);
}
}
注意事项
- 确保目标设备已启用 WOL 功能,并在 BIOS 和网卡设置中正确配置。
- 魔术包通常需要发送到广播地址(255.255.255.255)或子网广播地址。
- 某些网络设备可能会阻止广播流量,需要适当配置路由器或交换机。
- 如果目标设备位于不同子网,需要在路由器上设置端口转发或使用定向广播地址。
安全性考虑
- WOL 协议本身没有加密或认证机制,建议在受信任的网络环境中使用。
- 可以通过 IP 限制或 VPN 等方式增加安全性。
- 对于公开可访问的 WOL 服务,建议添加认证机制。






