王慶剛 劉中燁
摘 要:文章設計了一個面向無線網絡的監測系統,系統基于Linux系統下的Libpcap函數庫進行程序設計和實現,可以捕獲802.11協議封裝的MAC數據幀,根據WIFI聯盟定義的幀結構對相應字段進行解析,并將解析結果存儲于本地數據庫中,通過4G通信模塊將系統監測的無線網絡數據傳輸到遠端的系統客戶端進行顯示和分析。
關鍵詞:Libpcap;無線網絡監測系統;802.11協議;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 引言
隨著現代通信技術的高速發展,各種短距離無線接入技術逐漸滲透進人們生產生活的方方面面,如Wifi、ZigBee、Bluetooth、Mesh以及近來炙手可熱的Lifi技術。其中WiFi技術依靠其高傳輸速率、高可靠性等優勢,被廣泛應用在教育、醫療、能源、工業等領域,成為目前應用最為廣泛的短距離無線通信標準。然而,WiFi技術在給人們帶來便捷的同時,也存在諸多問題,例如信號有效覆蓋范圍難以確定,網絡缺乏規劃難以管理,通信安全難以保障,實際生活中,部分黑客可以通過WiFi釣魚、偽造熱點、流量劫持等方式攻擊網絡中的終端或者服務器,從而造成可怕的網絡安全事故。因此,對WiFi無線網絡進行有效的監測顯得尤為重要。
本文中設計的無線網絡監測系統能夠監測并分析區域內無線AP和移動臺的相關信息數據,網絡管理員可以通過系統客戶端實現的可視化無線網絡協議數據的分析和統計,更好地掌控無線網絡狀況并做好網絡的分析和優化。
2 無線網絡監測系統總體架構
本系統主要由終端監測設備和前臺客戶端組成。監測終端是由Raspberry Pi開發板、開源無線網卡、TFT液晶屏和4G傳輸模塊等元件實現,能夠工作于2.4G ISM頻段,可以實現對信號范圍內所有WiFi AP和移動終端進行實時監測和網絡數據的收集。前臺客戶端是基于Python語言開發的,能夠將監測終端采集到的無線網絡數據進行分析和顯示。系統架構如圖1所示。
系統中采用無線網絡被動監測的方案,將無線網卡設置為混雜模式,可以直接偵聽無線網絡的底層數據包,同時不會對網絡中的數據傳輸造成任何影響;采集到的網絡信息通過開發板的TFT液晶屏直接顯示,同時被編碼為.CSV文件并存儲于本地數據庫,并通過4G模塊將數據傳輸至遠端計算機,最終在系統的客戶端部分完成無線網絡數據的分析和匯總顯示。
3 硬件設計
3.1 硬件開發板
本系統監測終端設備的的實現是基于一塊Raspberry Pi(樹莓派)3B型號開發板,它支持WiFi技術,能夠運行Linux開源系統,外置的無線網卡和4G模塊可以通過板載的USB接口與開發板內核進行通信,TFT液晶屏幕則通過HDMI接口與內核通信,因此Raspberry Pi開發板可以完美匹配本監測終端的需求。
3.2 顯示模塊
顯示模塊采用了一塊3.5英寸的TFT液晶顯示器,支持HDMI輸入,物理分辨率480×320,可配置軟件分辨率高達1920×1080,自帶觸摸控制功能,能夠通過26PIN母座與樹莓派連接,并可直接從開發板的板載GPIO口取電,功耗低,具有較強的續航能力。
3.3 無線網卡
無線網卡選用RT3070L核心網卡,該網卡支持802.11BNG協議,并且數據吞吐量高,支持注入模式和AP模式的混雜模式;啟用混雜模式時,可以監聽整個無線網絡中的802.11數據幀,其捕獲數據幀產生的硬件中斷可以提醒高層應用處理該數據報。
3.4 4G通信模塊
遠程通信模塊采用3G/4G傳輸的方式,硬件網卡選用華為E3372 4G網卡,它能夠同時支持聯通4G/3G/2G和電信4G網絡,本系統選用電信4G作為信號載體,結合系統的自動撥號腳本即可將監測終端方便的連接到ISP網絡,從而實現無線網絡監測設備與遠端的系統客戶端之間進行正常數據通信。
4 軟件實現
4.1 系統設計架構
本系統的終端監測設備上運行的是Kali Linux系統,能夠兼容大容量USB和無線設備,如本系統采用的RT3070L芯片和E3372 USB 4G網卡。系統的客戶端程序采用Python語言和Linux系統下命令行腳本進行開發,Python是一種面向對象的腳本程序設計語言,其開發者平臺有開源的各種功能的庫,能夠把實現非常復雜功能的模塊結合起來,實現極其復雜的系統功能。本系統的軟件設計架構如圖2所示。
4.2 數據包捕獲模塊
數據包捕獲模塊是系統功能的基礎,該模塊完成捕獲2.4G頻段的802.11協議MAC幀的工作,對捕獲的數據包進行初步的處理并保存于本地數據庫。通常來說,Linux環境下進行數據包捕獲通常采用Raw Socket或者 Libpcap,Libpcap是Linux平臺下常用的網絡數據包捕獲函數包,它提供了工作于系統底層的數據包捕獲API,其提供的編程接口可以用于數據包捕獲、過濾、分析等應用。本文選擇Libpcap作為底層網絡API,使用Python語言借助Lipcap函數庫進行系統編程,捕獲網絡數據包并將數據保存為.pcap文件,并存儲于本地數據庫中。
該功能模塊的主要代碼如下:
....
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 數據包解碼分析模塊
數據包解碼分析模塊是整個軟件設計的核心部分,關鍵信息都是從捕獲數據中提取,這就要涉及到.pcap文件和WiFi MAC幀的結構解析。.pcap文件是一種數據報存儲格式,文件頭的標準為24字節,其后是捕獲的數據報依次排列,每個數據包由16字節的包頭和數據組成,其數據結構如圖3所示。
捕獲數據包中存放的就是WiFi MAC幀,IEEE 802.11標準規定了它的幀結構,在數據包捕獲模塊中捕獲的文件中存放了WiFi MAC幀的數據,802.11協議幀主要由三個部分組成,也就是幀頭、幀體和幀校驗碼,幀體中包含各種地址信息、序列控制信息以及持續時間,其幀格式如表1所示。
WiFi MAC幀包含控制幀、數據幀、Beacon幀等幀類型,其中Beacon幀中存放了無線設備的基本信息,其中有終端和AP的MAC地址信息,AP的傳輸速率、認證方式、加密方式以及移動臺的載波信道、連接信息等[6],通過系統程序將相應字段的關鍵信息提取出來,同時從.pcap文件的文件頭中提取時間信息,然后將這些數據信息保存到本地.CSV文件中。
以BSSID信息的提取為例,關鍵代碼實現部分如下:
....
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 數據存儲
本系統采用MariaDB數據庫,MariaDB是MySQL數據庫的一個變種,屬于開源數據庫,使用的操作命令和功能幾乎和MySQL完全相同。本系統在樹莓派開發板的Linux系統中建立本地數據庫,用于存儲系統監測的無線網絡數據,遠程客戶機可以通過客戶端程序訪問此數據庫,并將讀取的數據顯示在客戶端圖形界面中。主要代碼如下:
....
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 客戶端顯示模塊
遠程客戶端顯示模塊可以實現網絡管理員從遠程實時查看監測到的無線網絡數據,并對數據進行圖形化的分析處理。客戶端程序使用Python+Qt的混合語言方式進行開發,Qt是一個跨平臺C++圖形界面應用程序開發框架,并且可以使用pyton對其進行編譯,我們用它來完成GUI的開發,同時借助python下的pyqt5模塊來實現圖形界面的編寫。
前臺客戶端程序的核心實現代碼如下:
....
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 結束語
隨著現代通信技術的高速發展,各種短距離寬帶無線接入技術滲透進人們生活的方方面面,而伴隨著網絡訪問體驗的提升,人們遭受網絡信息泄露的幾率也大大提高,近些年來國家對網絡安全也愈加重視。本系統的研發旨在提供一種便利的無線網絡監控手段,幫助網絡管理員更好地監控、維護網絡的正常運行,系統在實驗室的網絡環境下完成了基本功能的測試,但仍存在一些不足之處,需要后期進一步的改進,如圖形化界面不夠美觀,客戶端程序數據分析功能局限等。相信在接下來的研究開發中,該監測系統的功能將會逐漸完善。
參考文獻
[1] 高凱,趙登攀.PCAP文件格式網絡數據包分析軟件設計與實現[J].軟件導刊,2013(12).
[2] 溫曙光,謝高崗.LIBPCAP-MT:一種多線程的通用數據包捕獲庫[J].計算機研究與發展,2011(5).
[3] 程杰.Wi-Fi無線網絡技術在校園網中的應用[J].網絡空間安全,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] 聶家發.關于802.11協議的研究[D].哈爾濱工程大學,2004.
[6] 李曉燕,張成,黃協.校園無線網絡構建及安全管理[J].網絡空間安全,2015(4).
[7] 盧石雷.802.11n MAC層性能研究與仿真[D].北京郵電大學,2007.
[8] 潘翔.IEEE 802.11ac無線網絡性能分析與優化研究[D].北京郵電大學,2015.
作者簡介:
王慶剛(1988-),男,漢族,山東臨沂人,西南石油大學,碩士,助理工程師;主要研究方向和關注領域:網絡安全、計算機應用。
劉中燁(1996-),男,漢族,四川瀘州人,西南石油大學,本科在讀;主要研究方向和關注領域:網絡通信。