当前位置:首页 > 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:

PHP实现wol

$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包。
  • 某些网络设备可能过滤广播流量,需检查网络配置。
  • 对于跨子网唤醒,需在路由器上设置定向广播或使用特定工具转发魔术包。

标签: PHPwol
分享给朋友:

相关文章

PHP接口防重推荐实现

PHP接口防重推荐实现

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

PHP实现级差

PHP实现级差

级差的概念 级差通常指按照不同等级或范围计算差异值,例如阶梯定价、绩效奖金等场景。PHP中可通过条件判断、循环或数学运算实现。 基础条件判断法 通过if-else或switch结构直接划分等级区间:…

PHP实现建站

PHP实现建站

PHP建站的基本步骤 安装PHP环境 使用XAMPP、WAMP或MAMP等集成环境快速搭建本地开发环境,这些工具包含Apache、MySQL和PHP。对于生产环境,推荐使用LNMP(Linux+Ngi…

PHP 实现aop

PHP 实现aop

PHP 实现 AOP(面向切面编程) AOP(Aspect-Oriented Programming)是一种编程范式,用于将横切关注点(如日志、事务、权限等)从业务逻辑中分离出来。PHP 本身不原生支…

PHP实现wol

PHP实现wol

PHP实现WOL(Wake-on-LAN)功能 WOL(Wake-on-LAN)是一种通过网络唤醒处于休眠或关机状态计算机的技术。以下是使用PHP实现WOL功能的详细方法: 发送魔术包的基本原理 W…

PHP实现医院

PHP实现医院

PHP实现医院管理系统 医院管理系统通常包含患者管理、医生排班、药品库存、预约挂号等功能。以下是使用PHP实现医院管理系统的关键步骤和代码示例。 数据库设计 创建数据库表结构是系统的基础。主要表包括…