基于套接字的網(wǎng)絡(luò)嗅探器及其方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種網(wǎng)絡(luò)嗅探器,具體地涉及一種基于套接字的網(wǎng)絡(luò)嗅探器及其方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的普及,越來越多的網(wǎng)絡(luò)應(yīng)用和信息資源被放在了互聯(lián)網(wǎng)上,與此同時,互聯(lián)網(wǎng)的復(fù)雜性和網(wǎng)絡(luò)犯罪的增長,給網(wǎng)絡(luò)的穩(wěn)定和安全帶來了巨大的壓力,網(wǎng)絡(luò)安全性和可靠性顯得越發(fā)重要。因此,對于能夠分析、診斷網(wǎng)絡(luò)、測試網(wǎng)絡(luò)穩(wěn)定性和安全性的工具軟件的需求也越來越迫切。網(wǎng)絡(luò)嗅探器作為網(wǎng)絡(luò)管理、系統(tǒng)穩(wěn)定與網(wǎng)絡(luò)安全的基礎(chǔ),始終發(fā)揮著至關(guān)重要的作用。一方面攻擊者可以利用其來監(jiān)聽網(wǎng)絡(luò)中數(shù)據(jù),以達(dá)到非法獲取信息的目的。另一方面網(wǎng)絡(luò)管理者也可用其分析網(wǎng)絡(luò)狀況,查找漏洞以供修補(bǔ)。
[0003]目前,大多數(shù)操作系統(tǒng)都為應(yīng)用程序提供了訪問數(shù)據(jù)鏈路層的手段,它使得應(yīng)用程序可擁有如下功能:監(jiān)視數(shù)據(jù)鏈路層上所收到的分組。這使得我們可以在普通計(jì)算機(jī)上通過像Tcpdump這樣的程序來監(jiān)視網(wǎng)絡(luò),而無須使用特殊的硬件設(shè)備。如果結(jié)合網(wǎng)卡的混雜模式,我們甚至可以監(jiān)聽局域網(wǎng)內(nèi)的所有分組。
[0004]網(wǎng)絡(luò)嗅探行為就是利用網(wǎng)絡(luò)嗅探器,在網(wǎng)絡(luò)的任何一個位置上獲取數(shù)據(jù),并加以分析整理,得出有關(guān)網(wǎng)絡(luò)狀態(tài)、數(shù)據(jù)流動情況等信息,從而達(dá)到對網(wǎng)絡(luò)的管理、攻擊以及信息截獲等目的,是網(wǎng)絡(luò)監(jiān)聽的重要手段。而網(wǎng)絡(luò)嗅探器就是能夠捕獲網(wǎng)絡(luò)中數(shù)據(jù)的工具。
[0005]網(wǎng)絡(luò)嗅探器一般用于分析網(wǎng)絡(luò)的流量,以便找出所關(guān)心的網(wǎng)絡(luò)中潛在的問題。假設(shè)網(wǎng)絡(luò)的某一段運(yùn)行得不是很好,報(bào)文的發(fā)送比較慢,而我們又不知道問題出在什么地方,此時就可以用嗅探器來做出精確的問題判斷。也有出于保密等的需要而用于監(jiān)聽等場合,當(dāng)然也有不少黑客利用它竊取重要信息來達(dá)到自己的目的。
[0006]網(wǎng)絡(luò)嗅探器與一般的鍵盤捕獲程序不同。鍵盤捕獲程序捕獲在終端上輸入的鍵值,而網(wǎng)絡(luò)嗅探器則捕獲真實(shí)的網(wǎng)絡(luò)報(bào)文。嗅探器將以太網(wǎng)卡設(shè)置成“混雜模式”來達(dá)到這個目的。網(wǎng)絡(luò)嗅探器對網(wǎng)絡(luò)上主機(jī)間的通信,能給出一個詳細(xì)的,逐包的統(tǒng)計(jì)信息??梢赃x擇某一臺主機(jī),看看它正在同哪些主機(jī)進(jìn)行通信,使用了哪些協(xié)議,傳輸了一些什么內(nèi)容。對于這類工具,常常可以設(shè)置詳細(xì)的過濾條件,可以針對信息的源主機(jī)、目的主機(jī)、使用的協(xié)議、使用的端口以及包的長度來設(shè)置過濾條件,也可以是這些條件的組合。
[0007]“端口嗅探”通常指用同一信息對目標(biāo)計(jì)算機(jī)的所有所需掃描的端口進(jìn)行發(fā)送,然后根據(jù)返回端口狀態(tài)來分析目標(biāo)計(jì)算機(jī)的端口是否打開、是否可用?!岸丝谛崽健毙袨榈囊粋€重要特征,是在短時期內(nèi)有很多來自相同的信源地址,傳向不同的目的端口的包。
[0008]通常進(jìn)行端口嗅探的工具目前主要采用的是端口嗅探軟件,也稱之為“端口嗅探器”。端口嗅探器也是一種程序,它可以對目標(biāo)主機(jī)的端口進(jìn)行連接,并記錄目標(biāo)端口的應(yīng)答。端口嗅探器通過選用遠(yuǎn)程TCP/IP協(xié)議不同的端口的服務(wù),記錄目標(biāo)計(jì)算機(jī)端口給予回答的方法,可以收集到很多關(guān)于目標(biāo)計(jì)算機(jī)的各種有用信息,比如是否有端口在監(jiān)聽,是否允許匿名登錄,是否有可寫的FTP目錄,是否能用Telnet等。
[0009]嗅探器作為一種網(wǎng)絡(luò)通訊程序,是通過對網(wǎng)卡的編程來實(shí)現(xiàn)網(wǎng)絡(luò)通訊的,對網(wǎng)卡的編程可以使用通常的套接字(Socket)方式來進(jìn)行。
[0010]套接字有三種類型:流式套接字,數(shù)據(jù)報(bào)套接字及原始套接字。
[0011]流式套接字定義了一種可靠的面向連接的服務(wù),實(shí)現(xiàn)了無差錯無重復(fù)的順序數(shù)據(jù)傳輸。數(shù)據(jù)報(bào)套接字定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無序的,并且不保證可靠,無差錯。原始套接字允許對低層協(xié)議如IP或ICMP直接訪問,主要用于新的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的測試等。
[0012]無連接服務(wù)器一般都是面向事務(wù)處理的,一個請求一個應(yīng)答就完成了客戶程序與服務(wù)程序之間的相互作用。若使用無連接的套接字編程,程序的流程如圖1所示。
[0013]面向連接服務(wù)器處理的請求往往比較復(fù)雜,不是一來一去的請求應(yīng)答所能解決的,而且往往是并發(fā)服務(wù)器。使用面向連接的套接字編程,程序的流程如圖2所示。
[0014]面向連接服務(wù)器的套接字工作過程如下:服務(wù)器首先啟動,通過調(diào)用socket O建立一個套接字,然后調(diào)用綁定函數(shù)bind O將該套接字和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用監(jiān)聽IistenO使套接字做好監(jiān)聽的準(zhǔn)備,并規(guī)定它的請求隊(duì)列的長度,之后就調(diào)用接收函數(shù)acc印t()來接收連接??蛻粼诮⑻捉幼趾缶涂烧{(diào)用連接函數(shù)connect O和服務(wù)器建立連接。連接一旦建立,客戶機(jī)和服務(wù)器之間就可以通過調(diào)用讀函數(shù)readO和寫函數(shù)write O來發(fā)送和接收數(shù)據(jù)。最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用關(guān)閉函數(shù)close O關(guān)閉套接字。
[0015]在MFC中Microsoft為套接字提供了相應(yīng)的類CAsyncSocket和CSocket,CAsyncSocket提供基于異步通信的套接字封裝功能,CSocket則是由CAsyncSocket派生,提供更加高層次的功能,例如可以將套接字上發(fā)送和接收的數(shù)據(jù)和一個文件對象(CSocketFile)關(guān)聯(lián)起來,通過讀寫文件來達(dá)到發(fā)送和接收數(shù)據(jù)的目的,此外CSocket提供的通信為同步通信,數(shù)據(jù)未接收到或是未發(fā)送完之前調(diào)用不會返回。此外通過MFC類開發(fā)者可以不考慮網(wǎng)絡(luò)字節(jié)順序和更多的通信細(xì)節(jié)。
[0016]在一次網(wǎng)絡(luò)通信/連接中有以下幾個參數(shù)需要被設(shè)置:本地IP地址、本地端口號、對方端口號、對方IP地址。左邊兩部分稱為一個半關(guān)聯(lián),當(dāng)與右邊兩部分建立連接后就稱為一個全關(guān)聯(lián)。在這個全關(guān)聯(lián)的套接字上可以雙向的交換數(shù)據(jù)。如果是使用無連接的通信則只需要建立一個半關(guān)聯(lián),在發(fā)送和接收時指明另一半的參數(shù)就可以了,所以可以說無連接的通信是將數(shù)據(jù)發(fā)送到另一臺主機(jī)的指定端口。此外不論是有連接還是無連接的通信都不需要雙方的端口號相同。因此只需要做很少的工作就可以開發(fā)出利用網(wǎng)絡(luò)進(jìn)行通信的軟件。
【發(fā)明內(nèi)容】
[0017]針對上述技術(shù)問題,本發(fā)明的目的是:提供一種基于套接字的網(wǎng)絡(luò)嗅探器,開發(fā)工作量小,成本低廉。
[0018]本發(fā)明的技術(shù)方案是:
一種基于套接字的網(wǎng)絡(luò)嗅探器,其特征在于,包括數(shù)據(jù)包捕獲模塊、數(shù)據(jù)包解析模塊和數(shù)據(jù)包顯示模塊;
所述數(shù)據(jù)包捕獲模塊用于設(shè)置套接字和捕獲數(shù)據(jù)包,所述數(shù)據(jù)包解析模塊用于數(shù)據(jù)包頭解析和子協(xié)議解析,所述數(shù)據(jù)包顯示模塊包括List輸出控件和Edit輸出控件,所述List輸出控件將數(shù)據(jù)包頭分析結(jié)果顯示在界面中,所述Edit輸出控件用于輸出數(shù)據(jù)包內(nèi)容分析結(jié)果。
[0019]優(yōu)選的,所述Edit輸出控件輸出顯示行號、十六進(jìn)制形式數(shù)據(jù)包內(nèi)容、ASCII碼形式數(shù)據(jù)包內(nèi)容。
[0020]本發(fā)明還公開了一種使用上述的網(wǎng)絡(luò)嗅探器的網(wǎng)絡(luò)嗅探方法,其特征在于,包括如下步驟:
S01:創(chuàng)建原始套接字,并設(shè)置其操作選項(xiàng);
S02:將原始套接字綁定到本地網(wǎng)卡地址上,設(shè)置網(wǎng)卡為混雜模式;
S03:初始化數(shù)據(jù)包接收結(jié)構(gòu);
S04:當(dāng)接收到數(shù)據(jù)包時先解析數(shù)據(jù)包頭,再根據(jù)數(shù)據(jù)包協(xié)議進(jìn)行子協(xié)議解析;
S05:解析完以后分別通過List輸出控件和Edit輸出控件將解析的數(shù)據(jù)包內(nèi)容輸出。
[0021]優(yōu)選的,所述數(shù)據(jù)包內(nèi)容包括協(xié)議、IP源地址、IP目標(biāo)地址、TCP源端口號、TCP目標(biāo)端口號、包的數(shù)據(jù)部分。
[0022]優(yōu)選的,所述步驟S04包括對捕獲的數(shù)據(jù)包進(jìn)行拆包分析包括解析源IP、解析目標(biāo)IP、計(jì)算IP頭長,通過協(xié)議映射模塊確定數(shù)據(jù)包協(xié)議類型,將數(shù)據(jù)包送入子協(xié)議解析模塊根據(jù)不同的協(xié)議類型分析其IP地址、數(shù)據(jù)包大小、端口號。
[0023]本發(fā)明又公開了一種基于套接字的TCP端口嗅探方法,其特征在于,包括如下步驟:
Sll:調(diào)用掃描Scan方法,讀取目的IP、起始端口、目的端口 ;
S12:創(chuàng)建對應(yīng)的線程,并建立套接字;
S13:向目的端口建立TCP連接,如果收到TCP回復(fù)則成功建立連接;將成功建立連接的端口號輸出之后關(guān)閉連接和線程;如果沒有收到TCP回復(fù)則連接失敗,重新執(zhí)行步驟S12。
[0024]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)是:
1.基于套接字的網(wǎng)絡(luò)嗅探器通過原始套接字,可以更加自如地控制Windows下的多種協(xié)議,而且能夠?qū)W(wǎng)絡(luò)底層的傳輸機(jī)制進(jìn)行控制,通過MFC類開發(fā)者可以不考慮網(wǎng)絡(luò)字節(jié)順序和更多的通信細(xì)節(jié),開發(fā)工作量小,成本低廉。
[0025]2.這種嗅探方式隱蔽,不會對正常的網(wǎng)絡(luò)傳輸造成任何影響,同時數(shù)據(jù)收集也十分豐富。通過網(wǎng)絡(luò)嗅探技術(shù)實(shí)現(xiàn)審計(jì)跟蹤、攻擊檢測等在網(wǎng)絡(luò)安全問題上具有重要意義。通過網(wǎng)絡(luò)嗅探技術(shù)收集到網(wǎng)絡(luò)中傳送的數(shù)據(jù)后對這些數(shù)據(jù)進(jìn)行分析可以幫助解決在各種網(wǎng)絡(luò)上的性能問題并排除網(wǎng)絡(luò)故障,進(jìn)一步可以產(chǎn)生報(bào)表等數(shù)據(jù)分析結(jié)果以更好的支持網(wǎng)絡(luò)的運(yùn)行。
【附圖說明】
[0026]下面結(jié)合附圖及實(shí)施例對本發(fā)明作進(jìn)一步描述:
當(dāng)前第1頁
1 
2 
3