武焱 袁焊忠 席振元



摘 要:在當今計算機網絡無處不在的時代,網絡攻擊時刻威協著我們所處局域網絡的安全。為了確保網絡的安全性,就要對網絡交互的數據包進行分析。本文提出了TCP/IP協議分析器的設計開發方案,并通過Qt Creator和C++編程實現。該分析器能夠捕獲網絡數據包,并根據網絡協議格式對數據進行解析,從而為進一步分析網絡系統的安全性提供依據。
關鍵詞:網絡數據包;TCP/IP協議;數據分析
1 系統需求分析
本系統主要功能需求有以下幾項:
①具備網絡數據包捕獲的參數設置: 在進行數據捕獲之前要進行協議類型、MAC地址、IP地址等參數的設置,滿足用戶的一些常規需求,保證用戶使用系統的合理性。
②能夠捕獲到本機所有的網絡數據包:通過本系統可以對網絡上的數據包進行捕獲,包括ICMP、DNS、ARP、RARP等一些網絡協議的數據包的捕獲,讓用戶通過本系統能夠捕獲到有用的數據包。
③能正確地對捕獲到的網絡數據包進行網絡協議分析:在捕獲到網絡數據包后能夠對網絡數據包進行包結構分析,對數據鏈路層數據按照幀格式進行分析,對網絡層的IP數據報的分析,對傳輸層TCP和UDP的頭格式進行分析,對應用層協議進行分析。
④能夠把捕獲到的網絡數據包保存到當地文件中:在用戶的使用過程中,可能需要對捕獲到的網絡數據包進行存儲,那么需要滿足用戶對網絡數據包的存儲功能,讓用戶能夠更靈活地使用本系統。
⑤能夠打開已經捕獲到的網絡數據文件并進行網絡協議分析:能夠滿足用戶打開已經保存的網絡數據文件,并進行網絡協議分析,這樣用戶就能隨時隨地對以前的網絡數據進行協議分析了。
⑥能統計當前所有網絡接口的網絡數據包:通過這個功能,用戶可以查看當前網絡接口的數據包數量和每秒通過的數據量,用戶可以清晰地掌握當前網絡接口通過數據包的狀況,有助于用戶對網絡接口的檢測。
2 總體設計
2.1系統總體模塊設計
通過系統需求分析可以將網絡協議分析器分為四大主要功能模塊,分別為文件存儲與讀取模塊、抓包參數設置模塊、數據包捕獲模塊和數據包分析模塊。這些模塊詳細功能如下:
①文件存儲與讀取模塊:通過捕獲網絡數據包,把其存儲到文件中,有利于以后對網絡數據包的分析;讀取已經捕獲到并存儲到文件中的數據包,并進行協議分析。
②抓包參數設置模塊:通過配置抓包參數,來確定捕獲數據包的類型,可以指定捕獲網絡數據包的MAC地址和網絡地址,并能夠對網絡協議和網絡數據包大小進行設置。
③數據包捕獲模塊:通過配置的抓包參數進行數據包的捕獲,在程序運行的過程中,會將捕獲到的數據包以鏈表的形式存儲起來,以供下一步的分析。
④數據包分析模塊:根據捕獲到的數據包進行各層協議分析,將分析的結果以可視化的界面形式展示給用戶,讓用戶能夠看清每層協議的格式和數據包數據部分內容。
系統功能模塊圖如圖1所示:
2.2 軟件開發平臺
本系統開發平臺是一般的PC機,使用Windows 8版本。因為本系統沒有涉及到數據庫所以就沒有使用數據庫。程序開發使用的編程環境是Qt 5.4.1中文版,并且opensource使用的版本是Qt Creator 3.3.1。用到的數據包捕獲函數庫為WinPcap,這個函數庫主要運行在操作系統的底層,所以使用這個函數庫會大大提升本系統的運行效率,尤其在大量循環捕獲網絡數據包的時候,優勢就愈發明顯。編程工具Qt Creator具有很好的跨平臺性能,可以很輕松的把本系統移植到Linux環境的系統中去。
3 詳細設計
系統中各個功能模塊的界面是用Qt Designer來設計的,它提供可視化的界面操作,通過拖動控件來實現我們想要的界面效果,方便高效。Qt提供的信號與槽的機制對邏輯功能的編程更加方便。根據模塊所需要實現的功能,編寫代碼,最終實現系統的整體功能。
3.1 協議頭結構設計
通過對協議頭結構體的設計,幫助我們完成網絡數據包的解析,將定義的結構體與捕獲到的網絡數據包進行匹配,把相應的字段進行處理,從而分析出網絡協議頭格式,完成對網絡協議的分析。
設計協議頭結構體的時候需要注意以下一些事項:①明確網絡數據包的結構;②清楚網絡數據包捕獲的方法;③明確各層協議頭數據每個字節或每個字段的含義;④定義對應的結構體用來解析網絡協議;⑤把分析的結果以可視化的方式顯示在界面上。
這個環節是整個系統中的一個重點,不管哪里出現任何差錯,都將導致最終對網絡協議的分析出現錯誤,所以在對網絡協議頭結構體設計的時候要認真細致,確保結構體里面的字段與網絡協議的字段能夠一一對應,保證對網絡協議分析的正確性。
通過對TCP/IP網絡體系各層協議格式的分析,本系統定義了以下的結構體表:數據鏈路層幀首部結構體表(_ETHERNET_HEADER)、ARP首部結構體表(_ARP_HEADER)、IP首部結構體表(_IP_HEADER)、IPv6首部結構體表(_IP6_HEADER)、TCP首部結構體表(_TCP_HEADER)、UDP首部結構體表(_UDP_HEADER)、ICMP首部結構體表(_ICMP_HEADER)。
3.2 算法概要
抓包模塊的程序流程圖如圖2所示。在對抓包參數設置完點擊確定的時候,將選擇的每一項按照網絡數據包過濾器過濾規則進行處理,轉化為字符串模式并通過調用相應的接口函數,對過濾條件進行編譯和設置,完成對抓包參數的設計。
當捕獲到網絡數據包時,這時可以選擇一個想要分析的數據包并對數據包進行解析。這里用到數據包分析算法,算法中根據每層協議的協議類型對數據包進行解析,然后判斷下一層協議,依次解析,直到最后一層協議。
在系統使用的過程中,可能需要保存數據包,那么這里就會有數據包保存的算法。代碼中做這樣的處理:每當有數據包到來都會把數據包追加到指定的文件中,當用戶需要保存數據包的時候,只需要將數據包臨時文件拷貝到指定的目錄即可。
通常會對已經保存的數據包進行讀操作,這樣我們就會有數據包文件的讀取功能。這個功能的算法使用標準C語言的二進制讀取文件的方法,將文件一個字符一個字符地讀取出來,并分離每一個數據包,并對數據包進行相應的處理。
4 系統的編碼
4.1 主要函數
此處列出了主要函數,具體程序代碼省略。
①捕獲網絡數據包函數
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
函數返回值:成功返回0,失敗返回負數。
參數描述:p: Libpcap句柄,cnt: 指定捕獲的數據包個數,-1代表無限個,callback: 回調函數,可在此函數中對數據包進行處理,user: 表示往回調函數傳的參數。
②打開存儲文件函數
pcap_dumper_t *pcap_dump_open(pcap_t *p, const char *filename)
函數返回值:成功返回一個文件句柄,失敗返回NULL。
參數描述:p: 表示一個Libpcap句柄,filename: 文件名。
函數功能:打開一個文件,并準備向其寫入網絡數據包。
③IP協議分析函數
void ethernet_protocol_IPpacket (LinkList p)
函數返回值:無返回值。
參數描述:p: LinkList類型的鏈表節點指針。
④TCP協議分析
void ethernet_protocol_TCPpacket (LinkList p, bool isIP6)
函數返回值:無返回值。
參數描述:p: LinkList類型的鏈表節點指針,isIP6: 是否為IPv6數據包。
4.2 數據包結構分析結果顯示
在數據包成功捕獲后,選擇要解析的數據包進行數據包的解析,數據包協議分析界面如圖3所示。在主窗口的右上方有一個表格,里面顯示捕獲到的每一個數據包的基本信息,如果要對其中的一個數據包進行協議分析,那么需要點擊要分析的那個數據包,協議分析的結果會在左側的樹形列表中顯示出來,下面窗口中則顯示數據包的原始數據和數據包數據。
5 結束語
本系統實現了對網絡數據抓包以及對數據鏈路層、網絡層、傳輸層和應用層等各層協議分析。在對網絡數據捕獲中,主要用到了操作系統底層的WinPcap函數庫,在大量捕獲網絡數據包時系統運行效率高;使用的編程工具是能夠跨平臺的Qt Creator,具有良好的可移植性和跨平臺性。應用該系統能夠捕獲到網絡上交互的全部數據包,并把數據包的內容顯示給用戶,把每層協議的協議頭按照協議格式解析,讓用戶更清楚地知道當前網絡的網絡數據交互狀態,進一步分析網絡系統的安全性。
參考文獻:
[1]劉文濤編著.網絡安全開發包詳解[M].電子工業出版社,2005.10:20-30.
[2]嚴蔚敏,吳偉民編著.數據結構(C語言版)[M].清華大學出版社,1997.4:55-60.
[3]殷人昆,鄭人杰,馬素霞等編著.實用軟件工程[M].第三版.清華大學出版社,2011年.
[4]明日科技編著.Visual C++從入門到精通[M].第三版.清華大學出版社,2012年9月:3-31.
[5]Bruce Eckel,Chuck Allison編著.C++編程思想[M].劉宗田,袁兆山等譯.機械工業出版社,2011年7月:52-70.
[6]陸文周編著.QT5開發及實例[M].電子工業出版社,2014年1月:11-89.
[7]布蘭切特,薩默菲爾德編著.C++GUI Qt4編程[M].第二版,閆鋒欣等譯.電子工業出版社,2013年5月:21-33.
[8]Brian W.Kernighan,Dennis M.Ritchie編著.C程序設計語言[M].第二版.機械工業出版社,2004年1月:30-60.
[9]W.Richard Stevens編著.TCP_IP協議詳解:卷一[M].機械工業出版社,2005年7月:37-45.
[10]Gary R. Wright,W. Richard Stevens編著.TCP_IP協議詳解:卷二[M].機械工業出版社,2001年12月:28-67.
基金項目:
國家級大學生創新訓練項目(201335)。