亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2018年01月15日 10:06:32   作者:zhaojieTec  
本篇文章主要給大家講解了在Android系統(tǒng)上實(shí)現(xiàn)easyconfig(airkiss)的方法,有這方面需要的朋友參考學(xué)習(xí)下吧。

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

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

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

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

原理就是手機(jī)發(fā)送udp廣播或者組播。博聯(lián)的無線網(wǎng)卡支持混雜模式,可以接收到環(huán)境中所有的wifi數(shù)據(jù)包,這樣手機(jī)在發(fā)送udp報(bào)文后就會(huì)被博聯(lián)捕獲到,但由于和路由器直接通訊的數(shù)據(jù)是加密的,博聯(lián)能捕獲到也并沒有什么卵用,這種的技術(shù)關(guān)鍵就在于使用長(zhǎng)度字段來傳遞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工具可以開啟monitor模式,打開monitor后,使用tcpdump抓包就會(huì)收到很多數(shù)據(jù)。

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

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

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

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

1.打開/關(guān)閉無線網(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)用層控制開啟/關(guān)閉,收到密碼后聯(lián)網(wǎng),聯(lián)網(wǎng)成功后通知手機(jī)端等功能

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

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

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

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

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

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

app_process

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

android下可以通過命令行運(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出來的,最高只有system權(quán)限。system權(quán)限可以修改系統(tǒng)的設(shè)置,但無法與驅(qū)動(dòng)層通訊。如果linux下可執(zhí)行程序,運(yùn)行程序時(shí)如果是root權(quán)限,那么這個(gè)進(jìn)程也是root權(quán)限。使用app_process啟動(dòng)的java程序時(shí)也是一樣。

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

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

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

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

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

一開始我認(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ù)包的目的地址過濾不屬于自己的數(shù)據(jù)。

于是我就去看無線網(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)層并沒有所有的wifi數(shù)據(jù),只有他自己的數(shù)據(jù)。

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

實(shí)際上處理建立連接操作(過濾不屬于自己的數(shù)據(jù))是mac層實(shí)現(xiàn),mac層的實(shí)現(xiàn)方式有2中,softmac和fullmac,softmac就是我一開始所認(rèn)為的那樣由驅(qū)動(dòng)程序過濾不屬于自己的數(shù)據(jù),驅(qū)動(dòng)層可以捕獲到其他設(shè)備發(fā)送出去的數(shù)據(jù)。fullmac是由wifi芯片來實(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文件又是從哪里來的。

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

但實(shí)際上這個(gè)winced并沒有什么卵用,這個(gè)是給嵌入式設(shè)備用的,跟wifi芯片里的mcu沒有關(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",可以開啟/關(guān)閉調(diào)試模式。

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

那么接下來的問題就是如果抓包

其實(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)限的問題,libpcap的函數(shù)會(huì)執(zhí)行失敗,如果可以讓安卓進(jìn)程有root那樣就可以執(zhí)行,前面說過普通的安卓應(yīng)用最高只有system權(quán)限。

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

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

相關(guān)文章

  • Android之小球自由碰撞動(dòng)畫示例

    Android之小球自由碰撞動(dòng)畫示例

    大家好,本篇文章主要講的是Android之小球自由碰撞動(dòng)畫示例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android Studio給各種控件加邊框的操作方法

    Android Studio給各種控件加邊框的操作方法

    這篇文章主要介紹了Android Studio給各種控件加邊框的操作方法,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Android實(shí)現(xiàn)的秒表計(jì)時(shí)器示例

    Android實(shí)現(xiàn)的秒表計(jì)時(shí)器示例

    這篇文章主要介紹了Android實(shí)現(xiàn)的秒表計(jì)時(shí)器,結(jié)合完整實(shí)例形式分析了Android計(jì)時(shí)器的具體實(shí)現(xiàn)步驟與相關(guān)技巧,涉及Android針對(duì)日期與時(shí)間的操作方法,需要的朋友可以參考下
    2016-08-08
  • Android開發(fā)筆記之:消息循環(huán)與Looper的詳解

    Android開發(fā)筆記之:消息循環(huán)與Looper的詳解

    本篇文章是對(duì)Android中消息循環(huán)與Looper的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android中自定義ImageView添加文字設(shè)置按下效果詳解

    Android中自定義ImageView添加文字設(shè)置按下效果詳解

    這篇文章主要給大家介紹了關(guān)于Android中自定義ImageView添加文字設(shè)置按下效果的相關(guān)資料,實(shí)現(xiàn)后的效果非常利用用戶的體驗(yàn),文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-08-08
  • android數(shù)據(jù)存儲(chǔ)之文件存儲(chǔ)方法

    android數(shù)據(jù)存儲(chǔ)之文件存儲(chǔ)方法

    本篇文章主要介紹了android數(shù)據(jù)存儲(chǔ)之文件存儲(chǔ)的方法,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • Android巧用DecorView實(shí)現(xiàn)對(duì)話框功能

    Android巧用DecorView實(shí)現(xiàn)對(duì)話框功能

    本篇文章主要介紹了Android巧用DecorView實(shí)現(xiàn)對(duì)話框功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Android使用ViewDragHelper實(shí)現(xiàn)圖片下拽返回示例

    Android使用ViewDragHelper實(shí)現(xiàn)圖片下拽返回示例

    這篇文章主要介紹了Android使用ViewDragHelper實(shí)現(xiàn)圖片下拽返回示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Android中ExpandableListView使用示例詳解

    Android中ExpandableListView使用示例詳解

    這篇文章主要為大家詳細(xì)介紹了Android中ExpandableListView使用示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android 代碼一鍵實(shí)現(xiàn)銀行卡綁定功能

    Android 代碼一鍵實(shí)現(xiàn)銀行卡綁定功能

    這篇文章主要介紹了Android 代碼一鍵實(shí)現(xiàn)銀行卡綁定功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論