大家好,我是LinuxZn。
什么是SmartLink?
项目需要用到smartconfig,之前我也没接触过,查资料了解的过程发现了一个好东西——SmartLink,分享给大家。
SmartLink是一个在Linux下实现的smartconfig。
仓库链接:
https://github.com/jolin90/smartconfig
SmartLink的介绍及使用
1、相关知识补充
在介绍SmartLink的使用之前,我们先补充点相关知识。
(1)什么是smartconfig?
以wifi智能插座来做说明。我们刚买回来的智能插座,第一步要做的就是给设备进行配网。
配网方式有很多,smartconfig就是其中一种:
手机发送UDP广播报文,待配网设备扫描所有的可用无线信道,找到发送smartConfig的报文,并锁定在这一信道上开始接受数据。
(2)网卡工作模式
广播模式:物理地址(MAC)是0Xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。
多播模式:如果将网卡设置为多播模式,它可以接收所有的多播传送帧,而不论他是不是组内成员。
直接模式:只接收目的地址是自己MAC地址的帧。
混杂模式:工作在混杂模式下的网卡接收所有流经网卡的帧。
查看、设置、取消混杂模式命令如:
ifconfigwlan0#查看wlan0是否为混杂模式 ifconfigwlan0promisc#设置wlan0为混杂模式 ifconfigwlan0-promisc#取消wlan0混杂模式
(3)通信方式
通信方式分类:
单播:单台主机与单台主机之间的通信;
广播:单台主机与网络中所有主机的通信;
组播:单台主机与选定的一组主机的通信;
IP 网络的组播一般通过组播 IP 地址来实现,组播 IP 地址就是 D 类 IP 地址,即 224.0.0.0 至 239.255.255.255 之间的IP地址。
2、SmartLink使用
下载得到:
我们使用arm板子来做实验。首先,需要交叉编译,执行命令:
makeCC=arm-linux-gnueabihf-gcc
把编译生成的smartlink可执行程序传到板子里。运行时需要跟上接口的名称。如:
./smartlinkwlan0
然后执行如下命令重新编译:
makeclean make
生成的mcast_app可执行程序在pc上运行,模拟手机APP发送。运行时需要传入WiFi名称及密码。如:
./mcast_appTenda_552F180987654321
测试时需要先运行mcast_app,再运行smartlink。smartlink收到WiFi名称及密码时会打印出来。
运行结果如:
这里,使用mcast_app来模拟手机APP。smartlink也提供了一个简易的安卓手机APP,也可以使用APP进行测试:
4、SmartLink组播包协议分析
上面演示了SmartLink的使用,下面简单介绍一些SmartLink的组播包协议。
APP发送特定协议的组播包数据给设备,设备收到后进行解析获取路由器SSID及密码。其协议如:
每个数据包6个字节,
第1~3字节:组播包地址,为固定值0x01 0x00 0x5e。
第4字节:数据包序号。
第5字节:指定数据。
第6个字节:指定数据。
每次传输若干字节。举例说明:
SSID为"TP-LINK_hys" ,PSW为"12345678",发送组播地址如下:
0x010x000x5e0x000x480x35 0x010x000x5e0x010x680x2b 0x010x000x5e0x020x5c0x31 0x010x000x5e0x030x0b0x08 0x010x000x5e0x04'T''1' 0x010x000x5e0x05'P''2' 0x010x000x5e0x06'-''3' 0x010x000x5e0x07'L''4' 0x010x000x5e0x08'I''5' 0x010x000x5e0x09'N''6' 0x010x000x5e0x0a'K''7' 0x010x000x5e0x0b'_''8' 0x010x000x5e0x0c'h'0x00 0x010x000x5e0x0d'y'0x00 0x010x000x5e0x0e's'0x00 0x010x000x5e0x400x1c0x03
其中:
(1)第1~3包数据,为特征码包,后三个字节由组播IP映射为为组播MAC。取组播IP的后23位作为MAC,映射图如:
图片来源:jasonj33的博客
这里,手机APP设置的组播IP固定如:
#defineIPADDR_KEY0"224.0.72.53"/*key0000035*/ #defineIPADDR_KEY1"224.1.104.43"/*key100012b*/ #defineIPADDR_KEY2"224.2.92.49"/*key2000231*/
组播IP映射为组播MAC,得到:
取后23位即为0.72.53对应16进制为00:48:35 取后23位即为1.104.43对应16进制为01:68:2b 取后23位即为2.92.49对应16进制为02:5c:31
(2)第4包数据放的是SSID及PSW的长度。
(3)第5~15包数据放的则是SSID及PSW。
(4)第16包数据为校验码,采用连续异或校验的方式:
Crc=Crc^0x01^(byte)0x5e^0x40
以上就是本次的分享。
审核编辑:汤梓红
-
Linux
+关注
关注
87文章
11216浏览量
208810 -
WIFI
+关注
关注
81文章
5285浏览量
203190 -
配网
+关注
关注
0文章
153浏览量
9044 -
智能插座
+关注
关注
5文章
193浏览量
27687 -
SmartLINK
+关注
关注
0文章
5浏览量
2305
原文标题:分享一种实用的配网方案!
文章出处:【微信号:Linux大陆,微信公众号:Linux大陆】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论