大家好,我是LinuxZn。
什么是SmartLink?
項(xiàng)目需要用到smartconfig,之前我也沒接觸過,查資料了解的過程發(fā)現(xiàn)了一個(gè)好東西——SmartLink,分享給大家。
SmartLink是一個(gè)在Linux下實(shí)現(xiàn)的smartconfig。
倉庫鏈接:
https://github.com/jolin90/smartconfig
SmartLink的介紹及使用
1、相關(guān)知識(shí)補(bǔ)充
在介紹SmartLink的使用之前,我們先補(bǔ)充點(diǎn)相關(guān)知識(shí)。
(1)什么是smartconfig?
以wifi智能插座來做說明。我們剛買回來的智能插座,第一步要做的就是給設(shè)備進(jìn)行配網(wǎng)。
配網(wǎng)方式有很多,smartconfig就是其中一種:
圖片來源:物聯(lián)網(wǎng)電子世界
手機(jī)發(fā)送UDP廣播報(bào)文,待配網(wǎng)設(shè)備掃描所有的可用無線信道,找到發(fā)送smartConfig的報(bào)文,并鎖定在這一信道上開始接受數(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)通信方式
通信方式分類:
單播:單臺(tái)主機(jī)與單臺(tái)主機(jī)之間的通信;
廣播:單臺(tái)主機(jī)與網(wǎng)絡(luò)中所有主機(jī)的通信;
組播:單臺(tái)主機(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)行時(shí)需要跟上接口的名稱。如:
./smartlinkwlan0
然后執(zhí)行如下命令重新編譯:
makeclean make
生成的mcast_app可執(zhí)行程序在pc上運(yùn)行,模擬手機(jī)APP發(fā)送。運(yùn)行時(shí)需要傳入WiFi名稱及密碼。如:
./mcast_appTenda_552F180987654321
測試時(shí)需要先運(yùn)行mcast_app,再運(yùn)行smartlink。smartlink收到WiFi名稱及密碼時(shí)會(huì)打印出來。
運(yùn)行結(jié)果如:
這里,使用mcast_app來模擬手機(jī)APP。smartlink也提供了一個(gè)簡易的安卓手機(jī)APP,也可以使用APP進(jìn)行測試:
4、SmartLink組播包協(xié)議分析
上面演示了SmartLink的使用,下面簡單介紹一些SmartLink的組播包協(xié)議。
APP發(fā)送特定協(xié)議的組播包數(shù)據(jù)給設(shè)備,設(shè)備收到后進(jìn)行解析獲取路由器SSID及密碼。其協(xié)議如:
每個(gè)數(shù)據(jù)包6個(gè)字節(jié),
第1~3字節(jié):組播包地址,為固定值0x01 0x00 0x5e。
第4字節(jié):數(shù)據(jù)包序號(hào)。
第5字節(jié):指定數(shù)據(jù)。
第6個(gè)字節(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ù),為特征碼包,后三個(gè)字節(jié)由組播IP映射為為組播MAC。取組播IP的后23位作為MAC,映射圖如:
圖片來源:jasonj33的博客
這里,手機(jī)APP設(shè)置的組播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對應(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:5c: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文章
11232瀏覽量
208943 -
WIFI
+關(guān)注
關(guān)注
81文章
5290瀏覽量
203313 -
配網(wǎng)
+關(guān)注
關(guān)注
0文章
153瀏覽量
9048 -
智能插座
+關(guān)注
關(guān)注
5文章
194瀏覽量
27699 -
SmartLINK
+關(guān)注
關(guān)注
0文章
5瀏覽量
2307
原文標(biāo)題:分享一種實(shí)用的配網(wǎng)方案!
文章出處:【微信號(hào):Linux大陸,微信公眾號(hào):Linux大陸】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論