使用天猫精灵实现计算机WOL网络唤醒

简介: 解决笔记本连显示器不想掀盖子开机和远程办公时给公司电脑开机不方便的痛点。

使用天猫精灵实现计算机WOL网络唤醒

      天猫精灵是好评如潮的一款智能家庭终端设备,使用天猫精灵定闹钟、影音娱乐、互动问答是否已经成为你生活中的习惯了呢?其实我们自己也可以创建技能,本文通过内测中的天猫精灵个人技能来实现基于WOL魔术包来远程唤醒个人电脑。

项目目标

      通过天猫精灵个人语音技能远程触发内网设备发送魔术包使计算机以WOL网络唤醒方式开机。

项目原理

1.    什么是WOL

a)     WOL全称Wake-on-LAN,是一种以太网或令牌环网的计算机网络标准。它可以实现通过网络远程消息来打开计算机,该消息通常由连接到同一局域网的设备上执行的程序发送到目标计算机。如果被唤醒的计算机通过WiFi进行通信,则需要采用WoWLAN标准。(通常802.11无线网络在低功耗状态下并不接受链路数据包,所以在无线网条件下实现远程唤醒支持条件较为苛刻)

b)     以太网连接基于计算机之间发送的帧,而WOL是使用魔术包实现的,该包在数据链路层(OSI模型中的第2层)上广播发送到网络中的所有计算机【而不是使用 IP 地址(OSI 模型中的第 3 层)】,其中包括要唤醒的计算机。魔术包通过MAC地址在网络上唯一地识别和寻址到目标计算机。

c)     当我们在电脑上配置完开启WOL功能后,我们的网卡能够在系统关机时以低功耗模式侦听传入数据包的网络设备。如果收到定向到设备 MAC 地址的魔术包,则网卡会向计算机的电源或主板发出信号以使电脑开机,就像你按下电源键一样。

d)     由于 WOL是建立在广播技术之上的,因此它通常只能在局域网中使用。

2.    什么是魔术包?

a)     魔术包是作为广播发送的帧,在其255字节有效负载内的任意位置包含6 FF(十六进制为 FF FF FF FF FF FF),然后是目标计算机的 48 MAC 地址的 16 次重复,总共102个字节。

b)     由于魔术包不被完整的协议栈实际解析,因此它可以作为任何网络和传输层协议的有效载荷发送。由于TCP需要建立连接,所以它通常作为UDP数据报发送到端口0(保留端口号),7Echo协议)或9(丢弃协议,Discard Protocol)。

c)     由于 WOLIP 协议层下运行,因此 IP 地址和域名毫无意义,我们只需要MAC 地址。

d)     PHP构造一个魔术包,这是一个示例:

<?php$ip='255.255.255.255';//全局广播地址$port='9';//端口置为0(保留端口号)、7(Echo协议)或9(丢弃协议,Discard Protocol)均可。//MAC地址需要转换为16进制,以MAC地址1A:2B:3C:4F:00:66为例。$str_hex="\xFF\xFF\xFF\xFF\xFF\xFF\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66";
$handle=stream_socket_client('udp://'.$ip.':'.$port,$errno,$errstr);
if (!$handle) {
die('ERROR:'.$errno. '- '.$errstr.'\n');
        }
fwrite($handle,$str_hex.'\n');
fclose($handle);
?>

e)    一个真实的魔法包(Wireshark视图):

image.png


3.    需要怎样的硬件支持?

a)     较旧的主板必须具有通过特殊的3针电缆连接到网卡的WAKEUP-LINK接口;但是,支持 PCI 2.2 标准且具有符合 PCI 2.2 标准的网络适配器卡的系统通常不需要 WOL电缆,因为所需的待机电源是通过 PCI 总线中继的。

主板上的 3 WoL 接口由针脚 1 +5V DC(红色)、针脚 2 接地(黑色)、针脚 3 唤醒信号(绿色或黄色)组成。如果 BIOS/UEFI 配置中启用了 WoL,通过为引脚 3提供 +5V DC,电脑就会开机。

