真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android上實(shí)現(xiàn)easyconfig(airkiss)方法

剛買(mǎi)回來(lái)一個(gè)智能音箱和博聯(lián),需要給音箱和博聯(lián)配置聯(lián)網(wǎng),音箱需要先打開(kāi)藍(lán)牙,然后在手機(jī)app中填寫(xiě)wifi的ssid和密碼,通過(guò)藍(lán)牙發(fā)送到音箱,音箱收到后連接到wifi。

創(chuàng)新互聯(lián)成立于2013年,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元連云做網(wǎng)站,已為上家服務(wù),為連云各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

博聯(lián)就比較奇怪,進(jìn)入聯(lián)網(wǎng)模式以后,手機(jī)app上填寫(xiě)wifi的ssid和密碼后,直接點(diǎn)配置按鈕后,博聯(lián)就連上了。要知道手機(jī)并沒(méi)有與這個(gè)設(shè)備建立連接,ssid和密碼不知道怎么就莫名其妙的被發(fā)送過(guò)去了。

仔細(xì)想了一下,應(yīng)該是通過(guò)wifi信號(hào)發(fā)送的,wifi本質(zhì)上是一種射頻信號(hào),手機(jī)可以發(fā)送wifi信號(hào),博聯(lián)上也有wifi芯片,理論上可以直接接受到手機(jī)的wifi信號(hào)而不需要經(jīng)過(guò)路由器。但究竟是怎么發(fā)送過(guò)去就不得而知。

經(jīng)過(guò)一番搜索后得知,這種技術(shù)叫做easyconfig或者smaterconfig、SmartConnect,不同的地方叫法不一樣,最早應(yīng)該是TI公司提供給博聯(lián)的。

原理就是手機(jī)發(fā)送udp廣播或者組播。博聯(lián)的無(wú)線網(wǎng)卡支持混雜模式,可以接收到環(huán)境中所有的wifi數(shù)據(jù)包,這樣手機(jī)在發(fā)送udp報(bào)文后就會(huì)被博聯(lián)捕獲到,但由于和路由器直接通訊的數(shù)據(jù)是加密的,博聯(lián)能捕獲到也并沒(méi)有什么卵用,這種的技術(shù)關(guān)鍵就在于使用長(zhǎng)度字段來(lái)傳遞ssid和密碼信息。只需要規(guī)定編碼方式。

知道原理后,是否可以在音箱上實(shí)現(xiàn)呢?

智能音箱是安卓系統(tǒng),有root權(quán)限,并且知道使用的wifi芯片為ap6210(BCM43362)。

但并不知道音箱的wifi芯片是否可以可以接受到環(huán)境下所有的wifi數(shù)據(jù)。到博通(cypress.com)的網(wǎng)站上找了很久,發(fā)現(xiàn)有一個(gè)monitor模式,使用論壇上下載的wl工具可以開(kāi)啟monitor模式,打開(kāi)monitor后,使用tcpdump抓包就會(huì)收到很多數(shù)據(jù)。

所有如果要在音箱上也實(shí)現(xiàn)easyconfig就需要開(kāi)啟monitor模式然后抓包,然后再根據(jù)包的長(zhǎng)度通過(guò)某種規(guī)則傳遞ssid和wifi密碼。

開(kāi)啟monitor模式可以通過(guò)執(zhí)行wl指令(或者直接發(fā)送ioctl命令)。抓包可以使用開(kāi)源的tcpdump,但是通過(guò)數(shù)據(jù)包長(zhǎng)度編碼還沒(méi)有思路。

再查看easyconfig原理時(shí),發(fā)現(xiàn)微信有一個(gè)airkiss工具,提供一個(gè).a的靜態(tài)庫(kù),開(kāi)啟monitor模式或混雜模式后,將收到的數(shù)據(jù)包交給airkiss,airkiss會(huì)處理解析數(shù)據(jù)的工作,airkiss也提供手機(jī)端的發(fā)送程序。

因此要實(shí)現(xiàn)easyconfig只需要實(shí)現(xiàn)如下功能就可以:

1.打開(kāi)/關(guān)閉無(wú)線網(wǎng)卡monitor模式

2.使用tcpdump(libpcap)抓包

3.講抓包后收到數(shù)據(jù)后再調(diào)用airkiss的函數(shù)

4.手機(jī)端實(shí)現(xiàn)發(fā)送ssid和密碼的app,可使用微信airkiss提供的app測(cè)試

5.實(shí)現(xiàn)應(yīng)用層控制開(kāi)啟/關(guān)閉,收到密碼后聯(lián)網(wǎng),聯(lián)網(wǎng)成功后通知手機(jī)端等功能

