作者:staring (協議分析論壇斑竹)
摘要:本文介紹了在liunx和windows平臺下網絡捕包平臺的異同,介紹了成熟的捕包分析系統的體系結構并給出了一個實例分析――互聯網上的開源捕包項目Ethereal。在此基礎上指出了現有的網絡捕包分析技術在協議識別上的缺陷,并給出了基于內容的協議識別改進方案。
關鍵詞:網絡分析捕包sniffer協議識別協議分析
1引言
網絡分析(Networkanalysis)是指捕捉網絡流動的數據包并通過查看包內部數據來發現網絡中出現的問題。一個好的網絡分析器.networkanalyzer)可以有:將網絡數據轉換為可讀格式;發現并修理網絡中的問題;分析網絡性能并發現瓶頸;進行網絡入侵檢測;記錄網絡流量日志和痕跡保留;分析應用軟件操作;發現失效的網卡等硬件;檢測DOS攻擊和間諜軟件;協議學習和網絡程序調試的工具等多種用途。一個系統管理員、網絡工程師、安全工程師、程序員甚至系統操作員都可能需要這種分析系統。而對于入在系統實現上,一個網絡分析器通常由五個部分組成――硬件、捕包驅動、包緩沖區、實時協議分析、解碼器。事實上現在的主流的防火墻、入侵檢測系統基本上也是采用和捕包分析系統相同的架構。
2網絡分析系統的體系結構
2.1不同系統下的捕包平臺
網絡分析系統首先依賴于一套捕捉網絡數據包的函數庫。這套函數庫工作在在網絡分析系統模塊的最底層。作用是從網卡取得數據包或者根據過濾規則取出數據包的子集,再轉交給上層分析模塊。從協議上說,這套函數庫將一個數據包從鏈路層接收,至少將其還原至傳輸層以上,以供上層分析。
在xiux系統中,1992年LawrenceBerkeleyLab的StevenMcCanne和VanJacobson在其經典文獻[3]中提出了包過濾器的一種的實現,BPF(BSDPacketFilter)。Libpcap是一個基于BPF的開放源碼的捕包函數庫?,F有的大部分xiux捕包系統都是基于這套函數庫或者是在它基礎上做一些針對性的改進
在window系統中,意大利人FulvioRisso和LorisDegioanni提出并實現了Winpcap函數庫,作者稱之為NPF。由于NPF的主要思想就是來源于BPF,它的設計目標就是為windows
系統提供一個功能強大的開發式數據包捕獲平臺,希望在xuix系統中的網絡分析工具經過簡單編譯以后也可以移植到windows中,因此這兩種捕包架構是非?,F實的。就實現來說提供的函數調用接口也是一致的。文獻【1】專門分析了這2種架構的異同之處
2.2層次化的數據包協議分析方法
再取得捕包函數捕回的數據包后就需要進行協議分析和協議還原工作了。由于OSI的7層協議模型,協議數據是從上到下封裝后發送的。對于協議分析需要從下至上進行。首先對網絡層的協議識別后進行組包還原然后脫去網絡層協議頭。將里面的數據交給傳輸層分析,這樣一直進行下去直到應用層
2.3基于插件技術的協議分析器
所謂插件技術,就是在程序的設計開發過程中,把整個應用程序分成宿主程序和插件兩個部分,宿主程序與插件能夠相互通信,并且,在宿主程序不變的情況下,可以通過增減插件或修改插件來調整應用程序的功能。運用插件技術可以開發出伸縮性良好、便于維護的應用程序。它著名的應用實例有:媒體播放器winamp、微軟的網絡瀏覽器ie等。
由于現在網絡協議種類繁多,為了可以隨時增加新的協議分析器,一般的協議分析器都采用插件技術,這樣如果需要對一個新的協議分析只需要開發編寫這個協議分析器并調用注冊函數在系統注冊就可以使用了。通過增加插件使程序有很強的可擴展性,各個功能模塊內聚。
在協議分析器中新增加一個協議插件一般需要插件安裝或者注冊,插件初始化,插件處理3個步驟,下面以著名的開源協議分析器Ethereal為例進行分析如何利用插件技術新增加一個協議分析模塊。
Ethereal是一個開放源碼協議分析器,支持window和xiux,從1998年開始到現在,最高版本為1.0.4已經可以支持五百多種協議。由于采用插件技術,一個新加入開發的程序員開發一種新的協議分析模塊的時候不需要了解所有的代碼,他只需要寫好這個協議模塊的函數后,然后調用注冊函數proto_register_protocol將其函數名注冊就行了。同時調用proto_reg_handoff_myprot函數告訴系統在什么時候需要調用這個協議模塊。比如
proto_reg_handoff_myprot(void)
{
dissector_handle_tmyprot_handle;
myprot_handle=create_dissector_handle(dissect_myprot,
proto_myprot);
dissector_add("tcp.port",250,myprot_handle);
}
這段代碼告訴系統當tcp協議數據流端口為250的時候要調用這個函數模塊。這樣一個新的協議分析模塊就加入到系統中了。