V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
orannge
V2EX  ›  Android

智能网关还有这操作?

  •  
  •   orannge · 2018-10-30 21:12:20 +08:00 · 9363 次点击
    这是一个创建于 2220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近接入一个智能网关的 sdk,组网流程是这样的:

    长按网关 reset 键进入初始化状态,手机连接任意一个 wifi,没外网也行,手动输入 wifi 密码,然后调用 sdk 的组网方法,网关竟然就自动接入 wifi 了??好像挺多智能设备都是这么一个操作,确实挺方便的。但按一般思维,我能想到的场景是先连接网关的热点,手机输入 wifi 信息,然后调用 sdk ( sdk 通过热点跟网关 tcp 通信之类),网关再关闭热点,连上输入的 wifi ?我开始认为可能是网关改写了 wifi 密码验证模块,网关创建一个隐藏 ssid,手机尝试连接该 ssid,将 wifi 数据放在密码里传过去。

    然而 AndroidManifest.xml 里的权限只有这几项:INTERNET,ACCESS_WIFI_STATE,ACCESS_NETWORK_STATE,CHANGE_WIFI_MULTICAST_STATE,也就是说不可能有加入 wifi 的操作。看了一下 sdk 好像确实只发送了 wifi 多播数据,难不成 wifi 多播不需要连 wifi 也能接收数据?我写 demo 试了并不能啊。

    那么问题来了,手机到底是怎么把 wifi 数据发送给网关的?智能网关和设备之间用 ZigBee 协议通信还能理解,不用蓝牙,不用 nfc,不用扫二维码,不用 wifi,甚至不用额外权限,手机还能发送数据?!一脸懵逼.jpg

    17 条回复    2018-10-30 22:27:51 +08:00
    paradislover
        1
    paradislover  
       2018-10-30 21:36:54 +08:00 via Android
    手机发送的多播数据含有你输入的 ssid 和 password 的编码,网关初始工作在 monitor 模式,在各个信道抓取特定的多播包,当成功抓取并解码 ssid 和 password 后,网关就可以连接 AP 了。
    bukip
        2
    bukip  
       2018-10-30 21:45:58 +08:00
    @paradislover 不对吧,这样应该是不能知道密码的
    weyou
        3
    weyou  
       2018-10-30 21:50:05 +08:00 via Android
    @paradislover 多播的数据也是加密的,其实重点不是这里。我猜它是将 wifi 信息隐藏在数据之前的 wifi header 信息里,然后智能网关只要侦听到这个包,把 header 里隐藏的数据按约定的算法解出来就好了
    billlee
        4
    billlee  
       2018-10-30 21:52:17 +08:00
    伪造了输入 wifi 密码的视图?
    paradislover
        5
    paradislover  
       2018-10-30 21:55:17 +08:00 via Android
    @weyou 太多手段了,多播地址可以变化,多播数据的长度也可以变化,这些都是信息载体,看你怎么利用
    paradislover
        6
    paradislover  
       2018-10-30 21:57:19 +08:00 via Android
    @bukip 以前做原厂 sdk 就是这么设计的
    yggd
        7
    yggd  
       2018-10-30 21:57:38 +08:00   ❤️ 1
    UDP 广播包里的长度字段是明文的,搜一下 “ Smart config 配网”
    orannge
        8
    orannge  
    OP
       2018-10-30 22:02:24 +08:00
    @paradislover 是吗,我原来以为 wifi 通道内的数据都是加密的。。
    orannge
        9
    orannge  
    OP
       2018-10-30 22:04:17 +08:00
    日志里多播地址确实是*.1.1.1 *.2.2.2 这样循环发送的
    paradislover
        10
    paradislover  
       2018-10-30 22:07:01 +08:00 via Android   ❤️ 1
    @orannge 都加密了,我怎么知道你包是发给那个 mac 地址的
    weyou
        11
    weyou  
       2018-10-30 22:07:22 +08:00 via Android   ❤️ 1
    @orannge 多播地址和长度其实都是在 802.11 的 header 里的,数据部分还是加密的
    kltt22
        12
    kltt22  
       2018-10-30 22:07:43 +08:00 via Android
    特意看了眼发帖时间,我以为我穿越了
    orannge
        13
    orannge  
    OP
       2018-10-30 22:11:21 +08:00
    @yggd @paradislover @weyou 感谢
    @kltt22 是我不懂这一块😂
    chinawrj
        14
    chinawrj  
       2018-10-30 22:11:59 +08:00
    wifi 加密并不加密目标 MAC 地址,而组播地址是一一映射到 MAC 地址的,因此其他人能看到你的 IPV4 的组播地址,就算是加密
    magicblr
        15
    magicblr  
       2018-10-30 22:13:12 +08:00
    SmartConfig 也就是一键配置,速度比 AP 模式快,为什么呢?请看下面分解。

    所谓的 SmartConfig 就是:

    手机 APP 端发送包含 WIFI 用户名 WIFI 密码的 UDP 广播包或者组播包;
    智能终端的 WIFI 芯片可以接收到该 UDP 包,只要知道 UDP 的组织形式,就可以通过接收到的 UDP 包解密 出 WIFI 用户名、密码;
    然后智能硬件配置到指定的 WIFI AP 上。
    orannge
        16
    orannge  
    OP
       2018-10-30 22:17:12 +08:00
    照这么说手机直接建立热点也是可以的吧
    orannge
        17
    orannge  
    OP
       2018-10-30 22:27:51 +08:00
    好吧,原来配网方式这么多,一键配置就有 SmartConfig SmartLink Airkiss
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3184 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 00:35 · PVG 08:35 · LAX 16:35 · JFK 19:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.