揭開智能配置上網(wǎng)(微信Airkiss)的奧妙面紗

注:本篇文章屬于轉(zhuǎn)載

本文介紹微信利用Airkiss技術(shù)對wifi設(shè)備進行智能配置上網(wǎng)的場景本讥,并分析其實現(xiàn)的原理。這里再次說明,Airkiss只是用于配置上網(wǎng)拷沸,其跟微信硬件平臺的通信流程和接入?yún)f(xié)議規(guī)范完全沒有關(guān)系色查。一個wifi設(shè)備并不一定要通過Airkiss技術(shù)來配置上網(wǎng),它也可以利用傳統(tǒng)的方法來配置撞芍,也可以利用其它廠商的智能配置技術(shù)來完成配置秧了。所有的wifi智能配置上網(wǎng)技術(shù)的原理基本上都是一致的,其開山鼻祖應(yīng)該是TIsmartConfig序无。

目前幾乎所有的主流wifi廠商都提供了Airkiss的接口庫验毡,但并沒有說明其原理和實現(xiàn)過程。網(wǎng)上也只見一份Airkiss技術(shù)實現(xiàn)方案文檔帝嗡,但需要對無線通信和socket編程有一定基礎(chǔ)的人才能理解晶通。本文盡可能深入淺出地分析這項技術(shù),幫助大家理解哟玷。

一狮辽、傳統(tǒng)配置上網(wǎng)過程

例如我們買了一個路由器,路由器是沒有按鍵和屏顯示的巢寡。而我們都知道喉脖,路由器要配置好運營商的賬號和密碼才能接入互聯(lián)網(wǎng)的。一般的做法都是路由器作為熱點AP抑月,其提供一個WebServer來設(shè)置路由的各項參數(shù)树叽,默認IP是192.168.1.1(或者其他IP,路由器說明書上會說明)爪幻;我們通過電腦有線接入路由器菱皆,通過DHCP自動分配到一個192.168.1段的地址。然后通過瀏覽器來訪問http://192.168.1.1挨稿,即可以進入路由器設(shè)置界面進行設(shè)置仇轻,包括運營商的賬號和密碼、本機的SSID和密碼奶甘。然后我們的手機就可以開啟wifi掃描到SSID篷店,輸入密碼即可以訪問互聯(lián)網(wǎng)了。

再比如臭家,我們家里已經(jīng)有了一個可以上網(wǎng)的路由器(SSIDx和pwdx)疲陕。我們購買了一個無線攝像頭裝在家里。它自然也要連到家里的路由钉赁,才能訪問這個攝像頭的廠商蹄殃,這樣我們才可以用手機的APP接收到廠商服務(wù)器傳過來的數(shù)據(jù)進行顯示。攝像頭也沒有顯示屏和按鍵(reset鍵不算啦)你踩。傳統(tǒng)的配置方法是:

1)攝像頭恢復(fù)出廠設(shè)置后默認進入AP(熱點)+Station(工作站)狀態(tài)诅岩。AP熱點的SSID和密碼由攝像頭的說明書說明讳苦,是廠商默認的。手機通過wifi連接到該AP吩谦,然后通過瀏覽器訪問http://192.168.1.1(也是廠商默認的)鸳谜,在該界面設(shè)置家里的路由器的SSID和密碼,便于其作為Station連入家里的路由器式廷。

2)當(dāng)攝像頭連接路由器成功后咐扭,其即單獨以Station的模式運行(不用再做AP可以省功耗),其會立即訪問廠商的服務(wù)器(其內(nèi)部程序代碼會hardcode廠商服務(wù)的域名或者IP)滑废,告知其已經(jīng)上線蝗肪,并且要在一段周期內(nèi)發(fā)送Beacon心跳包維持長連接。

3)手機斷開攝像頭的AP熱點蠕趁,連接家里的路由器穗慕。打開攝像頭的APP,即可以通過廠商服務(wù)器查看家里的攝像頭的效果妻导。

所以傳統(tǒng)的配置上網(wǎng)方法是wifi設(shè)備必須以AP的模式運行逛绵,配置好以后再轉(zhuǎn)回Station模式運行。是不是比較費事倔韭?

二术浪、智能配置上網(wǎng)流程

智能配置上網(wǎng)最新走進人們視野好像是慶科在大張旗鼓地宣傳其智能插座的一鍵配置功能,其實最早是Ti推出的技術(shù)寿酌。它是怎樣操作呢胰苏?

1)wifi設(shè)備以Station混雜模式運行。

2)手機智能配置APP通過某種協(xié)議包發(fā)送家里路由器的SSID和密碼醇疼。

3)wifi設(shè)備通過抓包獲取到SSID和密碼硕并,然后連接家里的路由器。

整個過程是不是很簡單秧荆?

三倔毙、智能配置的基本原理

1.混雜模式

