物联网给我们又提供了一种窃取WiFi密码的好方式:让智能设备主动断线。

同时也提供一种让智能设备连接到恶意WiFi的方式:设备一键配置功能时疯狂广播恶意WiFi的信息。

转自:http://blog.csdn.net/lbaihao/article/details/74231693    原文如下:

智能家居/家电现阶段还处于普及阶段,由于家庭wifi网络的普及,目前普遍采用wifi与路由器完成连接,与手机/云端进行数据交互.

智能硬件,如智能插座,智能空调,智能空气净化器由于不具备人机交互界面,不能像电脑一样的搜索/选择指定路由器,输入连接密码的界面,所以必须先解决正确连接路由问题;

目前流行的wifi配置模式一般有以下2种:

1:智能硬件处于AP模式,手机用于station模式,手机连接智能插座的AP后组成局域网,手机发送需要连接路由的SSID及密码至智能插座,智能硬件主动去连接指定路由后,完成连接

2:一键配置(smartconfig)模式:智能硬件处于混杂模式下,监听网络中的所有报文;手机APP将SSID和密码编码到UDP报文中,通过广播包或组播报发送,智能硬件接收到UDP报文后解码,得到正确的SSID和密码,然后主动连接指定SSID的路由,完成连接

以上两种方式都可以达到让智能硬件连接至指定路由的效果,但是AP模式需要手动切换手机wifi连接的网络,先连接智能硬件的AP网络,配置完成后再恢复连接正常wifi网络.有一定的复杂性;

但是smartconfig由于路由器品牌及手机品牌众多,存在一定的兼容性问题,所以目前一般厂家仍保留AP模式,作为smartconfig失败后的备用配网方案;

下面重点讲解一下一键配置模式原理及应用;当前主流IOT的wifi方案有:

厂商

芯片方案

技术名称

发包方式

1

TI

CC3200

SmartConfig

往某一固定IP发udp包

2

高通

QCA4004/QCA4002

SmartConnection

3

联发科MTK

MTK7681

SmartConnection

组播地址编码

4

MARVELL

MC200+8801/MW300

EasyConnect

组播地址编码

5

Reltek

AMEBA

SimpleConfig

组播地址编码

6

乐鑫

Esp8266

SmartConfig

组播,通过长度编码

7

新案线

NL6621

SmartConfig

组播地址编码

8

微信

AirKiss

全网广播,通过长度编码

这个功能最早是TI提出并应用于CC3200上;不过从原理上讲,只要芯片驱动支持开启混杂模式(WiFi Promiscuous),就可以支持一键配网功能,只是各个厂家叫法及实现编码方式不同而已;

手机编码发送采用有UDP组播或广播,不同的发送方式和编码,对应的解码过程也不一样.,当前测试发现,微信是通过UDP广播包实现的;TI是通过往一固定IP地址发送udp包;其他芯片厂家提供的一般为UDP组播方式;

由于无线数据传播必定是广播的,所以必然可以被监听到;如果AP没有加密的话,UDP直接可以把相关的信息发送出来.但是路由器AP一般都是加密的,而且加密方式不固定.wifi模块在无法直接解析出数据包

我们通过分析802.11的MAC帧格式,可以知道,链路层载荷数据(即网络层的头部及网络层数)在数据帧中是清晰可见的,只要接到到802.11帧就可以立刻提取出载荷数据.

常见两种数据帧格式:

Station to AP

AP to Station

DA:目标MAC地址

SA:源MAC地址

LENGTH:表示后面数据的长度

LLC:表示LLC头

SNAP:表示3byte的厂商代码和2byte的协议类型表示

DATA:载荷数据

FCS:帧检验序列

发送端:可以采用2种不同的编码发送方式UDP广播和组播;

一:UDP广播:小规模测试后,发现当前只有微信的AirKiss采用了全网广播模式,为啥微信会采用广播模式,原因未知;TI采用的是固定IP地址的UDP数据包,原理和微信基本一致;

从802.11帧格式分析中获知,无线信号监听方的角度来说,不管无线信道有没有加密,DA、SA、LENGTH 、LLC、SNAP、FCS字段总是暴露的,因此信号监听方可以从这6个字段获取有效信息.从发送方讲,由于操作系统的限制,如果采用广播只剩下LENGTH发送方可通过改变其所需要发送数据包的长度进行控制.所以只要指定出一套利用长度编码的通讯协议,就可利用数据包的Lenght字段进行数据传递;

二:UDP组播:

组播地址是保留的D类地址从224.0.0.0-239.255.255.255

IP地址与MAC地址映射关系为:将MAC地址的前25位设定为01.00.5e,而MAC地址的后23位对应IP地址的位;

故发送端可以将数据编码在组播ip的后23bit中,通过组播包发送,接收端进行解码即可;

接收端进入一键配置功能后,wifi智能硬件从信道1开始监听路由上的数据,如当前监听信道有符合规则的数据包,就停止信道切换,停留在当前信道接收完全部数据.否则就依次切换至信道2.3.4....直到信道14后又从信道1开始继续监听依次循环;

当然,wifi智能硬件可以在开启混杂模式之前,先行扫描当前环境下存在的AP获取所有当前AP的信道,然后只对当前扫描到的信道进行依次监听,如当前环境下只存在2个路由,分别在1.6信道,只需轮流扫描channel1和channel6,这样可以提高配置效率

