I. 什麼是SnifferFox.
II. SnifferFox工作原理
III. SnifferFox目錄結構
IV. SnifferFox功能說明.
V. SnifferFox特點
VI. 擴充SnifferFox
VII. 作者
VIII. 結束語
I. 什麼是SnifferFox
SnifferFox是運行於Windows平台的嗅探器(Sniffer)。用於截獲經過本機電腦指定網路卡的所有資料包,並且對這些包進行分析和統計。
SnifferFox是基於Winpcap開發的,Winpcap是一個開源的項目,為了能夠得到原始的資料包,因此我們選擇了它(由於Socket工作在IP層,不能夠得到ARP,RARP的包,所以我們沒有使用)。所以說,在你安裝SnifferFox以前請先安裝Winpcap,否則就會出現找不到網路卡的提示。
我們選擇是Borland C++Builder來開發這個Sniffer,經過近2個月的努力,我們寫了將近6000多行的程式碼(檔案docs/codestat.txt有詳細的統計),這個軟體終於基本開發完成了,現在我們可以發布它的Alpha版了。不過裡面可能還是有不少我們沒有發現的錯誤,這可能回在以後的版本中得到更正。
SnifferFox是免費的,是一個綠色軟體,無需安裝和註冊,我們向大家承諾絕對不修改你的計算機的註冊表,可以直接運行(當然,為了你使用方便,我們還是製作了一個安裝包)。
II. SnifferFox工作原理軟體先把網卡設定為混雜模式,然後取得網路卡接收到的數據,按TCP/IP協定對資料包進行分析,依照使用者的要求把一部分包過濾掉,然後再把這些等剩下的資料包寫入緩衝區(一塊指定大小的記憶體區塊,可以根據使用者電腦的記憶體大小手動設定),顯示在使用者介面上,當緩衝區滿了的時候,系統會自動把緩衝區的資料寫入到外存去。
下圖是一個簡單的說明。
SnifferFox是一個多線程的系統,大致可以分成3個線程(實現的時候實際只用了2個),抓包線程(Sniffer Thread),協議分析和過濾的線程,用戶界面。工作在資料鏈結層,因此可以獲得原始的資料幀,所以SnifferFox可以支援ARP,RARP等底層協定。
由於Sniffer截獲的套件的資料量是相當大的,所以把這些套件都保存在記憶體中是不太現實的想法,所以這裡我們引進了作業系統中兩個概念Cache和Buffer。 Cache是暫時保存資料包的一個鍊錶。為了不給使用者的電腦帶來太大的負擔我們限制這個鍊錶的最大長度為5000。當這個鍊錶達到長度達到其使用者設定的上限的時候,系統會自動把鍊錶中的資料寫到Buffer中,然後把Cache清空。
Buffer是一個二進位文件,它是由一個一個的資料包組成。我們不妨稱每個包為一個記錄。其長度是不固定的,主要是因為資料包的大小是沒有辦法確定的。
它由4個部分構成,ID(4位元組),段偏移(4位元組),資料幀的相關資訊(16位元組),資料(長度不定,不過可以根據圖中的計算公式來計算) 。其中段偏移也就是記錄長度,主要是用來決定記錄的結束位置和下一個記錄的起始位置。
III. SnifferFox目錄結構當然這裡我們必須說明的是發布版本和開發版本的目錄結構是不一樣的,開發版本中的目錄更多,更複雜,但是發布版本中的目錄發布版本都有,因此這裡只介紹開發版本的目錄,發布版本可以對照得出(參考docs/dir.txt)。
+Snifferfox
+Bin 編譯器編譯後的二進位檔案已經動態連結函式庫文件
+Config 設定文件
+Images 圖片
+Obj 編譯器產生得中間文件
+Docs 文檔目錄
+Project 工程目錄
+Core 核心的程式碼,主要是自己定義的資料結構以及其實現
+Gui 實作圖形介面的程式碼
+Lang 多語言支持
+Cache 快取目錄,用於存放暫存文件
+3Com 系統中使用的第3方控件
+Save 使用者目錄,用於儲存使用者文件
IV. SnifferFox功能說明
1. 封包截取使用者可以指定一台電腦的網路卡,然後用SnifferFox截取經過這張網路卡的所以封包。系統截取這些包以後會按照要求以列表的形式顯示包的摘要信息,以面板的形式顯示包的具體信息。
2. 資料包過濾我了得到滿足我們要求的包,我們可以對截取到的包進行過濾,根據不用的要求我們可以定義2中不同的過濾器:協議過濾器和IP地址過濾器。這兩種過濾器是同時工作的,只有同時滿足這2種要求的包才會被保留下來,其它的不滿足要求的包都被丟棄掉。
3. 資料包統計為了方便使用者了解自己截取到的包的分佈情況,我們提供了資料包統計的功能,按照不同的協定層次統計其百分比以及包的數量。用圖的形式顯示出來。
4. 協定分析根據包的類型,我們會針對不同的情況對包的資料進行分析和顯示。 SnifferFox支援了比較多的協定類型,從資料鏈結層到應用層幾乎都支援。
對應用層以下的協議,都進行了詳細的分析,取出了資料包中的每一個欄位。至於應用層,暫時只識別了112個協議,但是由於應用層協議實在繁多而且每個協議都相當複雜,所以我們沒有進行深入的分析。
5. 智慧排序為了方便使用者快速找到指定的包,我們提供了智慧排序的功能,在使用者停止截取資料包的時候,只需要點擊一下清單的其中一個字段,系統就會自動對清單中的資料進行升序排序,再次點選排序方式切換。
6. 偵測網卡資訊系統能夠自動偵測到系統中的網卡數目(包含虛擬的網卡),動態地顯示在選單清單中。同時能夠偵測網卡的相關資訊。
7. 作為截包的守護程序經過測試,SnifferFox可以在計算機運行幾天而不會死機,因此我們可以用它作為專門的截包程序,像守護進程一樣一直運行(當然這有一定的限制,當截包實在太多的時候,例如好幾個G的時候就有些困難了,因為在這個版本中,我們沒有對Buffer文件進行分塊,這或許會在以後的版本中加入這個功能)。
8. 狀態動態顯示為了在截取包的時候不影響用戶的其它工作,我們可以把SnifferFox最小化,然後它會自動地在任務欄上消失,只顯示一個小的托盤圖標,在它工作的時候,它的圖示會動態地閃爍,停止的時候會停止不動。另外,我們也製作了一個小的浮動視窗顯示系統狀態,預設的時候放置在視窗頂部,
9. 資料包的保存和載入使用者可以把截取的包保存到一個指定的檔案(副檔名為*.sni),在需要的時候再透過SnifferFox載入,這種方式查看資料包和截取包的時候沒有什麼差別的,同時還可以動態地決定查看那一頁(系統已經有分頁的功能,並且是動態分頁,我們可以自己定義每頁的記錄個數)。
10. 儲存使用者選項系統選項的內容保存在config/config.ini中,這是一個in文件,一旦使用者設定(例如介面,語言等)改變,該改變就會記錄在文件中,系統下一次運行的時候就會自動根據這些設定做回應的工作。
V. SnifferFox特點
1. 簡單實用簡單是我們追求的目標,儘管系統的設計和實作比較複雜,但是我們更希望使用者看到的是一個簡單的系統而且是一個實用的系統。
2. 介面美觀
SnifferFox的介面沒有什麼可說的,系統中包含了5套標準的介面(Winxp,MacOS,Protein,DeepBlue,BlueGrass),在不用重新啟動系統的情況下可以及時地更換系統介面,而且是整體更換(當然這需要感謝我們的第3方控制)。
3. 多語言支援在設計系統的時候我們就考慮到了這個問題,所以SnifferFox本身就是支援多語言的,我們很容易對它進行擴展,只需要把Lang/english翻譯成響應的語言就可以,不需要進行任何的程序更改。系統中已經提供了中英兩中語言的支持,可以輕鬆的切換。
4. 有比較好的擴展性我們在語言,介面,協議方面都充分考慮到了其可擴展性。所以,要在這個版本的基礎上開發新的版本相對來說還是不難的。這樣可以很好的複用現在的程式碼。
5. 操作方便這是我們考慮得比較多的問題,我們在盡量讓系統的操作方式符合人們的習慣,使得使用者覺得它方便好用。
6. 支援了比較多的協定乙太網路中,SnifferFox分析了TCP/IP族的幾乎應用層以下的所有協議,應用層的協定能夠識別112個。
VI. 擴充SnifferFox
擴充SnifferFox是一件不容易的工作,除非你對它的結構非常了解,當然只是靠現在你讀這個文檔的話那是很難做到的。我們可以分3個方面擴展它:
1. 協議擴展
SnifferFox用是用物件導向的方法來分析設計和實作的,因此要擴展它,需要寫對應的協定分析的Class來解決,然後在主程式中把它們連接起來即可。具體需要詳細了解現在的系統結構才可以做到。
2. 介面擴充透過更改第3方控制SUIPack來實作(3com目錄),具體參考SUIPack的相關文件。
3. 語言擴充這是SnifferFox中擴充功能最簡單的部分,直接翻譯Lang/english檔案就可以了。
VII. 作者
FoxBackBone Team:zhengsh,gourf
VIII. 結束語儘管SnifferFox只是一個小的軟體,但是我們透過這個文件也只能夠了解它的很小一部分,所以如果你要詳細的了解它,只是透過這個文件是絕對不夠的。進一步的閱讀就只有原始碼了,因為我們也沒有太多的時間來詳細地寫出系統的設計。
如果你在使用了SnifferFox以後有關於它的建議或者想法,無論讚揚的還是批評的或者其它方面的,歡迎反饋給到我們的郵箱:shaohui_1983#163.com, gouruifeng_529#sohu.com,感謝你的支持。
另外,程式中用到了Suipack元件和WinPcap,請在本站下載