吳燕
摘要:由于計算機網(wǎng)絡的開放性、互聯(lián)性特征,網(wǎng)絡安全及網(wǎng)絡評估的重要性日益凸顯。該設計在windows平臺下實現(xiàn)了一個sniff網(wǎng)絡嗅探器,該嗅探器能在多個軟件平臺上運行,通過對軟件運行結(jié)果的分析可以獲知網(wǎng)絡流量使用情況、網(wǎng)絡資源使用率以及網(wǎng)絡安全規(guī)則的執(zhí)行等情況。
關鍵詞:網(wǎng)絡嗅探器;sniff;數(shù)據(jù)包捕獲;
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2016)24-0036-02
Abstract: Due to the openness and connectivity of network, the importance of network security and evaluation are becoming more and more important. The design and implementation of the network sniffer is in Windows platform .The sniffer software can run on multiple platforms. Analyzing the results of software, we can know the usage of network traffic, the usage of network resources and the implementation of network security rules,etc.
Key words: network sniffer; sniff; the packet capture
1 背景
隨著信息技術的發(fā)展,計算機網(wǎng)絡的廣泛應用,隨之帶來的安全問題也日益凸顯。讓我們不得不重視。無論是公司、政府機構(gòu)還是學校,都有需要保護數(shù)據(jù)的完整性及可用性。然而計算機網(wǎng)絡的連接多式多樣、五花八門、終端分布不均勻性,使網(wǎng)絡特別容易受到黑客、惡意軟件等的攻擊,數(shù)據(jù)的完整性、保密性和可用性要如何在這樣的環(huán)境的得以保護,我們不得不采取全面的安全措施來全方位應對各種網(wǎng)絡威脅。網(wǎng)絡嗅探器可以在對網(wǎng)絡安全管理的過程中,實現(xiàn)對網(wǎng)絡數(shù)據(jù)進行測量和監(jiān)視,通過利用軟件或者硬件嗅探器捕獲數(shù)據(jù)包對數(shù)據(jù)內(nèi)容進行分析處理。
嗅探器的分析結(jié)果可以獲知網(wǎng)絡流量使用情況、網(wǎng)絡資源使用率以及網(wǎng)絡安全規(guī)則的執(zhí)行情況等,作為網(wǎng)絡評估、網(wǎng)絡故障診斷和網(wǎng)絡優(yōu)化所使用,這樣就可以知道網(wǎng)絡的實際使用情況,找出網(wǎng)絡存在的漏洞和影響網(wǎng)絡性能的某些因素。比如ARP攻擊,在一個廣播式網(wǎng)絡中ARP攻擊很可能造成整個網(wǎng)段的癱瘓,要及時知道這些情況,我們可以通過網(wǎng)絡嗅探器抓包分析來獲取。再者網(wǎng)絡的安全策略的執(zhí)行情況,是否有受到攻擊,來自哪里的攻擊,網(wǎng)絡嗅探器可以在對網(wǎng)絡安全管理的過程中,實現(xiàn)對網(wǎng)絡數(shù)據(jù)進行測量和監(jiān)視,通過利用軟件或者硬件嗅探器捕獲數(shù)據(jù)包對數(shù)據(jù)內(nèi)容進行分析處理。
2 sniff嗅探技術基本原理
Sniff嗅探技術基于計算機網(wǎng)絡技術。嗅探的實現(xiàn)依賴計算機的網(wǎng)絡協(xié)議模型,其中運用最多的是TCP/IP協(xié)議模型。TCP/IP協(xié)議由加利福尼亞大學在UNIX操作系統(tǒng)下開發(fā)實現(xiàn)的。套接字(Socket)是計算機系統(tǒng)為了實現(xiàn)應用程序與TCP/IP協(xié)議交互所開發(fā)的協(xié)議,Socket實質(zhì)提供的是能是進程通信的端點,雙方先各自創(chuàng)建一個通信端點來完成通信,一個完整的socket就類似一個完整信息的信封,寫了信件的類型,自己的地址,對方的地址,自己的名字。本軟件設計正是基于套接字的設計。
嗅探器作為一種網(wǎng)絡應用程序,Socket起到了對編寫網(wǎng)絡應用程序的一種簡化,它特供了一個高層接口,使得編程人員不需要精通底層的細節(jié)。但是通常的套接字程序具有它的局限性即它無法接收到不屬于自己而經(jīng)過的數(shù)據(jù)包,此時網(wǎng)絡接口會對數(shù)據(jù)包做判斷,丟棄不屬于自己的數(shù)據(jù)包,而嗅探器的設計要求能夠接收到所有數(shù)據(jù),這就意味著需要把網(wǎng)卡設置成一種特殊的混雜模式。
如何通過原始套接字(raw socket)把網(wǎng)卡設置成混雜模式,與我們通常使用的數(shù)據(jù)流套接字TCP和數(shù)據(jù)包套接字UDP有很大的區(qū)別。在創(chuàng)建了原始套接字后,IP頭操作選項可以通過setsockopt()函數(shù)來實現(xiàn),然后再通過bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡,通過WSAIoctl ()來進行設置,讓網(wǎng)卡能夠接收到所有的數(shù)據(jù)。然后再用recv()函數(shù)來實現(xiàn)對UDP套接字和TCP套接字的獲取,到這里實際上已經(jīng)是可以對網(wǎng)絡進行嗅探了。由于原始套接字的特殊性,它包含了數(shù)據(jù)傳輸過程中的IP頭、 TCP頭等信息但是這與流、數(shù)據(jù)報套接字不同,我們可以通過對數(shù)據(jù)中的原始協(xié)議進行分析得出網(wǎng)絡相關信息。數(shù)據(jù)包被捕獲后就可以根據(jù)前面對IP數(shù)據(jù)段頭還有TCP數(shù)據(jù)段頭的結(jié)構(gòu)描述來對捕獲的數(shù)據(jù)包進行分析。在利用套接字開發(fā)網(wǎng)絡嗅探器程序時的一般步驟是:首先,創(chuàng)建原始套接字,并設置其操作選項;其次將原始套接字綁定到本地網(wǎng)卡地址上;網(wǎng)卡在混雜模式下默認接收所有數(shù)據(jù),要實現(xiàn)抓包分析我們需要在這里將網(wǎng)卡設置成混雜模式,流程如圖1所示:
3 sniff網(wǎng)絡嗅探器軟件實現(xiàn)及測試
本軟件在C++環(huán)境下基于MFC框架利用TCP/IP協(xié)議實現(xiàn)了對數(shù)據(jù)包的解包、分析數(shù)據(jù)包功能。該嗅探器能在多個軟件平臺上運行,比如Linux、window及Unix等平臺,通過把網(wǎng)卡設置為混雜模式,來實現(xiàn)對網(wǎng)絡上傳輸?shù)臄?shù)據(jù)包進行捕獲與分析。
在沒有網(wǎng)絡流經(jīng)的情況即斷網(wǎng)情況下,沒有數(shù)據(jù)的流通,故所設計的sniff網(wǎng)絡嗅探器不能嗅探到數(shù)據(jù),由此也可以知曉網(wǎng)絡是否連通,作為網(wǎng)絡故障的診斷,從圖2可以看到,此時網(wǎng)絡為斷開狀態(tài)。沒有數(shù)據(jù)的流過,因此嗅探器無法偵探到數(shù)據(jù)。
網(wǎng)絡嗅探器程序設計完成后,在Windows平臺下進行運行調(diào)試,修改錯誤,使其能完成捕獲數(shù)據(jù)包和分析數(shù)據(jù)包的功能,并將解析結(jié)果在MFC界面顯示出來,如圖3所示:
由圖2,圖3我們能看到網(wǎng)絡嗅探器可以完成預期的目標,進行了數(shù)據(jù)包截獲還有分析,顯示了分析結(jié)果。由圖2還能夠看到捕獲模塊可以實現(xiàn)將網(wǎng)絡的接口設置成混雜模式,也捕獲了局域網(wǎng)內(nèi)存在的數(shù)據(jù)包,在這里還能夠看到網(wǎng)絡狀態(tài)及網(wǎng)絡數(shù)據(jù)的流動情況,供網(wǎng)絡分析之用。
參考文獻:
[1] 王艷平, 張越. Windows網(wǎng)絡與通信程序設計[M]. 北京: 人民郵電出版社, 2006: 21-45.
[2] Andrew S.Tanenbau. 計算機網(wǎng)絡[M]. 4版.北京: 清華大學出版社, 2004.
[3] 謝希仁. 計算機網(wǎng)絡[M]. 5版.北京: 電子工業(yè)出版社, 2012.
[4] 朱桂英, 張元亮. Visual C++網(wǎng)絡編程開發(fā)與實踐[M]. 北京: 清華大學出版社, 2013: 43-57.
[5] 吳應良, 韋崗. 網(wǎng)絡入侵及其安全防范對策研究[J]. 計算機應用研究, 2006(11): 12-14.
[6] Todd Lammle.Cisco Certified Network Associate Study Guide [M]. 6th ed. 北京: 電子工業(yè)出版社, 2008.