大家好,我是杂烩君。
嵌入式大杂烩周记主要是一些实用项目学习分享,每周一篇,每篇一个主题。
内容主要来源于我们之前收集的资料:
https://gitee.com/zhengnianli/EmbedSummary
本期主角: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"/*key0:01:00:5e:00:48:35*/
#defineIPADDR_KEY1"224.1.104.43"/*key1:01:00:5e:01:68:2b*/
#defineIPADDR_KEY2"224.2.92.49"/*key2:01:00:5e:02:5c:31*/
组播IP映射为组播MAC,得到:
取后
23
位即为
0.72.53
对应
16
进制为
00
:
48
:
35
取后
23
位即为
1.104.43
对应
16
进制为
01
:
68
:
2b
取后
23
位即为
2.92.49
对应
16
进制为
02
:
5
c:
31
(2)第4包数据放的是SSID及PSW的长度。
(3)第5~15包数据放的则是SSID及PSW。
(4)第16包数据为校验码,采用连续异或校验的方式:
Crc=Crc^0x01^(byte)0x5e^0x40
以上就是本次的分享,文章如有错误,欢迎指出,谢谢!
咱们下期见~
-
Linux
+关注
关注
87文章
11279浏览量
209263 -
SmartLINK
+关注
关注
0文章
5浏览量
2308 -
config
+关注
关注
0文章
15浏览量
4623
发布评论请先 登录
相关推荐
评论