当前位置:首页 > PHP

PHP实现wol

2026-02-28 16:55:19PHP

PHP实现WOL(网络唤醒)功能

网络唤醒(Wake-on-LAN,简称WOL)是一种允许通过网络信号远程唤醒处于关机或休眠状态计算机的技术。以下是使用PHP实现WOL功能的方法:

准备目标计算机

目标计算机需要支持WOL功能并在BIOS中启用。确保网卡驱动程序已配置为允许魔术包唤醒,通常在电源管理或高级设置中可找到相关选项。

获取目标计算机的MAC地址

需要目标计算机的MAC地址以构造魔术包(Magic Packet)。MAC地址通常可在操作系统网络设置或通过命令行工具(如ipconfig /allifconfig)获取。

构造魔术包

魔术包由6个字节的0xFF前缀加上16次重复的MAC地址组成。以下PHP代码展示如何构造魔术包:

$macAddress = '00:11:22:33:44:55'; // 替换为目标MAC地址
$macAddress = str_replace(':', '', $macAddress); // 去除冒号
$macAddressBinary = pack('H*', $macAddress);
$magicPacket = str_repeat("\xFF", 6) . str_repeat($macAddressBinary, 16);

发送魔术包

使用PHP的socket函数发送UDP广播包到目标网络。通常WOL使用端口7或9:

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($socket) {
    $options = socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
    if ($options >= 0) {
        $result = socket_sendto($socket, $magicPacket, strlen($magicPacket), 0, '255.255.255.255', 9);
        socket_close($socket);
        if ($result !== false) {
            echo "魔术包发送成功";
        } else {
            echo "发送失败";
        }
    }
}

完整示例代码

function wakeOnLan($macAddress) {
    $macAddress = str_replace([':', '-'], '', $macAddress);
    if (!ctype_xdigit($macAddress) || strlen($macAddress) != 12) {
        throw new InvalidArgumentException('无效的MAC地址格式');
    }

    $macBinary = pack('H*', $macAddress);
    $magicPacket = str_repeat("\xFF", 6) . str_repeat($macBinary, 16);

    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    if ($socket === false) {
        throw new RuntimeException('无法创建socket');
    }

    if (!socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1)) {
        socket_close($socket);
        throw new RuntimeException('无法设置socket选项');
    }

    $sent = socket_sendto($socket, $magicPacket, strlen($magicPacket), 0, '255.255.255.255', 9);
    socket_close($socket);

    return $sent !== false;
}

// 使用示例
try {
    if (wakeOnLan('00:11:22:33:44:55')) {
        echo '成功发送WOL包';
    } else {
        echo '发送WOL包失败';
    }
} catch (Exception $e) {
    echo '错误: ' . $e->getMessage();
}

注意事项

  • 确保PHP运行环境有网络访问权限,某些托管环境可能限制UDP广播。
  • 目标计算机和发送WOL包的设备需在同一局域网,或路由器已配置转发WOL包。
  • 某些网络设备可能过滤广播流量,需检查网络配置。
  • 对于跨子网唤醒,需在路由器上设置定向广播或使用特定工具转发魔术包。

PHP实现wol

标签: PHPwol
分享给朋友:

相关文章

PHP http长连接的实现

PHP http长连接的实现

HTTP 长连接基础概念 HTTP长连接(Keep-Alive)允许在单个TCP连接上发送和接收多个HTTP请求/响应,减少重复建立和断开连接的开销。HTTP/1.1默认启用长连接,而HTTP/1.0…

PHP中实现重定向

PHP中实现重定向

PHP重定向的实现方法 在PHP中,重定向是通过发送HTTP头信息来实现的。以下是几种常见的重定向方法: 使用header()函数 header("Location: https://exam…

PHP接口防重推荐实现

PHP接口防重推荐实现

防重实现方法 使用唯一请求标识符(UUID或业务ID)作为防重依据,客户端每次请求生成唯一标识,服务端校验该标识是否已处理过。适合短时间内的重复请求拦截。 // 客户端生成唯一标识 $reques…

PHP实现elm

PHP实现elm

PHP实现ELM(极限学习机) ELM(Extreme Learning Machine)是一种单隐层前馈神经网络算法,具有训练速度快、泛化性能好的特点。以下是PHP实现ELM的关键步骤和代码示例。…

PHP实现excel

PHP实现excel

PHP 实现 Excel 操作 读取 Excel 文件 使用 PHP 读取 Excel 文件可以通过 PhpSpreadsheet 库实现。安装该库可以通过 Composer: composer…

PHP实现markdown

PHP实现markdown

实现Markdown解析的基本方法 PHP中有多种方式可以实现Markdown解析功能,包括使用现有库、自定义解析器或结合前端工具。以下是几种常见的方法: 使用Parsedown库 Parsedo…