項(xiàng)明浩, 華驚宇, 徐志江, 張 昱, 李 楓
(浙江工業(yè)大學(xué) a.信息工程學(xué)院; b.通信工程系, 杭州 310023)
物聯(lián)網(wǎng)被稱為繼計(jì)算機(jī)、互聯(lián)網(wǎng)之后,世界信息產(chǎn)業(yè)的第三次浪潮[1]。近年來(lái),隨著物聯(lián)網(wǎng)產(chǎn)業(yè)的迅猛發(fā)展,許多高校也紛紛開(kāi)設(shè)物聯(lián)網(wǎng)工程相關(guān)專業(yè)。物聯(lián)網(wǎng)工程是涉及計(jì)算機(jī)科學(xué)與技術(shù)、通信工程、電子科學(xué)與技術(shù)等多個(gè)學(xué)科的綜合性專業(yè),體系架構(gòu)可分為感知層、網(wǎng)絡(luò)層、應(yīng)用層三部分[2]。感知層[3]用于識(shí)別外界物體和采集信息;而網(wǎng)絡(luò)層[4]是通過(guò)通信網(wǎng)絡(luò)進(jìn)行信息傳輸。網(wǎng)絡(luò)協(xié)議是計(jì)算機(jī)網(wǎng)絡(luò)課程的重要內(nèi)容,但抽象晦澀的協(xié)議往往讓學(xué)生無(wú)所適從,相應(yīng)實(shí)驗(yàn)課程也僅僅使用現(xiàn)成的工具觀察網(wǎng)絡(luò)通斷或者抓包分析,學(xué)生無(wú)法了解到協(xié)議底層的工作原理與具體的幀結(jié)構(gòu)[5]。
本文基于實(shí)驗(yàn)室現(xiàn)有的MT7620A無(wú)線路由模塊,在對(duì)802.11幀結(jié)構(gòu)分析的基礎(chǔ)上,設(shè)計(jì)了一套基于OpenWRT的WiFi探針實(shí)驗(yàn)裝置,可以捕捉附近數(shù)據(jù)包并解析出移動(dòng)設(shè)備的mac地址。與傳統(tǒng)的抓包工具如wireshark[6]、micro network monitor等必須運(yùn)行在PC機(jī)上不同[7],該裝置可以在嵌入式設(shè)備上運(yùn)行。利用該裝置,學(xué)生可對(duì)802.11及無(wú)線通信的數(shù)據(jù)包有一個(gè)全面的認(rèn)識(shí),并且可以了解Linux應(yīng)用層及嵌入式軟件開(kāi)發(fā)的基本流程。該裝置提供了一個(gè)綜合性實(shí)驗(yàn)平臺(tái),有利于高校對(duì)物聯(lián)網(wǎng)人才的培養(yǎng),且目前對(duì)于智能手機(jī)WiFi mac地址的捕捉有實(shí)際的需求與應(yīng)用,該實(shí)驗(yàn)較好的貼近社會(huì)實(shí)際需求。
WiFi探針實(shí)驗(yàn)裝置的設(shè)計(jì)原理是利用終端采集設(shè)備采集附近移動(dòng)終端發(fā)送的數(shù)據(jù)包并進(jìn)行數(shù)據(jù)解析,解析內(nèi)容包括移動(dòng)終端的MAC地址、目的地址、信號(hào)強(qiáng)度、SSID等,將解析后的數(shù)據(jù)按照約定的格式封裝,上報(bào)給后臺(tái)。學(xué)生可通過(guò)在Linux系統(tǒng)上編寫、修改軟件源碼,生成ipk形式的軟件包在OpenWRT系統(tǒng)上安裝。同時(shí),該實(shí)驗(yàn)裝置提供配置文件,對(duì)于基礎(chǔ)較弱的學(xué)生,可以不對(duì)源代碼進(jìn)行修改,而是對(duì)配置文件進(jìn)行配置即可運(yùn)行整個(gè)實(shí)驗(yàn)系統(tǒng)。
WiFi探針實(shí)驗(yàn)裝置包括終端采集設(shè)備、STA和后臺(tái)服務(wù)器。終端采集設(shè)備即WiFi探針,用于捕捉經(jīng)過(guò)無(wú)線網(wǎng)卡的所有數(shù)據(jù)包,并進(jìn)行過(guò)濾解析。STA是手機(jī)設(shè)備或者其他具有無(wú)線網(wǎng)卡的移動(dòng)設(shè)備,這些設(shè)備會(huì)不定期地發(fā)送Probe幀廣播,用于標(biāo)識(shí)設(shè)備,WiFi探針正是捕捉這一類幀來(lái)收集數(shù)據(jù)的。后臺(tái)服務(wù)器的主要功能是接收采集設(shè)備發(fā)送來(lái)的數(shù)據(jù)包并按照協(xié)議進(jìn)行分包,最后在Web端展示采集的數(shù)據(jù)。設(shè)備總體架構(gòu)框圖如圖1所示。
圖1 總體架構(gòu)框圖
設(shè)備的硬件部分選用聯(lián)發(fā)科的MT7620A[8]芯片,在實(shí)驗(yàn)室現(xiàn)有的MT7620A嵌入式路由實(shí)驗(yàn)板上搭建,實(shí)驗(yàn)板如圖2所示。操作系統(tǒng)選用開(kāi)源的OpenWRT[9]系統(tǒng)。本實(shí)驗(yàn)系統(tǒng)用的服務(wù)器依托于實(shí)驗(yàn)室4 GB實(shí)驗(yàn)平臺(tái)的現(xiàn)有設(shè)備。其中,聯(lián)發(fā)科MT7620A是聯(lián)發(fā)科推出的一款WiFi路由器解決方案芯片,片上集成了一個(gè)主頻為580 MHz MIPS 24 KB[10]的處理器,可以滿足整個(gè)系統(tǒng)的處理速度要求;一個(gè)5端口百兆以太網(wǎng)交換機(jī),包含了實(shí)現(xiàn)無(wú)線路由器所需的全部功能模塊。另外,開(kāi)發(fā)板上提供了豐富的外設(shè),可供二次開(kāi)發(fā)與實(shí)驗(yàn)[11]。
圖2 硬件實(shí)驗(yàn)板
本文設(shè)計(jì)的實(shí)驗(yàn)系統(tǒng)事先在芯片內(nèi)部集開(kāi)源的不死uboot,可以有效防止學(xué)生不當(dāng)?shù)膶?shí)驗(yàn)操作導(dǎo)致裝置變成變磚。不死uboot提供Web界面用于固件燒寫,在開(kāi)發(fā)板與PC連接上后即可通過(guò)固定的網(wǎng)址進(jìn)入。圖形化的界面也降低了學(xué)生的學(xué)習(xí)成本。
軟件設(shè)計(jì)整體分為探針采集部分和平臺(tái)部分。探針采集部分功能模塊如圖3所示。主線程在讀取完配置文件及初始化后創(chuàng)建3個(gè)子線程,分別為采集線程、緩存線程和發(fā)送線程。
圖3 探針采集前端功能模塊圖
采集模塊負(fù)責(zé)采集WiFi探針數(shù)據(jù),并且對(duì)數(shù)據(jù)進(jìn)行解析和粗略的過(guò)濾,之后將數(shù)據(jù)入隊(duì),分別存入緩存隊(duì)列和發(fā)送隊(duì)列,這也是該實(shí)驗(yàn)裝置最核心的部分。采集模塊軟件流程圖如圖4所示。為了捕獲網(wǎng)段內(nèi)的所有數(shù)據(jù)包和幀,需要將網(wǎng)卡設(shè)置為混雜模式[12]。在混雜模式下,網(wǎng)卡不驗(yàn)證MAC地址,會(huì)接收所有經(jīng)過(guò)網(wǎng)卡的數(shù)據(jù)包。
緩存模塊的主要功能是緩存數(shù)據(jù),并對(duì)緩存文件進(jìn)行管理:超出給定的數(shù)目后要對(duì)最先緩存的文件進(jìn)行刪除,以防止內(nèi)存消耗過(guò)大。
圖4 采集模塊流程圖
發(fā)送模塊負(fù)責(zé)與服務(wù)器通信:讀取發(fā)送隊(duì)列中的數(shù)據(jù),通過(guò)TCP/IP協(xié)議發(fā)送給服務(wù)器,并且與服務(wù)器進(jìn)行交互,如心跳保活,以確保tcp正常連接。
對(duì)探針數(shù)據(jù)封裝后,通過(guò)發(fā)送模塊與后臺(tái)服務(wù)器建立socket連接,將數(shù)據(jù)包傳送到后臺(tái),用于在界面上展示;另外,為防止網(wǎng)絡(luò)不通時(shí)后臺(tái)無(wú)法接收數(shù)據(jù),造成數(shù)據(jù)的丟失,本系統(tǒng)在本地對(duì)同樣的數(shù)據(jù)包進(jìn)行緩存,緩存的文件前后綴以及文件大小、目錄可由用戶修改配置文件進(jìn)行自定義。考慮到系統(tǒng)長(zhǎng)時(shí)間運(yùn)行堆積大量緩存文件,系統(tǒng)的內(nèi)存勢(shì)必會(huì)不夠,因此當(dāng)達(dá)到一定文件數(shù)目后要對(duì)較早的緩存文件覆蓋。軟件流程圖見(jiàn)圖5。
圖5 數(shù)據(jù)存儲(chǔ)與傳輸模塊
后臺(tái)服務(wù)框圖見(jiàn)圖6。后臺(tái)的數(shù)據(jù)接收服務(wù)器收到前端模塊傳輸來(lái)的數(shù)據(jù)后,首先進(jìn)行分包,解析出原始數(shù)據(jù)存入mysql數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)與數(shù)據(jù)中轉(zhuǎn)模塊間的數(shù)據(jù)傳輸選用Redis,它是一個(gè)開(kāi)源(BSD許可)內(nèi)存存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)服務(wù)器,可用作數(shù)據(jù)庫(kù),高速緩存和消息隊(duì)列代理。如圖6所示,HTTPServer通過(guò)WebSocket實(shí)時(shí)地將探針數(shù)據(jù)上報(bào)給HTTPClient,用于Web界面上的實(shí)時(shí)顯示。另外,靜態(tài)數(shù)據(jù)通過(guò)HTTPclient與HTTPServer的交互實(shí)現(xiàn),如讀取歷史信息、查找數(shù)據(jù)等等。
IEEE 802.11 協(xié)議[13]中定義了無(wú)線接入點(diǎn)(AP)和客戶端(STA)的兩種工作模式以及多種無(wú)線幀類型。AP會(huì)周期性地發(fā)送BEACON幀,用于宣告某個(gè)網(wǎng)絡(luò)的存在;而手機(jī)等客戶端站點(diǎn)(STA)也會(huì)定期發(fā)送Probe Request幀詢問(wèn)AP是否可以接入,AP收到該幀后發(fā)送Probe Response作為應(yīng)答。由于STA在開(kāi)啟WiFi功能后就會(huì)不斷地發(fā)送probe request幀,幀內(nèi)包含設(shè)備mac地址等信息。探針抓取到這類幀后即可解析出設(shè)備的mac地址,因此只關(guān)心這一階段的數(shù)據(jù)交互。
在傳輸過(guò)程中,數(shù)據(jù)按固定的格式被封裝成幀,802.11MAC幀幀格式[14]如圖7所示。Preamble是一個(gè)前導(dǎo)標(biāo)識(shí),用于接收設(shè)備識(shí)別802.11,PLCP域中包含了一些物理層的協(xié)議參數(shù),比如需要的信號(hào)頻率與信號(hào)強(qiáng)度。
圖7 802.11數(shù)據(jù)幀格式
MAC層處理的是幀數(shù)據(jù),將MAC幀展開(kāi),包含了幀控制域、地址域與序列控制域等。地址2為源地址,即傳送的來(lái)源:移動(dòng)設(shè)備mac地址,位于MAC header中的偏移為10。幀控制字段第2、3位為Type和Sub type,標(biāo)識(shí)出幀類型,在捕獲所有數(shù)據(jù)包之后,根據(jù)這兩個(gè)標(biāo)志可過(guò)濾出特定幀。Probe Request幀為管理幀的一類子幀,其type為00,subtype為0100。
網(wǎng)卡捕獲的管理幀,前18 B為Radiotap,它是網(wǎng)卡在接收信號(hào)時(shí),去除PLCP header部分后,在本地增加的頭部字節(jié),包含功率、信道等物理層信息,可以通過(guò)radiotap解析庫(kù)對(duì)一段radiotap數(shù)據(jù)進(jìn)行解析。18、19 B為幀控制位,根據(jù)圖7給出解析幀類型的代碼:
pktWBuf = (uint8_t *)(pktbuf + le16(rhdr->it_len));
frametype = *pktWBuf;
wfp.wp.fType = (frametype >> 2)& 0x03;
wfp.wp.fSubType = (frametype >> 4) & 0x0f;
20~21 B為持續(xù)時(shí)間,22~27 B為目的地址,28~33 B為源地址。在該幀中,tag number相對(duì)偏移為42,tag length相對(duì)偏移為43,表示ssid的長(zhǎng)度,隨后字節(jié)即是ssid。
解析完成后,在數(shù)據(jù)傳輸前需要進(jìn)行封裝,加入幀頭、校驗(yàn)方式、數(shù)據(jù)長(zhǎng)度等頭部信息用于標(biāo)識(shí),表1給出了一個(gè)封裝示例用于參考。
表1 數(shù)據(jù)封裝示例
數(shù)據(jù)包通過(guò)tcp協(xié)議進(jìn)行傳輸,tcp協(xié)議交給應(yīng)用層的數(shù)據(jù)和發(fā)送時(shí)的數(shù)據(jù)是一致的,但由于tcp的數(shù)據(jù)是沒(méi)有消息邊界的,故需要采用分包機(jī)制,在設(shè)備端的消息頭中用定長(zhǎng)字節(jié)來(lái)存儲(chǔ)整個(gè)消息長(zhǎng)度,在數(shù)據(jù)接收服務(wù)端需要對(duì)分包進(jìn)行重組和校驗(yàn),主要交互流程如圖8所示。
圖8 數(shù)據(jù)傳輸
根據(jù)通信協(xié)議,在數(shù)據(jù)接收服務(wù)端采取邊接收邊解析的方式來(lái)處理數(shù)據(jù)包,一個(gè)包可能由若干個(gè)包組成,此時(shí)根據(jù)協(xié)議的PKGT字段來(lái)判斷是不是分包發(fā)送。
如果發(fā)現(xiàn)數(shù)據(jù)包不對(duì),則直接丟棄,同時(shí)發(fā)送相應(yīng)的ACK包給前端系統(tǒng)。
實(shí)驗(yàn)系統(tǒng)連接的后臺(tái)服務(wù)器不是固定的,ip地址會(huì)隨著應(yīng)用場(chǎng)景的改變而變化,若每一次新的實(shí)驗(yàn)都要更改源碼中的socket服務(wù)器地址,重新編譯、燒錄固件,會(huì)造成效率低下并且?guī)?lái)很大的工作量。為了增加系統(tǒng)的可塑性,特別添加了配置文件,程序每一次啟動(dòng)后會(huì)先去讀取配置文件中的內(nèi)容。將SERVER下的ip修改成對(duì)應(yīng)服務(wù)器的ip地址,探針在啟動(dòng)后即可與該服務(wù)器建立socket連接,從而將采集到的探針數(shù)據(jù)上報(bào)到后臺(tái)。另外,用戶可以根據(jù)自己需求自定義采集的幀類型、緩存文件的存儲(chǔ)地址、文件名等等。
配置文件為.ini文件,由節(jié)、鍵、值組成,一般格式為:
[SECTION]
Key=value
程序讀取配置文件的主要步驟為:解析配置文件,匹配到節(jié),再去查找鍵對(duì)應(yīng)的值。
基于OpenWRT的WiFi探針實(shí)驗(yàn)裝置在充分考慮到實(shí)驗(yàn)課時(shí)及學(xué)生能力的因素下,將內(nèi)容分為基礎(chǔ)性實(shí)驗(yàn)和開(kāi)放性實(shí)驗(yàn)兩類[15]。該實(shí)驗(yàn)裝置的功能性測(cè)試也將通過(guò)實(shí)驗(yàn)的形式在本文中展示。基礎(chǔ)性實(shí)驗(yàn)的設(shè)計(jì)方案,要求學(xué)生能完成OpenWRT系統(tǒng)下軟件包的安裝,WiFi探針實(shí)驗(yàn)裝置采集端與后臺(tái)服務(wù)器的連接等實(shí)驗(yàn)內(nèi)容;開(kāi)放性實(shí)驗(yàn)要求學(xué)生能下載軟件包進(jìn)行系統(tǒng)TCP吞吐量測(cè)試,并且可自行編寫軟件包,修改采集部分底層源碼以實(shí)現(xiàn)個(gè)性化定制等[16]。
(1) 運(yùn)行環(huán)境的搭建。學(xué)生需掌握基本的操作指令與文件配置。開(kāi)啟實(shí)驗(yàn)板以后,可以用終端仿真程序secureCRT查看板子輸出信息,初始界面如下:
①更改系統(tǒng)ip地址:打開(kāi)配置文件vi etc/config/network,更改 option ipaddr ‘192.168.10.1’。保存退出后重啟網(wǎng)絡(luò):/etc/init.d/network restart即可完成ip地址的更改(見(jiàn)圖9)。
圖9 OpenWRT界面
②創(chuàng)建一個(gè)monitor模式的虛擬無(wú)線網(wǎng)卡mon0,監(jiān)聽(tīng)模式允許網(wǎng)卡不用連接WiFi就可以抓取特定頻道的數(shù)據(jù)。
grep -q mon0 /prov/net/dev || /usr/sbin/iw phy phy0 interface add mon0 type monitor
/sbin/ifconfig mon0 up
該步驟成功的現(xiàn)象是能通過(guò)ifconfig查看到mon0網(wǎng)卡。
(2) 軟件包安裝。學(xué)生需掌握軟件包的安裝方法以及opkg指令集的使用。
利用opkg軟件包管理工具,即可安裝軟件包,命令如下:opkg install xxx.ipk。
圖10 服務(wù)端數(shù)據(jù)
(3) 數(shù)據(jù)包的測(cè)試。運(yùn)行實(shí)驗(yàn)裝置后,通過(guò)網(wǎng)絡(luò)調(diào)試助手模擬tcp的服務(wù)器,可以接收查看實(shí)驗(yàn)裝置發(fā)送的tcp包。一個(gè)tcp包中包含了AA A5 01 00等頭部數(shù)據(jù),用于標(biāo)識(shí)數(shù)據(jù)包類型以及校驗(yàn)等。陰影為部分有效數(shù)據(jù),解析見(jiàn)表2。
表2 數(shù)據(jù)解析
(4) 與后臺(tái)連接。修改配置文件中的ip地址為后臺(tái)ip。連接成功后可登錄Web頁(yè)面查看上報(bào)的數(shù)據(jù),包含了源地址、信道、信號(hào)強(qiáng)度、幀類型、設(shè)備名稱與采集時(shí)間。實(shí)驗(yàn)成功的現(xiàn)象如圖11所示。特別地,根據(jù)mac地址前3 Byte可以判別出設(shè)備廠商。
為了測(cè)試系統(tǒng)的穩(wěn)健性,長(zhǎng)時(shí)間開(kāi)啟采集功能,圖11中包含了19 923條數(shù)據(jù),經(jīng)測(cè)試,系統(tǒng)運(yùn)行良好,能正常解析與上報(bào)數(shù)據(jù),達(dá)到預(yù)期目標(biāo)。
圖11 測(cè)試結(jié)果
基于OpenWRT的WiFi探針實(shí)驗(yàn)裝置全部源代碼開(kāi)放給學(xué)生,方便學(xué)生理解探針采集的具體工作原理,學(xué)生也可自定義采集的內(nèi)容發(fā)送給平臺(tái)側(cè)交互。同時(shí),實(shí)驗(yàn)裝置提供編寫好的makefile作為示例,里面包含了生成軟件包的必要規(guī)則,學(xué)生只需按格式稍作修改,即可生成自己的軟件包,在開(kāi)發(fā)板上運(yùn)行驗(yàn)證。
為了測(cè)試系統(tǒng)的采集功能是否達(dá)標(biāo),在Windows系統(tǒng)上通過(guò)Microsoft network monitor抓包作為對(duì)照,如圖12所示,同時(shí)開(kāi)啟探針系統(tǒng)的采集功能,測(cè)試時(shí)間為5 min,數(shù)據(jù)對(duì)比見(jiàn)表3(表中未列出全部數(shù)據(jù))。可以看出,探針系統(tǒng)采集的數(shù)據(jù)與MNM采集的數(shù)據(jù)基本一致。同一設(shè)備會(huì)不斷地發(fā)送probe request幀,而探針系統(tǒng)在代碼里已經(jīng)對(duì)這些重復(fù)幀進(jìn)行了過(guò)濾。
吞吐量測(cè)試。netperf 是一種常見(jiàn)的測(cè)量網(wǎng)絡(luò)帶寬的工具,可以由opkg在線安裝獲得該軟件包。經(jīng)測(cè)試,傳輸速度達(dá)到了數(shù)據(jù)實(shí)時(shí)傳輸?shù)囊螅Y(jié)果見(jiàn)圖13。
圖12 Microsoft network monitor 工具
進(jìn)程占用內(nèi)存。與Linux系統(tǒng)類似,通過(guò)top指令可以查看到系統(tǒng)資源占用情況。從圖14可以看出,探針進(jìn)程使用7 326 KB虛擬內(nèi)存,占總資源的6%。查看 /proc/pid/status 文件可以獲取到物理內(nèi)存信息,如圖15所示,VmRSS為504 kB。最后,通過(guò)free指令查看系統(tǒng)總體物理內(nèi)存使用情況,如圖16所示,物理內(nèi)存使用約為16%。
表3 數(shù)據(jù)對(duì)比
圖13 吞吐量測(cè)試
圖14 系統(tǒng)性能分析
圖15 查看進(jìn)程狀態(tài)
圖16 物理內(nèi)存使用情況
本文基于現(xiàn)有的嵌入式試驗(yàn)板開(kāi)發(fā)了數(shù)字通信網(wǎng)絡(luò)實(shí)驗(yàn)裝置。其優(yōu)點(diǎn)有3個(gè)方面。①實(shí)驗(yàn)裝置可以同時(shí)實(shí)現(xiàn)嵌入式系統(tǒng)教學(xué)和通信網(wǎng)絡(luò)教學(xué),且有利于學(xué)生理解通信網(wǎng)絡(luò)設(shè)備的底層工作機(jī)制。②由于OpenWRT系統(tǒng)的操作指令與Linux基本相同,故實(shí)驗(yàn)板無(wú)需額外安裝虛擬機(jī)與Linux系統(tǒng),學(xué)生可以通過(guò)在該系統(tǒng)上練習(xí)指令學(xué)習(xí)Linux的基本操作。③實(shí)驗(yàn)裝置開(kāi)發(fā)的WiFi探針,從硬件、系統(tǒng)到軟件給出了詳細(xì)的設(shè)計(jì)方案,有利于學(xué)生理解小系統(tǒng)開(kāi)發(fā)和通信協(xié)議實(shí)現(xiàn)。最后,智能手機(jī)的WiFi MAC地址作為個(gè)人身份識(shí)別數(shù)據(jù)對(duì)于安防應(yīng)用具有重要作用,目前相關(guān)應(yīng)用也在同步推進(jìn),如商店的回頭客分析,公安的大人流預(yù)警布控等等。因此,本文提出的這一實(shí)驗(yàn)裝置也具有前瞻性,貼合社會(huì)實(shí)際需求。