叨嗒嗵 - 局域网开机
type: channel
link: https://dotatong.cn/index.php/tag/局域网开机/
items: 用PHP实现局域网电脑开机

用PHP实现局域网电脑开机
type: item
date: 2017-12-03T06:24:00+00:00
description: 开机原理使用udp协议，向目标机器发送开机数据包，完成开机数据包结构数据包：6个FF加上16次MAC地址比如MAC地址是 11 22 33 44 55 66 ，那么数据包如下FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66........其中MAC地址 11 22 33 44 55 66 重复16次发送数据拼好数据包后使用udp广播出去就可以了。简单的实现如下：<?php //局域网电脑开机 $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //数据包头 $arr = [0xff,0xff,0xff,0xff,0xff,0xff]; //假设目标电脑的mac地址为：11-00-6c-00-0f-3c $mac = [0x11,0x00,0x6c,0x00,0x0f,0x3c]; $msg = ''; foreach($arr as $v){ $msg .= chr($v); } for($i=0;$i<16;$i++){ foreach($mac as $v){ $msg .= chr($v); } } $len = strlen($msg); //开启udp广播 socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1); //广播地址192.168.1.255 socket_sendto($sock, $msg, $len, 0, '192.168.1.255', 30000); socket_close($sock); $error = socket_last_error(); print_r($error);参考资料：http://blog.csdn.net/oemoon/article/details/6555229http://blog.csdn.net/sysfs/article/details/7493383