時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
Ethereal是一個(gè)開(kāi)放源碼的網(wǎng)絡(luò)分析系統(tǒng),也是是目前最好的開(kāi)放源碼的網(wǎng)絡(luò)協(xié)議分析器,支持Linux和windows平臺(tái)。
Ethereal起初由Gerald Combs開(kāi)發(fā),隨后由一個(gè)松散的Etheral團(tuán)隊(duì)組織進(jìn)行維護(hù)開(kāi)發(fā)。它目前所提供的強(qiáng)大的協(xié)議分析功能完全可以媲美商業(yè)的網(wǎng)絡(luò)分析系統(tǒng),自從1998年發(fā)布最早的0.2版本至今,大量的志愿者為Ethereal添加新的協(xié)議解析器,如今Ethereal已經(jīng)支持五百多種協(xié)議解析。很難想象如此多的人開(kāi)發(fā)的代碼可以很好的融入系統(tǒng)中;并且在系統(tǒng)中加入一個(gè)新的協(xié)議解析器很簡(jiǎn)單,一個(gè)不了解系統(tǒng)的結(jié)構(gòu)的新手也可以根據(jù)留出的接口進(jìn)行自己的協(xié)議開(kāi)發(fā)。這都?xì)w功于Ehereal良好的設(shè)計(jì)結(jié)構(gòu)。事實(shí)上由于網(wǎng)絡(luò)上各種協(xié)議種類(lèi)繁多,各種新的協(xié)議層出不窮。一個(gè)好的協(xié)議分析器必需有很好的可擴(kuò)展性和結(jié)構(gòu)。這樣才能適應(yīng)網(wǎng)絡(luò)發(fā)展的需要不斷加入新的協(xié)議解析器。
1 Ethereal的捕包平臺(tái)
網(wǎng)絡(luò)分析系統(tǒng)首先依賴于一套捕捉網(wǎng)絡(luò)數(shù)據(jù)包的函數(shù)庫(kù)。這套函數(shù)庫(kù)工作在在網(wǎng)絡(luò)分析系統(tǒng)模塊的最底層。作用是從網(wǎng)卡取得數(shù)據(jù)包或者根據(jù)過(guò)濾規(guī)則取出數(shù)據(jù)包的子集,再轉(zhuǎn)交給上層分析模塊。從協(xié)議上說(shuō),這套函數(shù)庫(kù)將一個(gè)數(shù)據(jù)包從鏈路層接收,至少將其還原至傳輸層以上,以供上層分析。
在Linux系統(tǒng)中, 1992年Lawrence Berkeley Lab的Steven McCanne和Van Jacobson提出了包過(guò)濾器的一種的實(shí)現(xiàn),BPF(BSD Packet Filter)。Libpcap是一個(gè)基于BPF的開(kāi)放源碼的捕包函數(shù)庫(kù)。現(xiàn)有的大部分Linux捕包系統(tǒng)都是基于這套函數(shù)庫(kù)或者是在它基礎(chǔ)上做一些針對(duì)性的改進(jìn)
在window系統(tǒng)中,意大利人Fulvio Risso和Loris Degioanni提出并實(shí)現(xiàn)了Winpcap函數(shù)庫(kù),作者稱之為NPF。由于NPF的主要思想就是來(lái)源于BPF,它的設(shè)計(jì)目標(biāo)就是為windows
系統(tǒng)提供一個(gè)功能強(qiáng)大的開(kāi)發(fā)式數(shù)據(jù)包捕獲平臺(tái),希望在Linux系統(tǒng)中的網(wǎng)絡(luò)分析工具經(jīng)過(guò)簡(jiǎn)單編譯以后也可以移植到windows中,因此這兩種捕包架構(gòu)是非?,F(xiàn)實(shí)的。就實(shí)現(xiàn)來(lái)說(shuō)提供的函數(shù)調(diào)用接口也是一致的。
Ethereal網(wǎng)絡(luò)分析系統(tǒng)也需要一個(gè)底層的抓包平臺(tái),在Linux中是采用Libpcap函數(shù)庫(kù)抓包,在windows系統(tǒng)中采用winpcap函數(shù)庫(kù)抓包
2層次化的數(shù)據(jù)包協(xié)議分析方法
取得捕包函數(shù)捕回的數(shù)據(jù)包后就需要進(jìn)行協(xié)議分析和協(xié)議還原工作了。由于OSI的7層協(xié)議模型,協(xié)議數(shù)據(jù)是從上到下封裝后發(fā)送的。對(duì)于協(xié)議分析需要從下至上進(jìn)行。首先對(duì)網(wǎng)絡(luò)層的協(xié)議識(shí)別后進(jìn)行組包還原然后脫去網(wǎng)絡(luò)層協(xié)議頭。將里面的數(shù)據(jù)交給傳輸層分析,這樣一直進(jìn)行下去直到應(yīng)用層
Ip
| \
Tcp udp
| \
HTTP TFTP
由于網(wǎng)絡(luò)協(xié)議種類(lèi)很多,就Ethereal所識(shí)別的500多種協(xié)議來(lái)說(shuō),為了使協(xié)議和協(xié)議間層次關(guān)系明顯。從而對(duì)數(shù)據(jù)流里的各個(gè)層次的協(xié)議能夠逐層處理。Ethereal系統(tǒng)采用了協(xié)議樹(shù)的方式。上圖就是一個(gè)簡(jiǎn)單的協(xié)議樹(shù)。如果協(xié)議A的所有數(shù)據(jù)都是封裝在協(xié)議B里的,那么這個(gè)協(xié)議A就是協(xié)議B是另外一個(gè)協(xié)議的兒子節(jié)點(diǎn)。我們將最低層的無(wú)結(jié)構(gòu)數(shù)據(jù)流作為根接點(diǎn)。那么具有相同父節(jié)點(diǎn)的協(xié)議成為兄弟節(jié)點(diǎn)。那么這些擁有同樣父協(xié)議兄弟節(jié)點(diǎn)協(xié)議如何互相區(qū)分了?Ethereal系統(tǒng)采用協(xié)議的特征字來(lái)識(shí)別。每個(gè)協(xié)議會(huì)注冊(cè)自己的特征字。這些特征字給自己的子節(jié)點(diǎn)協(xié)議提供可以互相區(qū)分開(kāi)來(lái)的標(biāo)識(shí)。比如tcp協(xié)議的port字段注冊(cè)后。 Tcp.port=21就可以認(rèn)為是ftp協(xié)議, 特征字可以是協(xié)議規(guī)范定義的任何一個(gè)字段。比如ip協(xié)議就可以定義proto字段為一個(gè)特征字。
在Ethereal中注冊(cè)一個(gè)協(xié)議解析器首先要指出它的父協(xié)議是什么。另外還要指出自己區(qū)別于父節(jié)點(diǎn)下的兄弟接點(diǎn)協(xié)議的特征。比如ftp協(xié)議。在Ethereal中他的父接點(diǎn)是tcp協(xié)議,它的特征就是tcp協(xié)議的port字段為21。
這樣當(dāng)一個(gè)端口為21的tcp數(shù)據(jù)流來(lái)到時(shí)。首先由tcp協(xié)議注冊(cè)的解析模塊處理,處理完之后通過(guò)查找協(xié)議樹(shù)找到自己協(xié)議下面的子協(xié)議,判斷應(yīng)該由那個(gè)子協(xié)議來(lái)執(zhí)行,找到正確的子協(xié)議后,就轉(zhuǎn)交給ftp注冊(cè)的解析模塊處理。這樣由根節(jié)點(diǎn)開(kāi)始一層層解析下去。
由于采用了協(xié)議樹(shù)加特征字的設(shè)計(jì),這個(gè)系統(tǒng)在協(xié)議解析上由了很強(qiáng)的擴(kuò)展性,增加一個(gè)協(xié)議解析器只需要將解析函數(shù)掛到協(xié)議樹(shù)的相應(yīng)節(jié)點(diǎn)上即可。
3 基于插件技術(shù)的協(xié)議分析器
所謂插件技術(shù),就是在程序的設(shè)計(jì)開(kāi)發(fā)過(guò)程中,把整個(gè)應(yīng)用程序分成宿主程序和插件兩個(gè)部分,宿主程序與插件能夠相互通信,并且,在宿主程序不變的情況下,可以通過(guò)增減插件或修改插件來(lái)調(diào)整應(yīng)用程序的功能。運(yùn)用插件技術(shù)可以開(kāi)發(fā)出伸縮性良好、便于維護(hù)的應(yīng)用程序。它著名的應(yīng)用實(shí)例有:媒體播放器winamp、微軟的網(wǎng)絡(luò)瀏覽器ie等。
由于現(xiàn)在網(wǎng)絡(luò)協(xié)議種類(lèi)繁多,為了可以隨時(shí)增加新的協(xié)議分析器,一般的協(xié)議分析器都采用插件技術(shù),這樣如果需要對(duì)一個(gè)新的協(xié)議分析只需要開(kāi)發(fā)編寫(xiě)這個(gè)協(xié)議分析器并調(diào)用注冊(cè)函數(shù)在系統(tǒng)注冊(cè)就可以使用了。通過(guò)增加插件使程序有很強(qiáng)的可擴(kuò)展性,各個(gè)功能模塊內(nèi)聚。
在協(xié)議分析器中新增加一個(gè)協(xié)議插件一般需要插件安裝或者注冊(cè),插件初始化,插件處理3個(gè)步驟,下面以Ethereal為例進(jìn)行分析如何利用插件技術(shù)新增加一個(gè)協(xié)議分析模塊。
Ethereal由于采用插件技術(shù),一個(gè)新加入開(kāi)發(fā)的程序員開(kāi)發(fā)一種新的協(xié)議分析模塊的時(shí)候不需要了解所有的代碼,他只需要寫(xiě)好這個(gè)協(xié)議模塊的函數(shù)后,寫(xiě)一個(gè)格式為proto_reg_handoff_XXX的函數(shù),在函數(shù)內(nèi)調(diào)用注冊(cè)函數(shù)告訴系統(tǒng)在什么時(shí)候需要調(diào)用這個(gè)協(xié)議模塊。比如
你事先寫(xiě)好了一個(gè)名為dissect_myprot的協(xié)議解析模塊,它是用來(lái)解析tcp協(xié)議端口為250的數(shù)據(jù)。可以利用這些語(yǔ)句來(lái)將這個(gè)解析器注冊(cè)到系統(tǒng)中
proto_reg_handoff_myprot(void) { dissector_handle_t myprot_handle; myprot_handle = create_dissector_handle(dissect_myprot, proto_myprot); dissector_add("tcp.port", 250, myprot_handle); }
這段代碼告訴系統(tǒng)當(dāng)tcp協(xié)議數(shù)據(jù)流端口為250的時(shí)候要調(diào)用dissect_myprot這個(gè)函數(shù)模塊。
在Ethereal中有一個(gè)角本專門(mén)來(lái)發(fā)現(xiàn)開(kāi)發(fā)者定義的類(lèi)式proto_reg_handoff_xxx這樣的注冊(cè)函數(shù)名,然后自動(dòng)生成調(diào)用這些注冊(cè)函數(shù)的代碼。這樣開(kāi)發(fā)者不需要知道自己的注冊(cè)函數(shù)如何被調(diào)用的。這樣一個(gè)新的協(xié)議分析模塊就加入到系統(tǒng)中了。
由于采用了插件方式,Ethereal良好的結(jié)構(gòu)設(shè)計(jì)讓開(kāi)發(fā)者只需要關(guān)系自己開(kāi)發(fā)的協(xié)議模塊,不需要關(guān)心整個(gè)系統(tǒng)結(jié)構(gòu),需要將模塊整合進(jìn)系統(tǒng)只需要寫(xiě)一個(gè)注冊(cè)函數(shù)即可,連初始化時(shí)調(diào)用這個(gè)注冊(cè)函數(shù)都由腳本自動(dòng)完成了。正是因?yàn)橛泻芎玫捏w系結(jié)構(gòu),這個(gè)系統(tǒng)才能夠開(kāi)發(fā)出如此多的協(xié)議解析器
盡管Ethereal是目前最好的開(kāi)放源碼的網(wǎng)絡(luò)分析系統(tǒng),但Ethereal仍然有一些可以改進(jìn)的地方,一個(gè)優(yōu)秀的網(wǎng)絡(luò)分析器,盡可能的正確分析出數(shù)據(jù)協(xié)議和高效的處理數(shù)據(jù)是兩個(gè)重要的指標(biāo)。在協(xié)議識(shí)別方面Ethereal大多采用端口識(shí)別,有少量協(xié)議采用內(nèi)容識(shí)別。這就讓一些非標(biāo)準(zhǔn)端口的協(xié)議數(shù)據(jù)沒(méi)有正確解析出來(lái)。比如ftp協(xié)議如果不是21端口的話,Ethereal就無(wú)法識(shí)別出來(lái),只能作為tcp數(shù)據(jù)處理。另外對(duì)于內(nèi)容識(shí)別式。Ethereal是將所以內(nèi)容識(shí)別的函數(shù)組成一張入口表。每次協(xié)議數(shù)據(jù)需要內(nèi)容識(shí)別時(shí),按字母順序逐個(gè)調(diào)用表里的每個(gè)識(shí)別函數(shù)。比如對(duì)于識(shí)別yahoo massanger協(xié)議。主要是看數(shù)據(jù)前幾個(gè)字節(jié)是不是’ymsg’.由于協(xié)議名為y開(kāi)頭。所以當(dāng)識(shí)別出協(xié)議時(shí)已經(jīng)把所有內(nèi)容識(shí)別函數(shù)調(diào)用了一遍。這些都是由于Ethereal沒(méi)有實(shí)現(xiàn)tcp協(xié)議棧,無(wú)法做到流級(jí)別的識(shí)別。導(dǎo)致在協(xié)議識(shí)別方面有點(diǎn)缺陷。
關(guān)鍵詞標(biāo)簽:Ethereal,網(wǎng)絡(luò)協(xié)議
相關(guān)閱讀
熱門(mén)文章 路由器地址大全-各品牌路由設(shè)置地址 各品牌的ADSL與路由器出廠默認(rèn)IP、帳號(hào)、密碼 Nslookup命令詳解-域名DNS診斷 站長(zhǎng)裝備:十大網(wǎng)站管理員服務(wù)器工具軟件
人氣排行 各品牌的ADSL與路由器出廠默認(rèn)IP、帳號(hào)、密碼 路由器地址大全-各品牌路由設(shè)置地址 騰達(dá)路由器怎么設(shè)置?騰達(dá)路由器設(shè)置教程 ADSL雙線負(fù)載均衡設(shè)置詳細(xì)圖文教程 路由表說(shuō)明(詳解route print) Nslookup命令詳解-域名DNS診斷 網(wǎng)管員實(shí)際工作的一天 網(wǎng)管必會(huì)!了解交換機(jī)控制端口流量