ethereal

ethereal

計算機網絡調試和數據包嗅探軟件
Ethereal(Ethereal:A Network Packet Sniffing Tool)是當前較為流行的一種計算機網絡調試和數據包嗅探軟件。Ethereal基本類似于tcpdump,但Ethereal還具有設計完美的GUI和衆多分類信息及過濾選項。用戶通過Ethereal,同時将網卡插入混合模式,可以查看到網絡中發送的所有通信流量。Ethereal抓包工具是一款專業實用的PC網絡調試和抓包工具。Ethereal抓包工具功能全面,既可以幫助網絡管理員檢測網絡環境,以便快速修複網絡,并且它還擁有網絡數據抓包功能。Ethereal應用于故障修複、分析、軟件和協議開發以及教育領域。它具有用戶對協議分析器所期望的所有标準特征,并具有其它同類産品所不具備的有關特征。[1]
    軟件名稱: 軟件平台: 軟件語言: 開發商: 軟件授權: 軟件版本: 軟件大小: 外文名:ethereal 類别:計算機網絡調試和數據包嗅探軟件 應用範圍:Unix、Linux 和 Windows 端口号:ACAP 674 安裝:winpcap、Ethereal Ethereal使用:capture選項

發展簡史

1997年底,Gerald Combs需要一個能夠追蹤網絡流量的工具軟件作為其工作上的輔助。因此他開始撰寫Ethereal軟件。

Ethereal在經過幾次中斷開發的事件過後,終于在1998年7月發布其第一個版本v0.2.0。自此之後,Combs收到了來自全世界的補丁、錯誤回報與鼓勵信件。Ethereal的發展就此開始。不久之後,Gilbert Ramirez看到了這套軟件的開發潛力并開始參予低級程序的開發。1998年10月,來自Network Appliance公司的Guy Harris在查找一套比tcpview(另外一套網絡數據包截取程序)更好的軟件。于是他也開始參與Ethereal的開發工作。

1998年底,一位在教授TCP/IP課程的講師Richard Sharpe,看到了這套軟件的發展潛力,而後開始參與開發與加入新協定的功能。在當時,新的通信協定的制定并不複雜,因此他開始在Ethereal上新增的數據包截取功能,幾乎包含了當時所有通信協定。

自此之後,數以千計的人開始參與Ethereal的開發,多半是因為希望能讓Ethereal截取特定的,尚未包含在Ethereal默認的網絡協定的數據包而參予新的開發。

軟件特征

Ethereal主要具有以下特征:

在實時時間内,從網絡連接處捕獲數據,或者從被捕獲文件處讀取數據;

Ethereal可以讀取從tcpdump(libpcap)、網絡通用嗅探器(被壓縮和未被壓縮)、SnifferTM專業版、NetXrayTM、Sun snoop和atmsnoop、Shomiti/Finisar測試員、AIX的iptrace、Microsoft的網絡監控器、Novell的LANalyzer、RADCOM的WAN/LAN分析器、ISDN4BSD項目的HP-UX nettl和i4btrace、Cisco安全IDS iplog和pppd日志(pppdump格式)、WildPacket的EtherPeek/TokenPeek/AiroPeek或者可視網絡的可視UpTime處捕獲的文件。此外Ethereal也能從Lucent/Ascend WAN路由器和Toshiba ISDN路由器中讀取跟蹤報告,還能從VMS的TCPIP讀取輸出文本和DBS Etherwatch。

從以太網、FDDI、PPP、令牌環、IEEE 802.11、ATM上的IP和回路接口(至少是某些系統,不是所有系統都支持這些類型)上讀取實時數據。

通過GUI或TTY模式tethereal程序,可以訪問被捕獲的網絡數據。

通過editcap程序的命令行交換機,有計劃地編輯或修改被捕獲文件。

當前602協議可被分割。

輸出文件可以被保存或打印為純文本或PostScript格式。

通過顯示過濾器精确顯示數據。

顯示過濾器也可以選擇性地用于高亮區和顔色包摘要信息。

