邢寶玉 呂雪鳴 孫朝宇
【摘要】Linux操作系統(tǒng)使用libnet函數(shù)庫和Qt函數(shù)庫設(shè)計的網(wǎng)絡(luò)協(xié)議數(shù)據(jù)單元發(fā)生器。本項目的意義在于該系統(tǒng)提供了提供協(xié)議驗證、協(xié)議分析等功能;為進一步學(xué)習(xí)和理解TCP/IP協(xié)議族、模擬攻擊、威脅發(fā)現(xiàn)以及網(wǎng)絡(luò)故障定位等內(nèi)容提供實踐平臺。對非網(wǎng)絡(luò)專業(yè)的學(xué)生驗證協(xié)議、對網(wǎng)絡(luò)工程專業(yè)學(xué)生深入理解協(xié)議、鍛煉協(xié)議分析能力起到重要作用。
【關(guān)鍵詞】libnet網(wǎng)絡(luò)協(xié)議PDU構(gòu)造
一、引言
Libnet是一個專業(yè)網(wǎng)絡(luò)安全構(gòu)造和發(fā)送數(shù)據(jù)包的一個高層次的API函數(shù)庫,允許開發(fā)者構(gòu)造和發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包。Libnet提供了一個對底層網(wǎng)絡(luò)數(shù)據(jù)包進行構(gòu)造,修改和發(fā)送的高級接口。它隱藏了很多底層細節(jié),省去了很多麻煩,如多路技術(shù),緩沖區(qū)管理,網(wǎng)絡(luò)數(shù)據(jù)包頭信息,字節(jié)流順序,操作系統(tǒng)兼容性,以及校驗和計算問題等等。
二、設(shè)計思想
首先創(chuàng)建一個Libnet句柄,并將句柄初始化,為數(shù)據(jù)包分配存儲空間,確定Libnet的類型。確定網(wǎng)絡(luò)接口,可以自己指定也可以Libnet自動查詢搜索(將libnet_init()的參數(shù)device賦值NULL即可)。將校驗和的參數(shù)設(shè)置為0,libnet就會自動計算校驗和。獲取libnet初始化后的句柄,構(gòu)造數(shù)據(jù)包,這里使用Qt Creator中的QLineEdit和QComboBox為libnet句柄所代表的數(shù)據(jù)包賦值,使用QPushButton執(zhí)行開始發(fā)送和結(jié)束,通過Libnet定義的句柄返回值來判斷我們所構(gòu)造的數(shù)據(jù)包是否合法,如果合法就調(diào)用libnet_write()函數(shù)發(fā)送數(shù)據(jù)包。
三、程序流程
3.1構(gòu)造協(xié)議模塊流程
首先通過初始化函數(shù)libnet_init(),對內(nèi)存、網(wǎng)絡(luò)進行初始化,再通過不同的libnet_build()函數(shù)構(gòu)造各種協(xié)議的網(wǎng)絡(luò)數(shù)據(jù)包,其中包括libnet_build_arp(),libnet_build_ip()等等。將網(wǎng)絡(luò)數(shù)據(jù)包構(gòu)造好后,通過libnet_write()函數(shù)將構(gòu)造好的網(wǎng)絡(luò)數(shù)據(jù)包進行發(fā)送,最后通過libnet_destroy()函數(shù)關(guān)閉網(wǎng)絡(luò)接口,釋放內(nèi)部內(nèi)存空間,構(gòu)造結(jié)束。
3.2主函數(shù)流程
創(chuàng)建一個QThread 類的子類myThread,重載QThread 的run()函數(shù),run()函數(shù)中發(fā)射構(gòu)造相應(yīng)數(shù)據(jù)包的信號。實例化一個線程對象并調(diào)用QThread::start()函數(shù),開始發(fā)送數(shù)據(jù)包,重載的run()函數(shù)將會在新建的獨立的線程中執(zhí)行。
選擇想要構(gòu)造的數(shù)據(jù)包,即跳轉(zhuǎn)到各自協(xié)議的數(shù)據(jù)包構(gòu)造函數(shù),檢查構(gòu)造的數(shù)據(jù)包是否合法,如果合法就調(diào)用libnet_write()函數(shù)發(fā)送數(shù)據(jù)包,否則,查看linux終端輸出的錯誤信息,然后重新填寫數(shù)據(jù)包,繼續(xù)執(zhí)行。
程序界面如圖1所示:
四、結(jié)束語
在實驗室局域網(wǎng)環(huán)境中進行測試并且結(jié)果表明系統(tǒng)能夠構(gòu)造不同協(xié)議數(shù)據(jù)包,可以通過Wireshark和Tcpdump網(wǎng)絡(luò)數(shù)據(jù)包捕獲工具捕獲成功。
參考文獻
[1]劉文濤. 網(wǎng)絡(luò)安全開發(fā)包詳解[M]. 北京:電子工業(yè)出版社,2005.10
[2]黃俊杰,王建新,張靜. 基于Linux的網(wǎng)絡(luò)協(xié)議學(xué)習(xí)系統(tǒng)[J]. 中南大學(xué)碩士學(xué)位論文,2009.11
[3]布蘭切特(Jasmin Blanchette)(作者),薩默菲爾德(Mark Summerfield)(作者),閆鋒欣(譯者),等. C++ GUI Qt 4編程[M]. 第2版. 電子工業(yè)出版社,2013.5