大家好,我是雜燴君。
嵌入式大雜燴周記主要是一些實(shí)用項(xiàng)目學(xué)習(xí)分享,每周一篇,每篇一個主題。
內(nèi)容主要來源于我們之前收集的資料:
https://gitee.com/zhengnianli/EmbedSummary
本期主角:SmartLink
項(xiàng)目需要用到smartconfig,之前我也沒接觸過,查資料了解的過程發(fā)現(xiàn)了一個好東西——SmartLink,分享給大家。
SmartLink是一個在Linux下實(shí)現(xiàn)的smartconfig。
倉庫鏈接:
https://github.com/jolin90/smartconfig
SmartLink的介紹及使用
1、相關(guān)知識補(bǔ)充
在介紹SmartLink的使用之前,我們先補(bǔ)充點(diǎn)相關(guān)知識。
(1)什么是smartconfig?
以wifi智能插座來做說明。我們剛買回來的智能插座,第一步要做的就是給設(shè)備進(jìn)行配網(wǎng)。
配網(wǎng)方式有很多,smartconfig就是其中一種:
圖片來源:物聯(lián)網(wǎng)電子世界
手機(jī)發(fā)送UDP廣播報文,待配網(wǎng)設(shè)備掃描所有的可用無線信道,找到發(fā)送smartConfig的報文,并鎖定在這一信道上開始接受數(shù)據(jù)。
(2)網(wǎng)卡工作模式
- 廣播模式:物理地址(MAC)是0Xffffff的幀為廣播幀,工作在廣播模式的網(wǎng)卡接收廣播幀。
- 多播模式:如果將網(wǎng)卡設(shè)置為多播模式,它可以接收所有的多播傳送幀,而不論他是不是組內(nèi)成員。
- 直接模式:只接收目的地址是自己MAC地址的幀。
- 混雜模式:工作在混雜模式下的網(wǎng)卡接收所有流經(jīng)網(wǎng)卡的幀。
查看、設(shè)置、取消混雜模式命令如:
ifconfigwlan0
#查看wlan0是否為混雜模式
ifconfigwlan0promisc
#設(shè)置wlan0為混雜模式
ifconfigwlan0-promisc
#取消wlan0混雜模式
(3)通信方式
通信方式分類:
- 單播:單臺主機(jī)與單臺主機(jī)之間的通信;
- 廣播:單臺主機(jī)與網(wǎng)絡(luò)中所有主機(jī)的通信;
- 組播:單臺主機(jī)與選定的一組主機(jī)的通信;
IP 網(wǎng)絡(luò)的組播一般通過組播 IP 地址來實(shí)現(xiàn),組播 IP 地址就是 D 類 IP 地址,即 224.0.0.0 至 239.255.255.255 之間的IP地址。
2、SmartLink使用
下載得到:
我們使用arm板子來做實(shí)驗(yàn)。首先,需要交叉編譯,執(zhí)行命令:
makeCC=arm-linux-gnueabihf-gcc
把編譯生成的smartlink可執(zhí)行程序傳到板子里。運(yùn)行時需要跟上接口的名稱。如:
./smartlinkwlan0
然后執(zhí)行如下命令重新編譯:
makeclean
make
生成的mcast_app可執(zhí)行程序在pc上運(yùn)行,模擬手機(jī)APP發(fā)送。運(yùn)行時需要傳入WiFi名稱及密碼。如:
./mcast_appTenda_552F180987654321
測試時需要先運(yùn)行mcast_app,再運(yùn)行smartlink。smartlink收到WiFi名稱及密碼時會打印出來。
運(yùn)行結(jié)果如:
這里,使用mcast_app來模擬手機(jī)APP。smartlink也提供了一個簡易的安卓手機(jī)APP,也可以使用APP進(jìn)行測試:
4、SmartLink組播包協(xié)議分析
上面演示了SmartLink的使用,下面簡單介紹一些SmartLink的組播包協(xié)議。
APP發(fā)送特定協(xié)議的組播包數(shù)據(jù)給設(shè)備,設(shè)備收到后進(jìn)行解析獲取路由器SSID及密碼。其協(xié)議如:
每個數(shù)據(jù)包6個字節(jié),
- 第1~3字節(jié):組播包地址,為固定值0x01 0x00 0x5e。
- 第4字節(jié):數(shù)據(jù)包序號。
- 第5字節(jié):指定數(shù)據(jù)。
- 第6個字節(jié):指定數(shù)據(jù)。
每次傳輸若干字節(jié)。舉例說明:
SSID為"TP-LINK_hys" ,PSW為"12345678",發(fā)送組播地址如下:
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包數(shù)據(jù),為特征碼包,后三個字節(jié)由組播IP映射為為組播MAC。取組播IP的后23位作為MAC,映射圖如:
圖片來源:jasonj33的博客
組播地址相關(guān)介紹可閱讀博文:
這里,手機(jī)APP設(shè)置的組播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
對應(yīng)
16
進(jìn)制為
00
:
48
:
35
取后
23
位即為
1.104.43
對應(yīng)
16
進(jìn)制為
01
:
68
:
2b
取后
23
位即為
2.92.49
對應(yīng)
16
進(jìn)制為
02
:
5
c:
31
(2)第4包數(shù)據(jù)放的是SSID及PSW的長度。
(3)第5~15包數(shù)據(jù)放的則是SSID及PSW。
(4)第16包數(shù)據(jù)為校驗(yàn)碼,采用連續(xù)異或校驗(yàn)的方式:
Crc=Crc^0x01^(byte)0x5e^0x40
以上就是本次的分享,文章如有錯誤,歡迎指出,謝謝!
咱們下期見~
-
Linux
+關(guān)注
關(guān)注
87文章
11331瀏覽量
210008 -
SmartLINK
+關(guān)注
關(guān)注
0文章
5瀏覽量
2317 -
config
+關(guān)注
關(guān)注
0文章
15瀏覽量
4645
發(fā)布評論請先 登錄
相關(guān)推薦
評論