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