這里有沒有注意到,wifi設(shè)備剛開始同樣是以Station的模式運行乙濒,但是還有一個混雜模式陕赃。是什么意思?它是指正常的wifi設(shè)備都有一個MAC地址颁股,其硬件電路會自動過濾目標(biāo)MAC地址跟其MAC不同的數(shù)據(jù)包么库。開啟混雜模式就是我們平常時說的抓包,就是空中符合802.11格式的數(shù)據(jù)包都接收進來甘有,不管MAC是否一樣诉儒。

很明顯,手機智能配置APP并不知道該wifi設(shè)備的MAC地址亏掀,所以手機wifi發(fā)送出的數(shù)據(jù)包忱反,通過家里的路由器轉(zhuǎn)發(fā)出去時运准,wifi設(shè)備必須要在混雜模式下才能接收到這些數(shù)據(jù)包。

2.信道切換

802.11有多個信道缭受,某個時刻wifi設(shè)備和路由器都是處于某個信道。路由器一般都是默認在第6個信道该互。所以如果想家里的wifi信號更好一點米者,可以嘗試將路由器的信道改到一個其他值,這樣就不會跟鄰居家的wifi信道重疊了宇智。無線信號混在同一個頻道就會干擾的蔓搞。

同理,我們也不能假定wifi設(shè)備是處于哪個信道随橘,但我們可以在APP中確定手機wifi的發(fā)送信道喂分,這樣可以要求wifi設(shè)備在一定的時刻內(nèi)切換信道,以便于接收數(shù)據(jù)包机蔗。當(dāng)wifi設(shè)備檢測到有效的數(shù)據(jù)包后蒲祈,要鎖定在該信道進行后續(xù)通信。

3.利用數(shù)據(jù)幀的長度來承載有效信息

我們先來看看802.2 SNAP(802.11物理層協(xié)議)的數(shù)據(jù)幀格式:

我們不去深入研究各個字段的含義萝嘁,只需要知道DAT是加密的梆掸,如路由器都會通過WAP2、WEP等方式加密數(shù)據(jù)等牙言。而DA(目標(biāo)MAC)酸钦、SA(源MAC)、LLC(邏輯控制)咱枉、SNA(廠商代碼和協(xié)議標(biāo)識)卑硫、FCS(校驗碼),這五個字段雖然是沒有加密的蚕断,但是APP層的應(yīng)用編程難以改變這些字段欢伏,需要操作系統(tǒng)才有權(quán)限修改,所以最終能夠利用的字段就是Length亿乳,其沒有被加密颜懊,而且能夠被應(yīng)用層編程所控制。

由于Length是兩個字節(jié)风皿,但是一幀最長是1492個有效數(shù)據(jù)河爹,所以也不能完全利用16個比特。以最簡單的方法來使用Length就是使用其中的一個字節(jié)桐款,這樣如果我們要發(fā)送數(shù)據(jù)0x12345678咸这,那就連續(xù)發(fā)8個數(shù)據(jù)幀,第一次的長度是1魔眨,第二次的長度是2媳维,以此類推酿雪。

四、微信Airkiss

Airkiss顧名思義是飛吻的意思侄刽,即手機發(fā)送的SSID和密碼經(jīng)過路由轉(zhuǎn)發(fā)出去指黎,被目前wifi設(shè)備所檢測并截獲到。無線網(wǎng)絡(luò)協(xié)議一般場景都規(guī)定station只能和AP通信州丹,而不能station和station通信(這種場景叫做AD-Hoc點對點)醋安。接下來我們分析SSID和pwd怎么利用Length進行編碼的過程。

1.???物理層

發(fā)送4個字節(jié)的前導(dǎo)碼序列墓毒,{1,2,3,4}吓揪。即發(fā)送4個數(shù)據(jù)幀,幀長度分別是1,2,3,4.其要解決兩個問題:

1)空中充滿無線信號所计,通過前導(dǎo)碼來識別出符合airkiss協(xié)議的數(shù)據(jù)包的開始柠辞。

2)數(shù)據(jù)包的數(shù)據(jù)是經(jīng)過加密的,發(fā)送方的數(shù)據(jù)幀的有效數(shù)據(jù)的長度是1主胧,經(jīng)過編碼后的長度會發(fā)送變化叭首。假設(shè)加密后的長度為N,那接收方接收到的數(shù)據(jù)長度是N踪栋。以后所有的數(shù)據(jù)幀接收的長度是M時放棒,那發(fā)送方真正的數(shù)據(jù)長度是M-N+1。

Airkiss規(guī)定數(shù)據(jù)的長度使用9個bit進行編碼己英。

2.數(shù)據(jù)鏈路層

數(shù)據(jù)鏈路層的包括控制字段和數(shù)據(jù)字段间螟。

