大家好,我是雜燴君。
嵌入式大雜燴周記主要是一些實用項目學習分享,每周一篇,每篇一個主題。
內容主要來源于我們之前收集的資料:
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文章
11232瀏覽量
208945 -
SmartLINK
+關注
關注
0文章
5瀏覽量
2307 -
config
+關注
關注
0文章
15瀏覽量
4618
發布評論請先 登錄
相關推薦
評論