王慶剛 劉中燁
摘 要:文章設(shè)計了一個面向無線網(wǎng)絡(luò)的監(jiān)測系統(tǒng),系統(tǒng)基于Linux系統(tǒng)下的Libpcap函數(shù)庫進行程序設(shè)計和實現(xiàn),可以捕獲802.11協(xié)議封裝的MAC數(shù)據(jù)幀,根據(jù)WIFI聯(lián)盟定義的幀結(jié)構(gòu)對相應(yīng)字段進行解析,并將解析結(jié)果存儲于本地數(shù)據(jù)庫中,通過4G通信模塊將系統(tǒng)監(jiān)測的無線網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)竭h端的系統(tǒng)客戶端進行顯示和分析。
關(guān)鍵詞:Libpcap;無線網(wǎng)絡(luò)監(jiān)測系統(tǒng);802.11協(xié)議;WiFi;4G
中圖分類號:TP393 文獻標識碼:A
Abstract: This paper designs a monitoring system for wireless networks. The system is designed and implemented based on Libpcap library in Linux system. It can capture MAC data frames encapsulated by 802.11 protocol, and then parse the corresponding fields according to the frame structure defined by WIFI alliance. The analysis results are stored in the local database. The data will be transmitted to the remote client for display and analysis by 4G communication module.
Key words: Libpcap; wireless network monitoring system; 802.11 protocol; WiFi; 4G
1 引言
隨著現(xiàn)代通信技術(shù)的高速發(fā)展,各種短距離無線接入技術(shù)逐漸滲透進人們生產(chǎn)生活的方方面面,如Wifi、ZigBee、Bluetooth、Mesh以及近來炙手可熱的Lifi技術(shù)。其中WiFi技術(shù)依靠其高傳輸速率、高可靠性等優(yōu)勢,被廣泛應(yīng)用在教育、醫(yī)療、能源、工業(yè)等領(lǐng)域,成為目前應(yīng)用最為廣泛的短距離無線通信標準。然而,WiFi技術(shù)在給人們帶來便捷的同時,也存在諸多問題,例如信號有效覆蓋范圍難以確定,網(wǎng)絡(luò)缺乏規(guī)劃難以管理,通信安全難以保障,實際生活中,部分黑客可以通過WiFi釣魚、偽造熱點、流量劫持等方式攻擊網(wǎng)絡(luò)中的終端或者服務(wù)器,從而造成可怕的網(wǎng)絡(luò)安全事故。因此,對WiFi無線網(wǎng)絡(luò)進行有效的監(jiān)測顯得尤為重要。
本文中設(shè)計的無線網(wǎng)絡(luò)監(jiān)測系統(tǒng)能夠監(jiān)測并分析區(qū)域內(nèi)無線AP和移動臺的相關(guān)信息數(shù)據(jù),網(wǎng)絡(luò)管理員可以通過系統(tǒng)客戶端實現(xiàn)的可視化無線網(wǎng)絡(luò)協(xié)議數(shù)據(jù)的分析和統(tǒng)計,更好地掌控無線網(wǎng)絡(luò)狀況并做好網(wǎng)絡(luò)的分析和優(yōu)化。
2 無線網(wǎng)絡(luò)監(jiān)測系統(tǒng)總體架構(gòu)
本系統(tǒng)主要由終端監(jiān)測設(shè)備和前臺客戶端組成。監(jiān)測終端是由Raspberry Pi開發(fā)板、開源無線網(wǎng)卡、TFT液晶屏和4G傳輸模塊等元件實現(xiàn),能夠工作于2.4G ISM頻段,可以實現(xiàn)對信號范圍內(nèi)所有WiFi AP和移動終端進行實時監(jiān)測和網(wǎng)絡(luò)數(shù)據(jù)的收集。前臺客戶端是基于Python語言開發(fā)的,能夠?qū)⒈O(jiān)測終端采集到的無線網(wǎng)絡(luò)數(shù)據(jù)進行分析和顯示。系統(tǒng)架構(gòu)如圖1所示。
系統(tǒng)中采用無線網(wǎng)絡(luò)被動監(jiān)測的方案,將無線網(wǎng)卡設(shè)置為混雜模式,可以直接偵聽無線網(wǎng)絡(luò)的底層數(shù)據(jù)包,同時不會對網(wǎng)絡(luò)中的數(shù)據(jù)傳輸造成任何影響;采集到的網(wǎng)絡(luò)信息通過開發(fā)板的TFT液晶屏直接顯示,同時被編碼為.CSV文件并存儲于本地數(shù)據(jù)庫,并通過4G模塊將數(shù)據(jù)傳輸至遠端計算機,最終在系統(tǒng)的客戶端部分完成無線網(wǎng)絡(luò)數(shù)據(jù)的分析和匯總顯示。
3 硬件設(shè)計
3.1 硬件開發(fā)板
本系統(tǒng)監(jiān)測終端設(shè)備的的實現(xiàn)是基于一塊Raspberry Pi(樹莓派)3B型號開發(fā)板,它支持WiFi技術(shù),能夠運行Linux開源系統(tǒng),外置的無線網(wǎng)卡和4G模塊可以通過板載的USB接口與開發(fā)板內(nèi)核進行通信,TFT液晶屏幕則通過HDMI接口與內(nèi)核通信,因此Raspberry Pi開發(fā)板可以完美匹配本監(jiān)測終端的需求。
3.2 顯示模塊
顯示模塊采用了一塊3.5英寸的TFT液晶顯示器,支持HDMI輸入,物理分辨率480×320,可配置軟件分辨率高達1920×1080,自帶觸摸控制功能,能夠通過26PIN母座與樹莓派連接,并可直接從開發(fā)板的板載GPIO口取電,功耗低,具有較強的續(xù)航能力。
3.3 無線網(wǎng)卡
無線網(wǎng)卡選用RT3070L核心網(wǎng)卡,該網(wǎng)卡支持802.11BNG協(xié)議,并且數(shù)據(jù)吞吐量高,支持注入模式和AP模式的混雜模式;啟用混雜模式時,可以監(jiān)聽整個無線網(wǎng)絡(luò)中的802.11數(shù)據(jù)幀,其捕獲數(shù)據(jù)幀產(chǎn)生的硬件中斷可以提醒高層應(yīng)用處理該數(shù)據(jù)報。
3.4 4G通信模塊
遠程通信模塊采用3G/4G傳輸?shù)姆绞?,硬件網(wǎng)卡選用華為E3372 4G網(wǎng)卡,它能夠同時支持聯(lián)通4G/3G/2G和電信4G網(wǎng)絡(luò),本系統(tǒng)選用電信4G作為信號載體,結(jié)合系統(tǒng)的自動撥號腳本即可將監(jiān)測終端方便的連接到ISP網(wǎng)絡(luò),從而實現(xiàn)無線網(wǎng)絡(luò)監(jiān)測設(shè)備與遠端的系統(tǒng)客戶端之間進行正常數(shù)據(jù)通信。
4 軟件實現(xiàn)
4.1 系統(tǒng)設(shè)計架構(gòu)
本系統(tǒng)的終端監(jiān)測設(shè)備上運行的是Kali Linux系統(tǒng),能夠兼容大容量USB和無線設(shè)備,如本系統(tǒng)采用的RT3070L芯片和E3372 USB 4G網(wǎng)卡。系統(tǒng)的客戶端程序采用Python語言和Linux系統(tǒng)下命令行腳本進行開發(fā),Python是一種面向?qū)ο蟮哪_本程序設(shè)計語言,其開發(fā)者平臺有開源的各種功能的庫,能夠把實現(xiàn)非常復雜功能的模塊結(jié)合起來,實現(xiàn)極其復雜的系統(tǒng)功能。本系統(tǒng)的軟件設(shè)計架構(gòu)如圖2所示。
4.2 數(shù)據(jù)包捕獲模塊
數(shù)據(jù)包捕獲模塊是系統(tǒng)功能的基礎(chǔ),該模塊完成捕獲2.4G頻段的802.11協(xié)議MAC幀的工作,對捕獲的數(shù)據(jù)包進行初步的處理并保存于本地數(shù)據(jù)庫。通常來說,Linux環(huán)境下進行數(shù)據(jù)包捕獲通常采用Raw Socket或者 Libpcap,Libpcap是Linux平臺下常用的網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包,它提供了工作于系統(tǒng)底層的數(shù)據(jù)包捕獲API,其提供的編程接口可以用于數(shù)據(jù)包捕獲、過濾、分析等應(yīng)用。本文選擇Libpcap作為底層網(wǎng)絡(luò)API,使用Python語言借助Lipcap函數(shù)庫進行系統(tǒng)編程,捕獲網(wǎng)絡(luò)數(shù)據(jù)包并將數(shù)據(jù)保存為.pcap文件,并存儲于本地數(shù)據(jù)庫中。
該功能模塊的主要代碼如下:
....
def capt_data(eth_name="wlan1mon", p_type=None):
pc = pcap.pcap(eth_name)
pc.setfilter('tcp port 80')
print 'start capture....'
if pc:
for p_time, p_data in pc:
print p_time,p_data
pcapnum +=1
p_name="pcap%d.pcap"
wrpcap(p_name,p_data)
filename ="./pcap%d.pcap"
....
4.3 數(shù)據(jù)包解碼分析模塊
數(shù)據(jù)包解碼分析模塊是整個軟件設(shè)計的核心部分,關(guān)鍵信息都是從捕獲數(shù)據(jù)中提取,這就要涉及到.pcap文件和WiFi MAC幀的結(jié)構(gòu)解析。.pcap文件是一種數(shù)據(jù)報存儲格式,文件頭的標準為24字節(jié),其后是捕獲的數(shù)據(jù)報依次排列,每個數(shù)據(jù)包由16字節(jié)的包頭和數(shù)據(jù)組成,其數(shù)據(jù)結(jié)構(gòu)如圖3所示。
捕獲數(shù)據(jù)包中存放的就是WiFi MAC幀,IEEE 802.11標準規(guī)定了它的幀結(jié)構(gòu),在數(shù)據(jù)包捕獲模塊中捕獲的文件中存放了WiFi MAC幀的數(shù)據(jù),802.11協(xié)議幀主要由三個部分組成,也就是幀頭、幀體和幀校驗碼,幀體中包含各種地址信息、序列控制信息以及持續(xù)時間,其幀格式如表1所示。
WiFi MAC幀包含控制幀、數(shù)據(jù)幀、Beacon幀等幀類型,其中Beacon幀中存放了無線設(shè)備的基本信息,其中有終端和AP的MAC地址信息,AP的傳輸速率、認證方式、加密方式以及移動臺的載波信道、連接信息等[6],通過系統(tǒng)程序?qū)⑾鄳?yīng)字段的關(guān)鍵信息提取出來,同時從.pcap文件的文件頭中提取時間信息,然后將這些數(shù)據(jù)信息保存到本地.CSV文件中。
以BSSID信息的提取為例,關(guān)鍵代碼實現(xiàn)部分如下:
....
a = rdpcap("capture1.pcap")
while True:
try:
num += 1
file_capname = "capture%d.pcap" % num
b = rdpcap(file_name)
a = a + b
except:
break
" pcap file has been read"
....
for packet in sessions[session]:
try:
data_payload += str(packet[BSSID].payload)
"[**] Data:%s" % data_payload
except:
pass
....
4.4 數(shù)據(jù)存儲
本系統(tǒng)采用MariaDB數(shù)據(jù)庫,MariaDB是MySQL數(shù)據(jù)庫的一個變種,屬于開源數(shù)據(jù)庫,使用的操作命令和功能幾乎和MySQL完全相同。本系統(tǒng)在樹莓派開發(fā)板的Linux系統(tǒng)中建立本地數(shù)據(jù)庫,用于存儲系統(tǒng)監(jiān)測的無線網(wǎng)絡(luò)數(shù)據(jù),遠程客戶機可以通過客戶端程序訪問此數(shù)據(jù)庫,并將讀取的數(shù)據(jù)顯示在客戶端圖形界面中。主要代碼如下:
....
conn = MySQLdb.connect(
host='localhost',
user='root',
passwd='password',
db='wifidetecter',
)
cur = conn.cursor()
f = open("data.csv", "r")
while True:
line = f.readline()
with f:
data = f.read()
cur.execute(
"insert into data ")
f.close()
....
4.5 客戶端顯示模塊
遠程客戶端顯示模塊可以實現(xiàn)網(wǎng)絡(luò)管理員從遠程實時查看監(jiān)測到的無線網(wǎng)絡(luò)數(shù)據(jù),并對數(shù)據(jù)進行圖形化的分析處理??蛻舳顺绦蚴褂肞ython+Qt的混合語言方式進行開發(fā),Qt是一個跨平臺C++圖形界面應(yīng)用程序開發(fā)框架,并且可以使用pyton對其進行編譯,我們用它來完成GUI的開發(fā),同時借助python下的pyqt5模塊來實現(xiàn)圖形界面的編寫。
前臺客戶端程序的核心實現(xiàn)代碼如下:
....
def initUI(self): #主窗口
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QApplication.quit)
qbtn.resize(qbtn.sizeHint())
qbtn.move(900, 460)
File = QAction(QIcon('openfile.png'), 'Open', self)
File.setShortcut('Ctrl+P')
File.setStatusTip('Open File')
File.triggered.connect(self.showDialog)
menubar = self.menuBar()
Menu = menubar.addMenu('&File;')
Menu.addAction(openFile)
def showDialog(self):
fname = QFileDialog.OpenFileName(self, 'Open file')
if fname[0]:
f = open(fname[0], 'r')
with f:
data = f.read()
self.textEdit.setText(data)
....
5 結(jié)束語
隨著現(xiàn)代通信技術(shù)的高速發(fā)展,各種短距離寬帶無線接入技術(shù)滲透進人們生活的方方面面,而伴隨著網(wǎng)絡(luò)訪問體驗的提升,人們遭受網(wǎng)絡(luò)信息泄露的幾率也大大提高,近些年來國家對網(wǎng)絡(luò)安全也愈加重視。本系統(tǒng)的研發(fā)旨在提供一種便利的無線網(wǎng)絡(luò)監(jiān)控手段,幫助網(wǎng)絡(luò)管理員更好地監(jiān)控、維護網(wǎng)絡(luò)的正常運行,系統(tǒng)在實驗室的網(wǎng)絡(luò)環(huán)境下完成了基本功能的測試,但仍存在一些不足之處,需要后期進一步的改進,如圖形化界面不夠美觀,客戶端程序數(shù)據(jù)分析功能局限等。相信在接下來的研究開發(fā)中,該監(jiān)測系統(tǒng)的功能將會逐漸完善。
參考文獻
[1] 高凱,趙登攀.PCAP文件格式網(wǎng)絡(luò)數(shù)據(jù)包分析軟件設(shè)計與實現(xiàn)[J].軟件導刊,2013(12).
[2] 溫曙光,謝高崗.LIBPCAP-MT:一種多線程的通用數(shù)據(jù)包捕獲庫[J].計算機研究與發(fā)展,2011(5).
[3] 程杰.Wi-Fi無線網(wǎng)絡(luò)技術(shù)在校園網(wǎng)中的應(yīng)用[J].網(wǎng)絡(luò)空間安全,2012(5).
[4] IEEE Standards Board.802 part 11:Wireless LAN Medium Access Control(MAC) and Physical Layer(PHY) specifications.IEEE Standard 802.11[S],1999.
[5] 聶家發(fā).關(guān)于802.11協(xié)議的研究[D].哈爾濱工程大學,2004.
[6] 李曉燕,張成,黃協(xié).校園無線網(wǎng)絡(luò)構(gòu)建及安全管理[J].網(wǎng)絡(luò)空間安全,2015(4).
[7] 盧石雷.802.11n MAC層性能研究與仿真[D].北京郵電大學,2007.
[8] 潘翔.IEEE 802.11ac無線網(wǎng)絡(luò)性能分析與優(yōu)化研究[D].北京郵電大學,2015.
作者簡介:
王慶剛(1988-),男,漢族,山東臨沂人,西南石油大學,碩士,助理工程師;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)安全、計算機應(yīng)用。
劉中燁(1996-),男,漢族,四川瀘州人,西南石油大學,本科在讀;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)通信。