使用 Root 后的安卓手机获取向日葵智能插座 C2 的开关 api

本文最后更新于:2023年11月2日 上午

之前看到 https.gs 上的一篇文章,发现可以抓取向日葵智能插座 C1Pro 的开关 api,并实现局域网或公网的控制。这样一来,我们其实就不需要依赖于向日葵自己家的 App 去实现智能插座的开关操作,还是比较方便的。今年趁着双十一,直接低价拿下来带有计电功能的 C2,便也来试一试能不能抓到接口。

首先,拿到插座以后肯定还是下载向日葵的官方 App,完成 wifi 的链接,这里就不再赘述。

向日葵的操作界面

然后就可以打开我们的抓包软件。需要注意的是,原博客中抓到的接口是 http 协议,但这个接口在新版的 App 上已经变为了 https 协议,因此我们需要找一台 Root 过后的安卓机去抓包。抓包的步骤没什么好说的,用 Root 权限给本地安装自己的 CA 证书,然后打开抓包模式,在向日葵的 App 那边开关几次插座,回来就能看到这一段时间内的请求。

HttpCanary 操作界面

点开可以看到,这是一个 GET 请求,一共有如下几个参数

  • status 这是状态设置,设置为 1 时为打开指令,0 为关闭指令
  • sn 这个应该是设备码
  • key 应该是用来操作设备的密钥
  • _api 操作类型,我只关心插座的打开关闭,所以设为 set_plug_status 即可
  • time 奇奇怪怪的而参数,也不是 unix 时间戳,反正照抄就行了
  • index 原博说是用来给插排操作指定第几个孔位的,我们智能插座直接设置为 0 即可

理论上你用抓出来的 url 已经可以实现公网访问了,但我测试下来并不行,可能是向日葵那边的服务器做了别的校验,比如说判断了 ua 之类的?不过无所谓,我本来就是打算局域网内操作。

登陆路由器后台,寻找疑似智能插座的设备,一般很容易就能找到。

路由器后台管理界面

使用 nmap 命令扫对应 ip 开放的端口。不知道是不是巧合,我和原博扫出来的端口都是 6767 端口。

扫描端口

将上面抓到的 url 的域名换成 ip:port,https 协议改成 http 协议,在浏览器中直接访问,获得了 0 的状态码,插座也正常开关。

浏览器操作测试


使用 Root 后的安卓手机获取向日葵智能插座 C2 的开关 api
https://zhul.in/2023/11/01/unveiling-sunflower-smart-adapter-api-intercepting-utilizing-api-android-packet-sniffing/
作者
竹林里有冰
发布于
2023年11月1日
更新于
2023年11月2日
许可协议