所有或部分被捕獲的網絡跟蹤報告都會保存到磁盤中。

系統介紹

Ethereal是一個開放源碼的網絡分析系統,也是是目前最好的開放源碼的網絡協議分析器,支持Linux和windows平台。Ethereal起初由Gerald Combs開發,随後由一個松散的Etheral團隊組織進行維護開發。它目前所提供的強大的協議分析功能完全可以媲美商業的網絡分析系統,自從1998年發布最早的0.2版本至今,大量的志願者為Ethereal添加新的協議解析器,如今Ethereal已經支持五百多種協議解析。

很難想象如此多的人開發的代碼可以很好的融入系統中;并且在系統中加入一個新的協議解析器很簡單,一個不了解系統的結構的新手也可以根據留出的接口進行自己的協議開發。這都歸功于Ehereal良好的設計結構。事實上由于網絡上各種協議種類繁多,各種新的協議層出不窮。一個好的協議分析器必需有很好的可擴展性和結構。這樣才能适應網絡發展的需要不斷加入新的協議解析器。

一、Ethereal的捕包平台

網絡分析系統首先依賴于一套捕捉網絡數據包的函數庫。這套函數庫工作在在網絡分析系統模塊的最底層。作用是從網卡取得數據包或者根據過濾規則取出數據包的子集,再轉交給上層分析模塊。從協議上說,這套函數庫将一個數據包從鍊路層接收,至少将其還原至傳輸層以上,以供上層分析。

在Linux系統中,1992年Lawrence Berkeley Lab的Steven McCanne和Van Jacobson提出了包過濾器的一種的實現,BPF(BSD Packet Filter)。Libpcap是一個基于BPF的開放源碼的捕包函數庫。現有的大部分Linux捕包系統都是基于這套函數庫或者是在它基礎上做一些針對性的改進。

在window系統中,意大利人Fulvio Risso和Loris Degioanni提出并實現了Winpcap函數庫,作者稱之為NPF。由于NPF的主要思想就是來源于BPF,它的設計目标就是為windows系統提供一個功能強大的開發式數據包捕獲平台,希望在Linux系統中的網絡分析工具經過簡單編譯以後也可以移植到windows中,因此這兩種捕包架構是非常相似的。就實現來說提供的函數調用接口也是一緻的。

Ethereal網絡分析系統也需要一個底層的抓包平台,在Linux中是采用Libpcap函數庫抓包,在windows系統中采用winpcap函數庫抓包。

二、層次化的數據包協議分析方法

取得捕包函數捕回的數據包後就需要進行協議分析和協議還原工作了。由于OSI的7層協議模型,協議數據是從上到下封裝後發送的。對于協議分析需要從下至上進行。首先對網絡層的協議識别後進行組包還原然後脫去網絡層協議頭。将裡面的數據交給傳輸層分析,這樣一直進行下去直到應用層。

由于網絡協議種類很多,就Ethereal所識别的500多種協議來說,為了使協議和協議間層次關系明顯。從而對數據流裡的各個層次的協議能夠逐層處理。Ethereal系統采用了協議樹的方式。上圖就是一個簡單的協議樹。如果協議A的所有數據都是封裝在協議B裡的,那麼這個協議A就是協議B是另外一個協議的兒子節點。我們将最低層的無結構數據流作為根接點。那麼具有相同父節點的協議成為兄弟節點。

那麼這些擁有同樣父協議兄弟節點協議如何互相區分了?Ethereal系統采用協議的特征字來識别。每個協議會注冊自己的特征字。這些特征字給自己的子節點協議提供可以互相區分開來的标識。比如tcp協議的port字段注冊後。Tcp.port=21就可以認為是ftp協議,特征字可以是協議規範定義的任何一個字段。比如ip協議就可以定義proto字段為一個特征字。

在Ethereal中注冊一個協議解析器首先要指出它的父協議是什麼。另外還要指出自己區别于父節點下的兄弟接點協議的特征。比如ftp協議。在Ethereal中他的父接點是tcp協議,它的特征就是tcp協議的port字段為21。

