博联智能插座设备离线

博联智能插座设备离线,第1张

博联智能插座介绍 博联智能插座怎么设置

智能设备的联动通常采用IFTTT,但这种方式受限于官方软件提供的功能。如果想自主灵活控制,需要有官方SDK或者了解协议细节。本文通过对Broadlink SP设备(包括SP2和SP mini)的协议数据进行捕获和分析,达到重放控制的效果。在这个过程中,我们对它的安全性有了更深刻的认识。

有前辈做过类似的工作,但是抓包的过程比较复杂。本文方法简便,易于本地和远程分析。这种方法在研究其他智能设备时也可以借鉴。

在路由器上用tcpdump抓包,基本行为研究

家里的路由器刷的是OpenWRT,可以直接尝试在路由器上用tcpdump抓包。

1:不打开任何App时,观察插座上的活动。

命令:tcpdump-ira0udp和主机SP3-u-s0-w/tmp/tmp . pcap-C30-vvv

(sp3是我的3号sp型设备,不是型号;上面的命令是在捕获30个UDP包后停止)

在Wireshark中打开捕获的pcap文件:

可以看到,每隔25秒,socket就会向Broadlink的服务器(112.124.35.104)报告自己的状态。可以称之为在线状态报告。

2:4G网络下(无Wi-Fi),打开手机App对应的socket状态界面。

可以看到,每隔3秒,socket就会向Broadlink的服务器(112.124.35.104)报告自己的交换机状态。当然,数据中有在线状态报告。从包裹的长度很容易看出来。

3秒的间隔应该由应用程序决定。实际上,应用程序向Broadlink服务器询问插座的开关状态,服务器将再次询问插座。

局域网内抓包的问题

当手机在家里或在外面时,控制智能插头的原理是不同的。手机插座和手机插座在同一个局域网时,不需要服务器的帮助,直接通信。

但是在无线路由器上,两个Wi-Fi设备之间的通信是无法捕捉到的。可能这些通信都是Wi-Fi硬件直接处理的,不经过路由器系统(驱动)。而且我试了,一方连2.4G,另一方连5G,也是抓不到数据。

要捕获局域网中两个无线设备之间的通信,传统的方式是把PC变成AP,让它们的流量通过PC,然后用包捕获软件捕获。但是,这需要重新部署和配置设备,相当麻烦。

使用无线网卡和Wi-Fi嗅探器的监听模式也是一种选择。但是对于加密的无线网络,就麻烦了。而且是从数据链路层分析应用层的数据,让我们觉得有点舍不得。

因为无线路由器可以捕捉到局域网内有线设备和无线设备的通信,所以还有一个选择:让手机有线!

Android模拟器Genymotion

通过在PC上运行Android模拟器,我们有了一个连接到有线网络的手机(当然前提是PC连接到有线网络),这样我们就可以在无线路由器上继续抓取数据包。

Android的模拟器有很多,我一般用Genymotion。Genymotion默认不支持ARM,不过有好事者得到了翻译器。新版Genymotion似乎只有Android 6.0和5.0上的翻译器支持。

当然,如果App支持x86架构,或者与架构无关(纯Java),就不需要ARM translator了。但是Broadlink App(易控)不是这样的。

最后,Broadlink应用程序可以在Android 6.0的模拟器上正常运行。

另外,在Genymotion的设置中使用了网桥模式,这样模拟器和Broadlink设备就在同一个网段中。

局域网内行为研究

实验三:在局域网中,在Android模拟器上点击开/关时,在OpenWRT上使用tcpdump进行抓包。

这些数据包中每3秒钟有一个开关状态数据包。都是114字节的QUIC协议。根据时间的周期性,可以看出哪些包对应了切换控制,比如上图中的第2个和第4个包。

为了重发这些数据包,编写了一个简单的Python脚本sendpcap.py,简单解析pcap文件,主要是确定每个包的分隔,分别是头和净荷,可以发送一个或多个指定序列号的包。

实验四:在局域网中,在pcap中重新发送一个指定的UDP包,可以控制SP套接字的打开和关闭。

命令:sendpcap . pysp3p 3-LAN-phone-onoff . pcap 2

发送第二个数据包将打开套接字。

虽然每个包的数据不完全一样,但是这些包可以用来控制套接字。实测一年后依然有效(当然只针对同一网络环境下的同一设备)。

因此,通过从每个设备采集一段样本数据来确定哪个包被控制打开,哪个包被控制关闭,就可以实现不同插座的独立控制。

远程行为研究

那么,这种播放机制对遥控插座有效吗?

对于远程交互,因为家里的路由器只接收进入设备的数据,有些交互数据可能不会流入设备(可能是与Broadlink服务器交互)。因此,有必要在远端建立封包撷取环境,以撷取远端行动电话的外发资料。

其实在root的Android上也可以安装tcpdump。更好的是,Genymotion的Android已经自带了tcpdump。

实验五:在远程网络上,通过Android模拟器上的tcpdump捕获数据包。

命令:tcpdump-I et h1-u-c300-vvv-wxxx . pcap

结果出乎意料,没有直接指向家里的数据流,只有和Broadlink服务器的数据交换。

同样,我们可以重新发送这些数据包。在下图中,数据包128对应于离播套接字,154对应于开播套接字。

实验六:在远程网络上,通过在pcap中重新发送一个指定的数据包,就可以在家控制SP套接字的通断。

命令:sendpcap . py 112.124.42.42 XXX . pcap 154

就是这么简单,发送一个独立的数据包到Broadlink的服务器,就可以控制家里的socket,没有任何上下文,数据也不会过期(实测一天也可以用)。

结语

借助基于OpenWRT的无线路由器或基于Genymotion的Android模拟器,我们可以轻松抓取路由器或Android上带有tcpdump的Broadlink SP设备的网络数据包,并分析其协议。

控制局域网中的Broadlink套接字不需要Broadlink服务器的参与;遥控插座需要服务器的帮助。

重新发送截获的UDP/QUIC包可以控制套接字。不管是SP2还是SP mini,不管是局域网还是远程。但是,它必须在相应的环境和相应设备的数据包中使用。对于同一个设备,每次捕获的包并不完全相同,但任何一个都是有效的,不会过期,没有会话上下文。

可见这个安全性很低,形象点说就是“裸奔”。只要在网络上拦截了发往Broadlink服务器或SP设备的UDP包,就很容易实现“重放攻击”。当然,我们也可以利用这个原理来独立控制插座。比如我用程控电源给锂电池充电(程控电源插在SP插座上)。当树莓Pi的电流或电压达到一定值时,它从树莓Pi发送一个UDP包关闭插座,从而完全关闭程控电源;电压过低时,打开电源充电。这些都是手机App无法整合的。

所以,这件事有两面:不安全,但是方便。但是从产品的角度来说,这样的插座安全性很低。

版权声明:本文内容由网友提供,文中观点仅代表作者本人。本站仅提供信息存储空服务,不拥有所有权并承担相关法律责任。如果发现本网站涉嫌抄袭侵权/非法内容,请发邮件举报。一经核实,本网站将被立即删除。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/4769619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-09
下一篇 2022-11-09

发表评论

登录后才能评论

评论列表(0条)

保存