『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 12650|回复: 8

[技术探讨] wireshark 抓包米家的设备,miio解析 json,相关数据包显示N/A

[复制链接]

1

主题

10

帖子

91

积分

注册会员

Rank: 2

积分
91
金钱
81
HASS币
0
发表于 2020-7-17 20:30:23 | 显示全部楼层 |阅读模式
    我家很多米家的设备都不支持HomeAssistant,于是我就准备自写python程序。
    抓包的时候遇到很奇怪的事,比如我想要抓包‘米家直流变频塔扇’的控制命令,token和ip地址都是已知的,github上有相关的抓包说明。我按着这个步骤一步步来,先将设备连上我电脑的共享热点,我电脑再通过网线联网。运行wireshark,连接无线网卡,过滤器输入 [backcolor=rgba(27, 31, 35, 0.05)]udp.dstport == 54321 or udp.srcport == 54321 。之后手机米家APP点击风扇‘开机’,我电脑上确实捕获到相关的udp包,然后我在cmd界面[backcolor=rgba(27, 31, 35, 0.05)]miio protocol json-dump ‘JSON’ --token ‘token’结果都是data=N/A,这些udp包都是有效的,都有数据存在,不是握手信息,却显示不出来。

通过米家APP发出命令

通过米家APP发出命令

    然而,我通过python-miio库发出info()命令和命令,这个倒是能够正常显示数据。

局域网send{"power",'true'}命令

局域网send{"power",'true'}命令

    为什么会这样?米家APP发出的命令还有一层加密?为什么局域网的命令能正常解析,而APP抓包的命令显示异常
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12105
金钱
9086
HASS币
460

教程狂人突出贡献

发表于 2020-7-17 20:48:48 | 显示全部楼层
好久没弄过了,隐隐约约有点儿印象:

现在的miio只能识别局域网内的消息(可正确解密)。而米家app和设备之间的消息很多是通过云端传送的(虽然都处在同一个局域网里),对于这部分消息好像是无法解密的(虽然也叫miio)。

不知道现在是不是都可以解密了?
回复

使用道具 举报

1

主题

10

帖子

91

积分

注册会员

Rank: 2

积分
91
金钱
81
HASS币
0
 楼主| 发表于 2020-7-17 21:39:50 | 显示全部楼层
XCray 发表于 2020-7-17 20:48
好久没弄过了,隐隐约约有点儿印象:

现在的miio只能识别局域网内的消息(可正确解密)。而米家app和设备 ...

那么python-miio有没有什么函数?可以获取未知设备的相关状态,主要是不知道这些设备的相关指令,不好控制
回复

使用道具 举报

1

主题

10

帖子

91

积分

注册会员

Rank: 2

积分
91
金钱
81
HASS币
0
 楼主| 发表于 2020-7-20 01:38:24 | 显示全部楼层
XCray 发表于 2020-7-17 20:48
好久没弄过了,隐隐约约有点儿印象:

现在的miio只能识别局域网内的消息(可正确解密)。而米家app和设备 ...

我查看python-miio源代码的时候,在protocol.py 中,解密部分有这一段
decrypted_quirks = [
            # try without modifications first
            lambda decrypted_bytes: decrypted_bytes,
            # powerstrip returns malformed JSON if the device is not
            # connected to the cloud, so we try to fix it here carefully.
            lambda decrypted_bytes: decrypted_bytes.replace(
                b',,"otu_stat"', b',"otu_stat"'
            ),
            # xiaomi cloud returns malformed json when answering _sync.batch_gen_room_up_url
            # command so try to sanitize it
            lambda decrypted_bytes: decrypted_bytes[: decrypted_bytes.rfind(b"\x00")]
            if b"\x00" in decrypted_bytes
            else decrypted_bytes,
        ]
我尝试把data带进去解密,可还是无法解密
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12105
金钱
9086
HASS币
460

教程狂人突出贡献

发表于 2020-7-20 06:59:03 | 显示全部楼层
WENGS 发表于 2020-7-20 01:38
我查看python-miio源代码的时候,在protocol.py 中,解密部分有这一段
decrypted_quirks = [
            ...

我是这么想的:python-miio,miio是民间大神逆向出来的api,利用token可以解密局域网内的消息(设备和app直接在局域网内交互以及设备间交互)。
但是设备和云端、app和云端的加密方式密钥等小米肯定不会轻易公开的吧?也不是那么容易破解的吧?
回复

使用道具 举报

4

主题

233

帖子

1427

积分

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1194
HASS币
0
发表于 2020-8-5 10:49:30 | 显示全部楼层
好多米家设备无法接入HA,最近也想学习一下怎么抓包
回复

使用道具 举报

0

主题

1

帖子

22

积分

新手上路

Rank: 1

积分
22
金钱
21
HASS币
0
发表于 2020-12-10 00:49:59 来自手机 | 显示全部楼层
就算接入HA了,功能只有基础开/关,大部分设备功能都不完善,贵在折腾,需要消耗大量时间
回复

使用道具 举报

4

主题

107

帖子

845

积分

论坛技术达人

积分
845
金钱
728
HASS币
40
发表于 2021-1-6 11:49:55 | 显示全部楼层
我抓了一下,发现米家app与设备之间就不是通过局域网通信的,都是云端通信。udp的包都抓不到我是针对米家加湿器测试的
回复

使用道具 举报

2

主题

28

帖子

413

积分

中级会员

Rank: 3Rank: 3

积分
413
金钱
385
HASS币
0
发表于 2022-10-17 21:04:13 | 显示全部楼层
seon 发表于 2021-1-6 11:49
我抓了一下,发现米家app与设备之间就不是通过局域网通信的,都是云端通信。udp的包都抓不到我是针对米家加 ...

今天踩了和你一样的坑,控制的包一个都没抓到,米家加湿器Pro,请问还有什么其他的方式吗,不能局域网控制太难受了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-28 23:36 , Processed in 0.356683 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表