這樣當一個端口為21的tcp數據流來到時。首先由tcp協議注冊的解析模塊處理,處理完之後通過查找協議樹找到自己協議下面的子協議,判斷應該由那個子協議來執行,找到正确的子協議後,就轉交給ftp注冊的解析模塊處理。這樣由根節點開始一層層解析下去。

由于采用了協議樹加特征字的設計,這個系統在協議解析上由了很強的擴展性,增加一個協議解析器隻需要将解析函數挂到協議樹的相應節點上即可。

三、基于插件技術的協議分析器

所謂插件技術,就是在程序的設計開發過程中,把整個應用程序分成宿主程序和插件兩個部分,宿主程序與插件能夠相互通信,并且,在宿主程序不變的情況下,可以通過增減插件或修改插件來調整應用程序的功能。運用插件技術可以開發出伸縮性良好、便于維護的應用程序。它著名的應用實例有:媒體播放器winamp、微軟的網絡浏覽器ie等。

由于現在網絡協議種類繁多,為了可以随時增加新的協議分析器,一般的協議分析器都采用插件技術,這樣如果需要對一個新的協議分析隻需要開發編寫這個協議分析器并調用注冊函數在系統注冊就可以使用了。通過增加插件使程序有很強的可擴展性,各個功能模塊内聚。

在協議分析器中新增加一個協議插件一般需要插件安裝或者注冊,插件初始化,插件處理3個步驟,下面以Ethereal為例進行分析如何利用插件技術新增加一個協議分析模塊。

Ethereal由于采用插件技術,一個新加入開發的程序員開發一種新的協議分析模塊的時候不需要了解所有的代碼,他隻需要寫好這個協議模塊的函數後,寫一個格式為proto_reg_handoff_XXX的函數,在函數内調用注冊函數告訴系統在什麼時候需要調用這個協議模塊。比如你事先寫好了一個名為dissect_myprot的協議解析模塊,它是用來解析tcp協議端口為250的數據。可以利用這些語句來将這個解析器注冊到系統中。

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)}

這段代碼告訴系統當tcp協議數據流端口為250的時候要調用dissect_myprot這個函數模塊。

在Ethereal中有一個腳本專門來發現開發者定義的類式proto_reg_handoff_xxx這樣的注冊函數名,然後自動生成調用這些注冊函數的代碼。這樣開發者不需要知道自己的注冊函數如何被調用的。這樣一個新的協議分析模塊就加入到系統中了。

由于采用了插件方式,Ethereal良好的結構設計讓開發者隻需要關系自己開發的協議模塊,不需要關心整個系統結構,需要将模塊整合進系統隻需要寫一個注冊函數即可,連初始化時調用這個注冊函數都由腳本自動完成了。正是因為有很好的體系結構,這個系統才能夠開發出如此多的協議解析器。

盡管Ethereal是目前最好的開放源碼的網絡分析系統,但Ethereal仍然有一些可以改進的地方,一個優秀的網絡分析器,盡可能的正确分析出數據協議和高效的處理數據是兩個重要的指标。在協議識别方面Ethereal大多采用端口識别,有少量協議采用内容識别。這就讓一些非标準端口的協議數據沒有正确解析出來。比如ftp協議如果不是21端口的話,Ethereal就無法識别出來,隻能作為tcp數據處理。

另外對于内容識别式。Ethereal是将所以内容識别的函數組成一張入口表。每次協議數據需要内容識别時,按字母順序逐個調用表裡的每個識别函數。比如對于識别yahoo massanger協議。主要是看數據前幾個字節是不是’ymsg’.由于協議名為y開頭。所以當識别出協議時已經把所有内容識别函數調用了一遍。這些都是由于Ethereal沒有實現tcp協議棧,無法做到流級别的識别。導緻在協議識别方面有點缺陷。

應用範圍

Ethereal是一種開放源代碼的許可軟件,允許用戶向其中添加改進方案。Ethereal适用于當前所有較為流行的計算機系統,包括Unix、Linux和Windows。

使用入門