【转载】wifi一键配网smartconfig原理及应用的更多相关文章

  1. WIFI智能配网 - SmartConfig

    要开始IoT项目的第一步是什么?当然不是硬件,而是硬件与硬件的连接!即使有各种各样的通信协议没有好的连接方式绝对不行.那外设上没有的屏幕,没有键盘怎末输入密码怎末选择网络?对,这就是WIFI模块最重要 ...

  2. 26-ESP8266 SDK开发基础入门篇--编写WIFI模块 SmartConfig/Airkiss 一键配网

    https://www.cnblogs.com/yangfengwu/p/11427504.html SmartConfig/Airkiss 配网需要APP/微信公众号,这节大家先使用我做好的APP/ ...

  3. ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  4. WiFi-ESP8266入门http(3-4)网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信

    网页一键配网(1若为普通wifi直连  2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信 工程连接:https://github.com/Dongvdong/ESP8266_H ...

  5. ESA2GJK1DH1K微信小程序篇: 测试微信小程序APUConfig给WI-Fi模块配网并绑定设备,并通过MQTT控制设备

    前言(源码使用介绍在最后) 一,微信小程序篇小程序下载(该源码为这节测试源代码) 二.有多少人一直在期盼着小程序可以实现SmartConfig或者Airkiss的功能? 来吧!我的这种方式包您满意. ...

  6. 5-(微信小程序篇)关于WiFi模块配网以后利用小程序绑定设备,绑定方式说明

    https://www.cnblogs.com/yangfengwu/p/11625189.html 众所周知:使用微信Airkiss 只能给设备配网,并不能够获取设备的MAC地址信息,但是我在 ht ...

  7. 27-ESP8266 SDK开发基础入门篇--编写Android SmartConfig一键配网程序

    style="font-size: 18pt;">https://www.cnblogs.com/yangfengwu/p/11429007.html https://wik ...

  8. IoT时代:Wi-Fi“配网”技术剖析总结

    导读 近年来,物联网市场竞争激烈,从物联网平台厂商,设备生产商,到服务提供商,都在涌入这片红海.预计到2020年,全球联网设备数量将达到260亿个,年复合增长率达到20%:全球联网设备带来的数据将达到 ...

  9. ESP8266开发之旅 网络篇⑭ web配网

    1. 前言     目前,市面上流行多种配网方式: WIFI模块的智能配网(SmartConfig以及微信AirKiss配网) SmartConfig 配网方式 请参考博主之前的博文 ESP8266开 ...

随机推荐

  1. Solr4.10与tomcat整合并安装中文分词器

    1.solr Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索引. ...

  2. [UWP]了解模板化控件(10):原则与技巧

    1. 原则 推荐以符合以下原则的方式编写模板化控件: 选择合适的父类:选择合适的父类可以节省大量的工作,从UWP自带的控件中选择父类是最安全的做法,通常的选择是Control.ContentContr ...

  3. NodeJs学习笔记(五)---单元测试补充

    今天早上继续研究Mocha,忽然发现一个问题,我的大部分程序都是需要登录验证的,所以需要预先登录之后才能进行下一步测试,就开始在网上找答案,发现没有这种资料,很疑惑,最后发现其实是自己太笨了,因为这个 ...

  4. 变量声明declare,简单运算符运算,变量测试与内容替换

    declare -/+ 选项 变量名 - 设类型 + 取消类型 -i 设为整型 -x 设为环境变量 -p 显示类型属性(property) [root@localhost ~]# a= [root@l ...

  5. windos10安装mongodb并配置

    想了想还是把这个写上吧,毕竟网上的教程有不少坑的. 首先下载mongodb,如果你嫌官网慢,那么你可以去我的百度云下载 链接:http://pan.baidu.com/s/1pKEWTBX 密码:v3 ...

  6. java.lang基础数据类型boolean、char、byte、short、int、long、float、double (JDK1.8)

    java.lang.Boolean public static int hashCode(boolean value) { return value ? 1231 : 1237; } JDK 1.8新 ...

  7. IntelliJ IDEA如何设置头注释,自定义author和date

    下面这张图,保证你一看就会: 下面这个模板,你拿去改一改就行了. /** * @Author: Gosin * @Date: ${DATE} ${TIME} */ 如果觉得上面名字下面的波浪线碍眼,可 ...

  8. Ubuntu14.04下安装 boost (boost_1.54 最简单的方法)

    直接执行命令: sudo apt-get  install libboost-dev 测试: 创建一个 boost_test.cpp 文件,写入 #include<iostream> #i ...

  9. DNS 域名系统的简介

    一.DNS域名系统简介 1.网络中为了区别各个主机,必须为每台主机分配一个唯一的地址, 这个地址即称为“IP 地址.但这些数字难以记忆, 所以采用“域名” 的方式来取代这些数字. 2.当某台主机要与其 ...

  10. (通用)深度学习环境搭建:tensorflow安装教程及常见错误解决

    区别于其他入门教程的"手把手式",本文更强调"因"而非"果".我之所以加上"通用"字样,是因为在你了解了这个开发环境之后 ...