image.png

b)     WOL通常需要在 PC 主板的 BIOS/UEFI程序的电源管理部分中启用,在某些系统(如 Apple 电脑)上,默认情况下会启用该功能。在较旧的系统上,BIOS/UEFI 设置可能称为WoL;在支持 PCI 版本2.2 的较新系统上,它可能称为 PME(电源管理事件,包括 WoL)。可能还需要将计算机配置为在系统关闭时为网卡保留待机电源。

c)     此外,为了让 WOL正常工作,有时需要在网卡驱动设置或板载芯片上启用此功能。在Windows系统可以直接在操作系统设备管理器中找到网卡属性来进行设置。image.png

image.png

d)     部分笔记本电脑允许使用无线WOL WoWLAN) 唤醒机器。

e)     根据微软官方文档,Windows系统的电脑在睡眠和快速启动模式下无法进行WOL唤醒。事实上WoL网络唤醒主要是依赖主板和网卡的硬件支持来运作的,因此,操作系统必须完全关闭才能使用WoL网络唤醒。

https://docs.microsoft.com/en-us/windows/win32/power/system-power-states?

 

项目方案

image.png

 

具体步骤

1.    在目标计算机上开启WoL功能:

a)     设备管理器-网络适配器-找到对应网卡-电源管理-勾选只允许幻数据包唤醒计算机。

b)     在电脑主板BIOS中电源管理开启网络唤醒功能

c)     Tips:不同设备在上述步骤上会有细微差异,因为不是本文重点所以略去细节。

2.    在目标主机所属局域网内部署已进行内网穿透的服务器:

a)     因为魔法包基于数据链路层并需要在局域网广播,无法被路由。因此目标主机所属局域网内需要有能够响应天猫精灵请求并在局域网内发送魔法包的服务器(可在NASOpenWRT路由器等设备上搭建)。

b)     在本地服务器上搭建网站服务(egPHP+Nginx)。在路由器上配置内网穿透(如果你有公网IP&桥接&端口映射那么我们可以做DDNS,性能更优)、虚拟服务器和IP&MAC绑定。

c)     Tips:如果你有云服务器的话可以做个跳板机来替代内网穿透服务。

在无公网IP的本地路由器上执行ssh -NT -R :端口>:127.0.0.1:80 root@

这样访问公网IP时会直接跳转到本地服务器。

 

3.    创建技能

登录天猫精灵开放平台-完成开发者实名认证-创建技能。

image.png

天猫精灵技能开发平台的语音技能分为自定义技能、音频内容技能、智能家居技能。

个人技能优势:私域技能,可以只在自有音响或朋友圈之内分享使用。开发流程和普通自定义技能相同。

在该项目我们使用Webhook能力,当用户向天猫精灵发出“开机”命令时,位于本地的服务器程序就会被调用从而生成魔法包来开机。具体的技能创建流程如下:

1.     创建技能

a)     填写技能名称、选择有调用词——与自定义技能不同,个人技能的调用词和技能名称不受唯一性限制——和自建Web服务器(位于受控端局域网用来发送魔法包的设备),然后我们点选【下一步】。image.png

b)     同意用户协议、创建成功后我们会自动跳转到应用界面。

2.     配置语音交互服务

a)     image.png

b)     创建意图,可以 如图所示输入意图名称和标识,需要勾选默认意图。image.png

c)     下载后端服务所需认证文件,将其放在已内网穿透的受控端服务器Web目录下的aligenie文件夹下(初次使用需要创建一个)

根据官方文档进行如下测试:

获取您配置的 Webhook URL,取出URL中域名和端口号(如果有),然后拼接上"aligenie/认证文件名.txt "访问这个路径,以返回的结果(认证文件的内容)作为依据,判断认证是否成功。

image.png

d)     在后端服务的服务器部署地址部分需要输入受控端内网服务器中构造的用于发送魔术包的脚本文件。