Ethereal可以用來從網絡上抓包,并能對包進行分析。下面介紹windows下Ethereal的使用方法:

安裝

1、安裝winpcap

2、安裝Ethereal

使用:

windows程序,使用很簡單。啟動ethereal以後,選擇菜單Capture->Start,就OK了。當你不想抓的時候,按一下stop,抓的包就會顯示在面闆中,并且已經分析好了。

Ethereal使用-capture選項

interface:指定在哪個接口(網卡)上抓包。一般情況下都是單網卡,所以使用缺省的就可以了。

Limit each packet:限制每個包的大小,缺省情況不限制。

Capture packets in promiscuous mode:是否打開混雜模式。如果打開,抓取所有的數據包。一般情況下隻需要監聽本機收到或者發出的包,因此應該關閉這個選項。

Filter:過濾器。隻抓取滿足過濾規則的包(可暫時略過)

File:如果需要将抓到的包寫到文件中,在這裡輸入文件名稱。

use ring buffer:是否使用循環緩沖。缺省情況下不使用,即一直抓包。注意,循環緩沖隻有在寫文件的時候才有效。如果使用了循環緩沖,還需要設置文件的數目,文件多大時回卷。

其他的項選擇缺省的就可以了

Ethereal的抓包過濾器

抓包過濾器用來抓取感興趣的包,用在抓包過程中。抓包過濾器使用的是libcap過濾器語言,在tcpdump的手冊中有詳細的解釋,基本結構是:[not] primitive [and|or [not] primitive ..]

個人觀點,如果你想抓取某些特定的數據包時,可以有以下兩種方法,你可以任選一種,個人比較偏好第二種方式:

1、在抓包的時候,就先定義好抓包過濾器,這樣結果就是隻抓到你設定好的那些類型的數據包;

2、先不管三七二十一,把本機收到或者發出的包一股腦的抓下來,然後使用下節介紹的顯示過濾器,隻讓Ethereal顯示那些你想要的那些類型的數據包;

etheral的顯示過濾器(重點内容)

在抓包完成以後,顯示過濾器可以用來找到你感興趣的包,可以根據1)協議2)是否存在某個域3)域值4)域值之間的比較來查找你感興趣的包。

舉個例子,如果你隻想查看使用tcp協議的包,在ethereal窗口的左下角的Filter中輸入tcp,然後回車,Ethereal就會隻顯示tcp協議的包。

值比較表達式可以使用下面的操作符來構造顯示過濾器自然語言類c表示舉例eq==ip.addr==10.1.10.20ne!=ip.addr!=10.1.10.20gt>frame.pkt_len>10 lt < frame.pkt_len<10 ge >= frame.pkt_len>=10 le<=frame.pkt_len<=10

表達式組合可以使用下面的邏輯操作符将表達式組合起來自然語言類c表示舉例and&邏輯與,比如ip.addr=10.1.10.20&&tcp.flag.fin or||邏輯或,比如ip.addr=10.1.10.20||ip.addr=10.1.10.21 xor^^異或,如tr.dst[0:3]==0.6.29 xor tr.src[0:3]==not!邏輯非,如!llc

在Ethereal使用協議插件

Ethereal能夠支持許多協議,但有些協議需要安裝插件以後才能解,比如H.323,以H.323協議為例,首先下載Ethereal的H.323插件,

1)啟動Ethereal

2)菜單Edit->Preference

3)單擊Protocols前面的"+"号,展開Protocols4)找到Q931,并單擊

5)确保"Desegment....TCPsegments"是選中的(即方框被按下去)

6)單擊TCP

7)确保"Allow....TCPstreams"是選中的

8)确保沒有選中"Check....TCP checksum"和"Use....sequence numbers"

9)單擊TPKT

10)确保"Desegment....TCP segments"是選中的

11)點擊Save,然後點擊Apply,然後點擊OK你也完全可以不斷地重新安裝新版本winpcap和Ethreal,這樣就可以不需在舊的ethreal的版本中安裝新的插件來支持新的協議插件。這也是懶人的一種做法。

相關詞條

相關搜索

其它詞條