ethereal
是乙個開放原始碼的網路分析系統,也是是目前最好的開放原始碼的網路協議分析器,支援
linux
和windows
平台。ethereal
起初由gerald combs
開發,隨後由乙個鬆散的
etheral
團隊組織進行維護開發。它目前所提供的強大的協議分析功能完全可以媲美商業的網路分析系統,自從
1998
年發布最早的
0.2版本至今,大量的志願者為
ethereal
新增新的
協議解析器,如今
ethereal
已經支援五百多種協議解析。很難想象如此多的人開發的**可以很好的融入系統中;並且在系統中加入乙個新的協議解析器很簡單,乙個不了解系統的結構的新手也可以根據留出的介面進行自己的協議開發。這都歸功於
ehereal
良好的設計結構。事實上由於網路上各種協議種類繁多,各種新的協議層出不窮。乙個好的協議分析器必需有很好的可擴充套件性和結構。這樣才能適應網路發展的需要不斷加入新的協議解析器。
1 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
函式庫抓包
2層次化的資料報協議分析方法
取得捕包函式捕回的資料報後就需要進行協議分析和協議還原工作了。由於
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註冊的解析模組處理。這樣由根節點開始一層層解析下去。
由於採用了協議樹加特徵字的設計,這個系統在協議解析上由了很強的擴充套件性,增加乙個協議解析器只需要將解析函式掛到協議樹的相應節點上即可。
3 基於外掛程式技術的協議分析器
winamp
、微軟的網路瀏覽器
ie等。
由於現在網路協議種類繁多,為了可以隨時增加新的協議分析器,一般的協議分析器都採用外掛程式技術,這樣如果需要對乙個新的協議分析只需要開發編寫這個協議分析器並呼叫註冊函式在系統註冊就可以使用了。通過增加外掛程式使程式有很強的可擴充套件性,各個功能模組內聚。
在協議分析器中新增加乙個協議外掛程式一般需要外掛程式安裝或者註冊,外掛程式初始化,外掛程式處理
3個步驟,下面以
ethereal
為例進行分析如何利用外掛程式技術新增加乙個協議分析模組。
ethereal
由於採用外掛程式技術,乙個新加入開發的程式設計師開發一種新的協議分析模組的時候不需要了解所有的**,他只需要寫好這個協議模組的函式後,寫乙個格式為
proto_reg_handoff_***
的函式,在函式內呼叫註冊函式告訴系統在什麼時候需要呼叫這個協議模組。比如
你事先寫好了乙個名為
dissect_myprot
的協議解析模組,它是用來解析
tcp協議埠為
250的資料。可以利用這些語句來將這個解析器註冊到系統中
proto_reg_handoff_myprot(void)
這段**告訴系統當
tcp協議資料流埠為
250的時候要呼叫
dissect_myprot
這個函式模組。
在ethereal
中有乙個角本專門來發現開發者定義的類式
proto_reg_handoff_***
這樣的註冊函式名,然後自動生成呼叫這些註冊函式的**。這樣開發者不需要知道自己的註冊函式如何被呼叫的。這樣乙個新的協議分析模組就加入到系統中了。
由於採用了外掛程式方式,
ethereal
良好的結構設計讓開發者只需要關係自己開發的協議模組,不需要關心整個系統結構,需要將模組整合進系統只需要寫乙個註冊函式即可,連初始化時呼叫這個註冊函式都由指令碼自動完成了。正是因為有很好的體系結構,這個系統才能夠開發出如此多的協議解析器
儘管ethereal
是目前最好的開放原始碼的網路分析系統,但
ethereal
仍然有一些可以改進的地方,乙個優秀的網路分析器,盡可能的正確分析出資料協議和高效的處理資料是兩個重要的指標。在協議識別方面
ethereal
大多採用埠識別,有少量協議採用內容識別。這就讓一些非標準埠的協議資料沒有正確解析出來。比如
ftp協議如果不是
21埠的話,
ethereal
就無法識別出來,只能作為
tcp資料處理。另外對於內容識別式。
ethereal
是將所以內容識別的函式組成一張入口表。每次協議資料需要內容識別時,按字母順序逐個呼叫表裡的每個識別函式。比如對於識別
yahoo massanger
協議。主要是看資料前幾個位元組是不是
』ymsg』.
由於協議名為
y開頭。所以當識別出協議時已經把所有內容識別函式呼叫了一遍。這些都是由於
ethereal
沒有實現
tcp協議棧,無法做到流級別的識別。導致在協議識別方面有點缺陷。
網路協議分析 VRRP協議分析
2 rip 2的報文格式 3 rip 2的驗證報文 三 例項化 rip報文由頭部 header 和多個路由表項 route entries 部分組成。乙個rip表項中最多可以有25個路由表項。rip是基於udp協議的,所以rip報文的資料報不能超過512個位元組。1 command 長度8bit,報...
網路協議分析
arp幾種攻擊方式及其特點 1 仿冒閘道器 攻擊者傳送偽造的閘道器arp報文,欺騙同網段內的其它主機 2 欺騙閘道器 攻擊者偽造虛假的arp報文,欺騙閘道器 3 欺騙終端使用者 攻擊者偽造虛假的arp報文,欺騙相同網段內的其他主機。4 arp泛洪攻擊 攻擊者偽造大量不同arp報文在同網段內進行廣播,...
網路及網路協議
網路及網路協議 一 網路 1 通訊的基本概念 兩個物件之間通過某種介質,進行資訊的傳遞 2 訊號與通訊 訊號 將資料和訊號轉換成電子訊號,以電磁波的方式傳遞。寬頻 訊號可以看成是不同頻率電磁波的合成,我們可以把不同品廬的訊號合成在一起,得到乙個新的訊號 這個新訊號的頻譜,就是所組成的個頻率的組合。頻...