1)Magic為4個數(shù)據(jù)幀,兩個幀的兩個9bit記錄將要發(fā)送的數(shù)據(jù)(PWD+Ramdon+SSID)的長度损肛;兩個幀的兩個9bit記錄SSID的CRC校驗值厢破。路由器的SSID是會被路由器廣播出來的,例如我們手機wifi掃描到路由器的名稱就是SSID治拿。因此wifi設(shè)備也能得到路由器的SSID摩泪,其只要計算目前所能獲取到的SSID的CRC值跟MAGIC的SSID CRC值一樣,那之后的SSID數(shù)據(jù)就不用接收了劫谅,這樣能夠提高配置上網(wǎng)速度见坑。Magic很重要,因此發(fā)送5遍捏检。

2)PrefixCode為4個數(shù)據(jù)幀荞驴,兩個幀的兩個9bit記錄PWD的數(shù)據(jù)長度,另外兩個幀的兩個9bit記錄PWD長度的CRC校驗值贯城。Magic中發(fā)送的長度是所有數(shù)據(jù)的長度熊楼,包括密碼PWD、隨機數(shù)(wifi配置成功后要回復(fù)該隨機數(shù)作為回復(fù))和SSID能犯。而這里是PWD的長度鲫骗,用于對接收到的數(shù)據(jù)進行分段犬耻。

3)一個序列包括一個序列索引和一個序列數(shù)據(jù)。協(xié)議規(guī)定將有效數(shù)據(jù)以4個字節(jié)進行劃分执泰,不夠補0枕磁。如我家路由的PWD是8313huang,那其會分為3個序列术吝,分別是“8313”计济、“huan”“g\0\0\0”進行發(fā)送。Sequence header包括索引值和CRC值顿苇,而Data field就是4個數(shù)據(jù)幀,包含要發(fā)送的數(shù)據(jù)税弃,如“8313”等纪岁。

4)如何區(qū)分Magic、Prefix则果、Sequence和Data幔翰,是由9bit的最高幾個bit來區(qū)分的。例如最高bit為1時表示是Data西壮,其他是控制字段遗增。

3.應(yīng)用層

應(yīng)用層即是手機配置上網(wǎng)APP要發(fā)送的數(shù)據(jù),包括三部分的數(shù)據(jù)款青。分別是:

1)PWD做修。其先被發(fā)送是因為其是最重要的,而SSID已經(jīng)在MAGIC字段中所確認抡草。

2)1個字節(jié)的隨機數(shù)饰及。wifi配置成功后要發(fā)送以該隨機數(shù)為內(nèi)容的UDP廣播包作為回復(fù),APP收到后即認為wifi設(shè)備已經(jīng)成功聯(lián)網(wǎng)康震。

3)SSID燎含。

五、ESP8266 Airkiss

微信硬件開放文檔有《airkiss_developer_manual.pdf》介紹在ESP8266平臺上利用Airkiss接口庫進行開發(fā)實現(xiàn)Airkiss協(xié)議的過程腿短。而ESP8266的廠商提供的DEMO則更加直接地用一個接口就實現(xiàn)了Airkiss屏箍。

六、微信Airkiss

微信Airkiss在正式產(chǎn)品中是需要通過硬件JSAPI進行調(diào)用來調(diào)出發(fā)送SSID和PWD的界面橘忱,而硬件JSAPI需要經(jīng)過驗證的服務(wù)號才能申請獲得權(quán)限赴魁。沒有權(quán)限時可以使用AirkissDebugger這個APP進行調(diào)試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钝诚,一起剝皮案震驚了整個濱河市尚粘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敲长,老刑警劉巖郎嫁,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秉继,死亡現(xiàn)場離奇詭異,居然都是意外死亡泽铛,警方通過查閱死者的電腦和手機尚辑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盔腔,“玉大人杠茬,你說我怎么就攤上這事〕谒妫” “怎么了瓢喉?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舀透。 經(jīng)常有香客問我栓票,道長,這世上最難降的妖魔是什么愕够? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任走贪,我火速辦了婚禮,結(jié)果婚禮上惑芭,老公的妹妹穿的比我還像新娘坠狡。我一直安慰自己,他們只是感情好遂跟,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布逃沿。 她就那樣靜靜地躺著,像睡著了一般幻锁。 火紅的嫁衣襯著肌膚如雪感挥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天越败,我揣著相機與錄音触幼,去河邊找鬼。 笑死究飞,一個胖子當(dāng)著我的面吹牛置谦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亿傅,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媒峡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了葵擎?” 一聲冷哼從身側(cè)響起谅阿,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后签餐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寓涨,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年氯檐,在試婚紗的時候發(fā)現(xiàn)自己被綠了慨亲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爹橱。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡染苛,死狀恐怖拓哟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情河泳,我是刑警寧澤沃呢,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站拆挥,受9級特大地震影響薄霜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竿刁,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一黄锤、第九天 我趴在偏房一處隱蔽的房頂上張望搪缨。 院中可真熱鬧食拜,春花似錦、人聲如沸副编。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痹届。三九已至呻待,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間队腐,已是汗流浹背蚕捉。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柴淘,地道東北人迫淹。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像为严,于是被迫代替她去往敵國和親敛熬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容