Shaohui.org>作品>SnifferFox>SnifferFox工作原理 2007-02-18 13:14:57

SnifferFox工作原理

軟體首先把網卡設置為混雜模式,然後獲得網卡接收到的資料,按TCP/IP協定對資料包進行分析,按照用戶的要求把一部分包過濾掉,然後再把這些等剩下的資料包寫入緩衝區(一塊指定大小的記憶體塊,可以根據用戶電腦的記憶體大小手工設置),顯示在用戶介面上,當緩衝區滿了的時候,系統會自動把緩衝區的資料寫入到外存中去。
下圖是一個簡單的說明。

SnifferFox是一個多線程的系統,大致可以分成3個線程(實現的時候實際只用了2個),抓包線程(Sniffer Thread),協議分析和過濾的線程,用戶介面。工作在資料連結層,因此可以獲得原始的資料幀,所以SnifferFox可以支援ARP,RARP等底層協定。
由於Sniffer截獲的包的資料量是相當大的,所以把這些包都保存在記憶體中是不太現實的想法,所以這裏我們引進了作業系統中兩個概念Cache和Buffer。Cache是臨時保存資料包的一個鏈表。為了不給用戶的電腦帶來太大的負擔我們限制這個鏈表的最大長度為5000。當這個鏈表達到長度達到其用戶設置的上限的時候,系統會自動把鏈表中的資料寫到Buffer中,然後把Cache清空。
Buffer是一個二進位檔,它是由一個一個的資料包組成。我們不妨稱每個包為一個記錄。其長度是不固定的,主要是因為資料包的大小是沒有辦法確定的。

它由4個部分構成,ID(4位元組),段偏移(4位元組),資料幀的相關資訊(16位元組),資料(長度不定,不過可以根據圖中的計算公式來計算)。其中段偏移也就是記錄長度,主要是用於確定記錄的結束位置和下一個記錄的開始位置。