4.    在服务器端配置脚本文件

示例代码如下图所示image.png

其它语言也能够类似效果,关键是构筑一个魔术数据包并把它发送给需要唤醒的目标计算机,同时需要对天猫精灵的请求做出响应。

5.    测试能否正常执行

image.png

6.    发布并在设备上执行

与【自定义技能】不同的是,【个人技能】的发布提审信息非常简介,我们仅需提交版本号、图标和简介既可以保存提交。这使得发布过程更加流畅。

image.png

技能分享:

应用上线后,开发者可在个人音箱上使用技能,也可将技能分享给他人使用。目前最多支持分享给20个用户使用,超过20个人需要另外申请开放权限。

image.png

 

小结

通过本次实践,我们成功的创建天猫精灵技能,并使用天猫精灵技能语音远程实现电脑的开关机。本次实践成功的解决了虽然不是远程但是笔记本正连着显示器不想掀笔记本盖子按开机按钮的痛点和疫情期间远程办公时没法远程把公司电脑打开的痛点。对我来说,这是一次非常有价值的实践——我不用费劲在笔记本主板上焊接开机线了:),天猫精灵万岁~

本次实践搭配上远程控制软件(例如Windows自带的RDP软件-远程桌面连接),我们可以实现在家远程操作自己家别的房间或者远在公司工位上的电脑,实现开关机和远程桌面连接-就像在使用自己手边的电脑一样。

天猫精灵能做到的事情还有很多,比如我们可以在本次实践的基础上通过开发一个红外线二极管来实现语音开空调、开灯、拉窗帘等操作。这些应用场景都很实用,可以大幅提升生活幸福感。

这就是本次测评的全部内容了,感谢你的耐心阅读。

目录
相关文章
|
2月前
|
安全 网络协议 Linux
家庭实验室系列文章 - 电脑如何配置网络唤醒 (WOL)?
家庭实验室系列文章 - 电脑如何配置网络唤醒 (WOL)?
|
1月前
|
存储 安全 网络安全
网络安全威胁——计算机病毒
网络安全威胁——计算机病毒
|
2月前
|
网络协议 算法 Linux
【计算机】网络基础
独立模式 数据在每台计算机中呈现串行的方式传递 网络互联 多台计算机连接在一起,完成数据共享
17 0
|
3月前
|
算法 前端开发 网络协议
【计算机网络第一章知识点总结】 - - - 我为何钟情于计算机:一段有趣的选择之旅
【计算机网络第一章知识点总结】 - - - 我为何钟情于计算机:一段有趣的选择之旅
27 0
|
3月前
|
SQL XML Java
计算机毕设论文|基于网络超市商品销售管理系统的设计与实现
计算机毕设论文|基于网络超市商品销售管理系统的设计与实现
|
8月前
|
运维 网络协议 安全
计算机与网络发展的7个阶段【图解TCP/IP(笔记一)】
计算机与网络发展的7个阶段【图解TCP/IP(笔记一)】
|
6月前
|
网络安全 数据安全/隐私保护
2023年台州市第三届网络安全技能大赛(MISC)—李先生的计算机
2023年台州市第三届网络安全技能大赛(MISC)—李先生的计算机
37 0
2023年台州市第三届网络安全技能大赛(MISC)—李先生的计算机
|
8月前
|
存储 网络协议 容灾
降低存储网络55% 延迟!阿里云存储论文入选计算机顶会
降低存储网络55% 延迟!阿里云存储论文入选计算机顶会
202 1
|
8月前
|
运维 网络协议 安全
网络运维之计算机端口
网络运维之计算机端口
115 0
网络运维之计算机端口
|
9月前
|
网络安全
不能建立到远程计算机的连接,你可能需要更改此连接的网络设置
公司内网换了个账号,突然就连接不上了,也不知道怎么回事,搜了半天也没找到合适的,集合总结了一下才找到适合我电脑的解决方法
351 0

热门文章

最新文章