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

admin 2025-08-25 阅读:60 评论:0
网络唤醒(Wake On LAN)指的是通过网络实现电脑的远程开机启动。除了可以唤醒同一个局域网下的电脑,也可以从外网唤醒局域网内的电脑。这样有时在公司whatsapp网页版,如果临时想从家里电脑传输些文件过来,就可以通过网络启动家里的电脑...

网络唤醒(Wake On LAN)指的是通过网络实现电脑的远程开机启动。除了可以唤醒同一个局域网下的电脑,也可以从外网唤醒局域网内的电脑。这样有时在公司whatsapp网页版,如果临时想从家里电脑传输些文件过来,就可以通过网络启动家里的电脑,再进行远程操作。

Magic Packet发送原理_网络唤醒端口_PHP实现网络唤醒

要实现网络唤醒,特别是通过 Internel 唤醒。除了电脑主板要支持这个功能并开启外,路由器设置相关的端口转发规则。这些操作可以看我之前的文章,这里就再多讲了:群晖NAS实现广域网开机办法(附pctelegram中文版,苹果电脑远程开机方法)

1,PHP实现网络唤醒原理

过去我在外面要唤醒家里的设备都是通过 App。这里介绍如何使用 PHP 实现同样的功能,它的原理和那些网络唤醒 App 都是一样,就是给目标的地址发送一个唤醒数据包(Magic Packet)。当然发送除了目标地址外,还要有端口和目标设备的 MAC 地址。

(1)为方便使用这里定义一个网络唤醒类 WOL(在 wol.php 文件中)

 "目标机器已经是唤醒的.",
		1 => "socket_create 方法执行失败",
		2 => "socket_set_option 方法执行失败",
		3 => "magic packet 发送成功!",
		4 => "magic packet 发送成功!"
	);
	
	function __construct($hostname,$mac,$port,$ip = false)
	{
		$this->hostname = $hostname;
		$this->mac      = $mac;
		$this->port     = $port;
		if (!$ip)
		{
			$this->ip   = $this->get_ip_from_hostname();
		}
	}
	public function wake_on_wan()
	{
		if ($this->is_awake())
		{
			return $this->msg[0]; // 如果设备已经是唤醒的就不做其它操作了
		}
		else
		{
			$addr_byte = explode(':', $this->mac);
			$hw_addr = '';
			for ($a=0; $a<6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a]));
			$msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);
			for ($a=1; $a<=16; $a++) $msg .= $hw_addr;
			// 通过 UDP 发送数据包
			$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
			
			if ($s == false)
			{
				return $this->msg[1]; // socket_create 执行失败
			}
			$set_opt = @socket_set_option($s, 1, 6, TRUE);
			if ($set_opt < 0)
			{
				return $this->msg[2]; // socket_set_option 执行失败
			}
			$sendto = @socket_sendto($s, $msg, strlen($msg), 0, $this->ip, $this->port);
			
			if ($sendto)
			{
				socket_close($s);
				return $this->msg[3]; // magic packet 发送成功!
			}
			return $this->msg[4]; // magic packet 发送失败!
			
		}
	}
	private function is_awake()
	{
		$awake = @fsockopen($this->ip, 80, $errno, $errstr, 2);
		
		if ($awake)
		{
			fclose($awake);
		}
		
		return $awake;
	}
	private function get_ip_from_hostname()
	{
		return gethostbyname($this->hostname);
	}
}
?>

(2)下面是一个测试代码(index.php)whatsapp官网,使用时只要传入相关的参数即可。

wake_on_wan();
echo $status;
?>

(3)访问上面的 index.php 页面,可以看到返回数据包发送成功的信息。如果我们电脑那边相关配置正确的话,此时应该就已经被唤醒了。

PHP实现网络唤醒_网络唤醒端口_Magic Packet发送原理

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

3502文章数 0评论数
热门文章
  • 详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略

    详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略
    一、下载与安装WhatsApp WhatsApp是一款全球使用范围极广的即时通讯软件,不仅可以实现文本聊天,还能进行语音、视频通话WhatsApp中文版,发送文件等功能。由于众所周知的原因,国内用户想要下载和安装WhatsApp可能会遇到一些困难。不过,只要按照以下步骤操作,就能顺利完成WhatsApp的下载和安装。 首先,我们需要解决的是下载问题。由于WhatsApp在国内的应用商店无法直接下载,所以我们需要寻找其他的下载途径。Android用户可以选择到各大安卓市场搜索下...
  • 苹果IOS5.1.1机完美越狱

    苹果IOS5.1.1机完美越狱
    越狱工具下载:(需手动复制: http://bbs./read-htm-tid-4804612.html ) 详细的越狱教程: Absinthe 2.0.4的越狱方法与Absinthe 1.0的越狱方法完全一样,非常简单的“傻瓜一键式”。不过这里绿毒有说明,最好重新刷固件。支持越狱设备IOS5.1.1的固件下载地址请点击本站的IOS固件下载,看下图: 下载完固件之后,把设备连接iTunes,开始刷固件。你也可以选择不刷,但是在越狱的过程之中,新的系统在越狱时会比较的顺利,...
  • 电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹

    电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹
    1. 怎么找到微信聊天图片在哪个文件夹里 图片保存路径:/storage/emulated/tencent/MicroMsg/WeiXin/文件夹,这个是完整路径。而在文件夹中只需要找到/tencent/MicroMsg/WeiXinWhatsApp中文版,就可以了,前面两个文件夹是系统根目录。以下是保存及查找图片的方法步骤介绍。 第一步、找到桌面的微信APP,直接点击打开这个微信的APP。 2. 电脑微信图片保存在哪个文件夹 个人微信文件夹。 电脑版微信聊天的图片,都保存到...
  • Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式

    Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式
    Meta(最近更名为 Meta AI)悄然宣布,WhatsApp 将在 Windows 11 上放弃 UWP(WinUI)WhatsApp中文版,退回采用基于 Chromium 的容器。这意味着 WhatsApp 又回到了几年前的样子。由于 web.whatsapp.com 一直领先于 Windows 应用开发,它确实拥有一些新功能,但速度更慢,占用更多内存。 如果独立开发者因为无力维护所有平台的代码库而选择 Web 应用程序,那是一回事,但当像 Meta 这样价值万亿美元...
  • 小米下載WhatsApp的完整指南:安装与使用注意事项

    小米下載WhatsApp的完整指南:安装与使用注意事项
    综上所述,确保您的小米手机具备以上条件,将有助于您顺利下载和安装WhatsApp,享受便捷的通讯服务。在满足这些条件后,您就可以按照后续步骤进行WhatsApp的下载和安装。 2. 下载和安装WhatsApp的具体步骤 在小米手机上下载和安装WhatsApp的具体步骤相对简单,但需注意一些特殊情况。首先,确保你的手机系统已更新到最新版本,以保证最佳的兼容性。由于安卓手机商店内无法直接找到WhatsApp,你可以通过APKPure等第三方应用商店进行下载。打开APKPure应用...