视频加载失败

【Lua】WOL原理与实现

668 字
3 分钟
【Lua】WOL原理与实现
【Lua】WOL原理与实现

WOL#

WOL全称为Wake-on-LAN,它的功效在于让休眠状态或关机状态的电脑,透过局域网的另一台电脑对其发令,使其唤醒、恢复成运作状态,或从关机状态转成引导状态[1]。

简单来说,WOL就是通过网络唤醒开启电脑。

原理#

支持WOL的主板在通电时会监听并分析同一网络下的广播信息(xxx.xxx.xxx.255),在一般的局域网使用有限广播地址即可(255.255.255.255),当发现了“魔法包”(Magic Packet)就会对其进行解读。

魔法包是以广播的形式发送,作用于当前局域网(LAN),也可以是子网(Subnet)。

魔法包介绍#

Magic Packet,是一种广播帧(frame),使用无连接协议,例如:UDP,发送的端口没有限制,可以使用任何端口进行发送,但一般约定俗成使用7或9号端口发送。大部分情况下,魔法包在数据链路层(OSI第2层)发送,使用广播地址进行广播,但也可以使用特定IP地址进行发送(OSI第3层)。

由于采用的是无连接协议,所以不保证数据包被目标机接收。

魔法包结构#

魔法包最简单的构成是6个十六进制的255(ff ff ff ff ff ff)共6字节为数据包的头部标识,后面是目标机的十六进制MAC地址,并将MAC重复16次,到此数据包共102字节。有时数据包内还会紧接着4-6字节的密码信息。这个帧片段可以包含在任何协议中,最常见的是包含在 UDP 中。[2]

例如目标机MAC为:1a:2b:3c:4d:5e:6f

6字节头96字节信息=MAC信息x124-6字节密码(可空)
ff ff ff ff ff ff1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f 1a2b3c4d5e6f密码

代码实现#

我是用的是esp8266,刷入NodeMCU固件,是用LUA进行编程实现。

NodeMCU编译时起码需要编译net和wifi两个模块,并正确配置和连上wifi。

mac = '1a2b3c4d5e6f' -- 要进行目标主机的MAC地址
bip = '255.255.255.255' -- 路由器广播地址
head = 'FFFFFFFFFFFF' -- 数据头
head = to(head)
mac = to(mac)
for i = 1, 16 do
head = head .. mac
end
u = net.createUDPSocket()
u:send(1234, bip, head) -- 是用9号端口
u:close()
-- 将两个一组字符串表示的十六进制转为十六进制的字符串
-- 'ff'(66 66) -> 0xff -> '.'(255)
function to(str)
ret = ''
for i = 1, string.len(str), 2 do
byte = ('0x' .. string.sub(str, 0 + i, 1 + i))
a = tonumber(byte)
ret = ret .. string.char(a)
end
return ret
end

参考#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
【Lua】WOL原理与实现
https://rehtt.com/posts/239/
作者
Rehtt
发布于
2021-02-26
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Rehtt
Hello, I'm Rehtt.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
150
分类
17
标签
73
总字数
67,772
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录