由于安卓系統(tǒng)中并沒(méi)有monitor模式或混雜模式相關(guān)的函數(shù),也無(wú)法實(shí)現(xiàn)抓包的功能,所有不能使用普通的安卓應(yīng)用來(lái)實(shí)現(xiàn)這個(gè)功能,使用ndk也沒(méi)用,主要原因是android應(yīng)用的進(jìn)程最高只有system權(quán)限,而開(kāi)啟monitor模式需要和驅(qū)動(dòng)層通訊需要有root權(quán)限。

所以需要使用linux下的可執(zhí)行程序?qū)崿F(xiàn),和ndk類(lèi)似,只是不生成.so,編譯方法也需要做一些修改。另外這個(gè)程序還需要與應(yīng)用層通訊,可以使用socket。

liunx下可執(zhí)行程序。

眾所周知安卓是基于linux系統(tǒng)實(shí)現(xiàn),但很少有人在安卓系統(tǒng)下開(kāi)發(fā)linux程序,一般編譯系統(tǒng)是會(huì)設(shè)計(jì)到,相關(guān)應(yīng)用也會(huì)編譯系統(tǒng)時(shí)一起編譯。

開(kāi)發(fā)linux上的程序,需要用linux系統(tǒng),使用gcc編譯,另外由于音箱是arm架構(gòu)還需要使用交叉編譯,但使用通用的arm交叉編譯工具編譯的可執(zhí)行程序并不能再音箱上運(yùn)行,具體原因未知,查看資料后說(shuō)要使用從ndk中的分離交叉編譯工具,下載linux下的ndk并分離出交叉編譯工具后可編譯生成在安裝系統(tǒng)上運(yùn)行的可執(zhí)行程序。

如果交叉編譯已經(jīng)如何分離ndk中的編譯工具可自行百度。

app_process

之前寫(xiě)過(guò)在如何在安卓上運(yùn)行java程序,不是一個(gè)apk而是命令行程序,另外還有如果彈出一個(gè)非比尋常的窗體。

android下可以通過(guò)命令行運(yùn)行java代碼,就像windows或者linux下使用java命令運(yùn)行后綴為.jar的java程序,只是android上的命令不是java而是app_process jar包的格式為dex。

app_process是一個(gè)命令號(hào)工具,作用就是啟動(dòng)jvm加載并執(zhí)行dex文件。android系統(tǒng)啟動(dòng)時(shí)根據(jù)傳入的參數(shù)會(huì)啟動(dòng)zge進(jìn)程zgz進(jìn)程負(fù)責(zé)創(chuàng)建所有的安卓應(yīng)用的進(jìn)程。

最近又看了之前的博文,又有個(gè)新的發(fā)現(xiàn),那就是這個(gè)程序是有root權(quán)限的。普通的安卓應(yīng)用都是由zg fork出來(lái)的,最高只有system權(quán)限。system權(quán)限可以修改系統(tǒng)的設(shè)置,但無(wú)法與驅(qū)動(dòng)層通訊。如果linux下可執(zhí)行程序,運(yùn)行程序時(shí)如果是root權(quán)限,那么這個(gè)進(jìn)程也是root權(quán)限。使用app_process啟動(dòng)的java程序時(shí)也是一樣。

所以也可以java來(lái)實(shí)現(xiàn)這樣的程序,因?yàn)閖ava的語(yǔ)法比c簡(jiǎn)單,如果程序比較復(fù)雜可以考慮使用java實(shí)現(xiàn),由于一鍵配置的程序并不復(fù)雜所以并沒(méi)有用java是用c++實(shí)現(xiàn)的。

如果開(kāi)啟無(wú)線網(wǎng)卡monitor模式

繼續(xù)上面實(shí)現(xiàn)easyconfig的步驟,首先需要開(kāi)啟網(wǎng)卡的monitor模式。

查看資料linux下有相應(yīng)的工具可以實(shí)現(xiàn),但這些命令在android系統(tǒng)上并不存在,我也嘗試將工具移植到android系統(tǒng)上,但編譯不了,總各種各樣的問(wèn)題。

因此我需要去找這個(gè)monitor模式究竟是在那里控制的。

一開(kāi)始我認(rèn)為對(duì)wifi數(shù)據(jù)的處理是在wifi驅(qū)動(dòng)層實(shí)現(xiàn)的,音箱的wifi芯片默認(rèn)情況會(huì)接受環(huán)境下所有的數(shù)據(jù)包,驅(qū)動(dòng)程序會(huì)根據(jù)數(shù)據(jù)包的目的地址過(guò)濾不屬于自己的數(shù)據(jù)。

于是我就去看無(wú)線網(wǎng)卡驅(qū)動(dòng),根據(jù)芯片型號(hào),找到一份liunx的源碼,bcmdhd就是wifi的網(wǎng)卡驅(qū)動(dòng),重新編譯后盡然可以運(yùn)行,于是找到接受數(shù)據(jù)的地方,并添加打印函數(shù),cat /proc/kmsg 可以看到驅(qū)動(dòng)層的日志。 可惜的是,驅(qū)動(dòng)層并沒(méi)有所有的wifi數(shù)據(jù),只有他自己的數(shù)據(jù)。

