22672

用PHP实现局域网电脑开机

原理:使用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........(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/6555229
http://blog.csdn.net/sysfs/article/details/7493383

文章作者:DOTATONG
发布日期:2017-12-03

评论

暂无

添加新评论