對(duì)wifi數(shù)據(jù)的過(guò)濾是在wifi芯片中完成的,通過(guò)查看bcm43362的資料得知,wifi芯片中也有處理程序,建立連接數(shù)據(jù)加密等操作都是由wifi芯片處理的,驅(qū)動(dòng)程序只負(fù)責(zé)與wifi芯片進(jìn)行通訊將數(shù)據(jù)發(fā)送到上層。

實(shí)際上處理建立連接操作(過(guò)濾不屬于自己的數(shù)據(jù))是mac層實(shí)現(xiàn),mac層的實(shí)現(xiàn)方式有2中,softmac和fullmac,softmac就是我一開(kāi)始所認(rèn)為的那樣由驅(qū)動(dòng)程序過(guò)濾不屬于自己的數(shù)據(jù),驅(qū)動(dòng)層可以捕獲到其他設(shè)備發(fā)送出去的數(shù)據(jù)。fullmac是由wifi芯片來(lái)實(shí)現(xiàn)mac層的功能。而bcm43362使用的是fullmac,不能在驅(qū)動(dòng)層捕獲數(shù)據(jù)。

bcmdhd驅(qū)動(dòng)會(huì)加載一個(gè)bin文件,這個(gè)bin文件就是wifi芯片里的程序,wifi芯片里有mcu就相當(dāng)于一個(gè)嵌入式系統(tǒng)。我想是不是可以修改這個(gè)wifi里bin程序呢,這個(gè)bin文件又是從哪里來(lái)的。

通過(guò)搜索得知bcm有一個(gè)用于開(kāi)發(fā)的sdk winced,于是我又去下載這個(gè)winced(博通的wifi業(yè)務(wù)已經(jīng)買(mǎi)給了cypress要在cypress的網(wǎng)站上下載)。

但實(shí)際上這個(gè)winced并沒(méi)有什么卵用,這個(gè)是給嵌入式設(shè)備用的,跟wifi芯片里的mcu沒(méi)有關(guān)系,這個(gè)是esp8266不一樣。

幸運(yùn)的是cypress的論壇上有l(wèi)inux/android下如何使用他的wifi模塊的內(nèi)容,他們還提供用于調(diào)試的命令行工具名字叫wl,把這個(gè)wl push到音箱上是可以運(yùn)行的,使用 "wl monitor on/off",可以開(kāi)啟/關(guān)閉調(diào)試模式。

開(kāi)啟monitor模式后,使用tcpdump抓包后可以看到有一堆數(shù)據(jù)出現(xiàn),關(guān)閉后就沒(méi)有任何數(shù)據(jù)(音箱沒(méi)有聯(lián)網(wǎng)),這就表示第一步已經(jīng)完成,無(wú)線網(wǎng)卡可以收到環(huán)境中所有的數(shù)據(jù)包。

那么接下來(lái)的問(wèn)題就是如果抓包

其實(shí)抓包比較簡(jiǎn)單,tcpdump是有源碼的,tcpdump是基于libpcap的,實(shí)際上使用pcap就可以了,下載pcap的源碼,交叉編譯可得到靜態(tài)文件libpcap.a,在應(yīng)用中引入這個(gè)靜態(tài)文件 。調(diào)用libpcap中的函數(shù)就可以實(shí)現(xiàn)抓包。

理論上libpcap.a放到ndk中,打包的apk中,普通的apk程序也可以實(shí)現(xiàn)抓包,但由于權(quán)限的問(wèn)題,libpcap的函數(shù)會(huì)執(zhí)行失敗,如果可以讓安卓進(jìn)程有root那樣就可以執(zhí)行,前面說(shuō)過(guò)普通的安卓應(yīng)用最高只有system權(quán)限。

前面2步實(shí)現(xiàn)之后,后面就很容易,到這里再加入airkiss的靜態(tài)庫(kù),將抓到的數(shù)據(jù)包傳入airkiss,再用airkiss提供的測(cè)試工具發(fā)送ssid和密碼,使用printf打印就可以看到,手機(jī)端發(fā)送過(guò)來(lái)的ssid和密碼。

現(xiàn)在智能音箱算是比較流行,也與一些賣(mài)開(kāi)發(fā)板的,我知道的若琪的開(kāi)發(fā)板也是采用博通的wifi芯片,一般給音箱配置聯(lián)網(wǎng)都是通過(guò)藍(lán)牙或者通過(guò)建立ap的方式,使用easyconfig的方式會(huì)更加方便。


網(wǎng)站欄目:Android上實(shí)現(xiàn)easyconfig(airkiss)方法
地址分享:http://weahome.cn/article/ipgcci.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部