當前位置:編程學習大全網 - 源碼下載 - 求助網絡多媒體技術應用ARP協議分析

求助網絡多媒體技術應用ARP協議分析

ARP協議分析

ARP(AddressResolutionProtocol)地址解析協議用於將計算機的網絡地址(IP地址32位)轉化為物理地址(MAC地址48位)[RFC826]。ARP協議是屬於鏈路層的協議,在以太網中的數據幀從壹個主機到達網內的另壹臺主機是根據48位的以太網地址(硬件地址)來確定接口的,而不是根據32位的IP地址。內核(如驅動)必須知道目的端的硬件地址才能發送數據。當然,點對點的連接是不需要ARP協議的。

ARP協議的數據結構:

typedefstructarphdr

{

unsignedshortarp_hrd;/*硬件類型*/

unsignedshortarp_pro;/*協議類型*/

unsignedchararp_hln;/*硬件地址長度*/

unsignedchararp_pln;/*協議地址長度*/

unsignedshortarp_op;/*ARP操作類型*/

unsignedchararp_sha[6];/*發送者的硬件地址*/

unsignedlongarp_spa;/*發送者的協議地址*/

unsignedchararp_tha[6];/*目標的硬件地址*/

unsignedlongarp_tpa;/*目標的協議地址*/

}ARPHDR,*PARPHDR;

為了解釋ARP協議的作用,就必須理解數據在網絡上的傳輸過程。這裏舉壹個簡單的PING例子。

假設我們的計算機IP地址是192.168.1.1,要執行這個命令:ping192.168.1.2。該命令會通過ICMP協議發送ICMP數據包。該過程需要經過下面的步驟:

1、應用程序構造數據包,該示例是產生ICMP包,被提交給內核(網絡驅動程序);

2、內核檢查是否能夠轉化該IP地址為MAC地址,也就是在本地的ARP緩存中查看IP-MAC對應表;

3、如果存在該IP-MAC對應關系,那麽跳到步驟9;如果不存在該IP-MAC對應關系,那麽接續下面的步驟;

4、內核進行ARP廣播,目的地的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令類型為REQUEST(1),其中包含有自己的MAC地址;

5、當192.168.1.2主機接收到該ARP請求後,就發送壹個ARP的REPLY(2)命令,其中包含自己的MAC地址;

6、本地獲得192.168.1.2主機的IP-MAC地址對應關系,並保存到ARP緩存中;

7、內核將把IP轉化為MAC地址,然後封裝在以太網頭結構中,再把數據發送出去;

使用arp-a命令就可以查看本地的ARP緩存內容,所以,執行壹個本地的PING命令後,ARP緩存就會存在壹個目的IP的記錄了。當然,如果妳的數據包是發送到不同網段的目的地,那麽就壹定存在壹條網關的IP-MAC地址對應的記錄。

知道了ARP協議的作用,就能夠很清楚地知道,數據包的向外傳輸很依靠ARP協議,當然,也就是依賴ARP緩存。要知道,ARP協議的所有操作都是內核自動完成的,同其他的應用程序沒有任何關系。同時需要註意的是,ARP協議只使用於本網絡。

ARP協議的利用和相關原理介紹。

壹、交換網絡的嗅探

ARP協議並不只在發送了ARP請求才接收ARP應答。當計算機接收到ARP應答數據包的時候,就會對本地的ARP緩存進行更新,將應答中的IP和MAC地址存儲在ARP緩存中。因此,在上面的假設網絡中,B向A發送壹個自己偽造的ARP應答,而這個應答中的數據為發送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本來應該是CC-CC-CC-CC-CC-CC,這裏被偽造了)。當A接收到B偽造的ARP應答,就會更新本地的ARP緩存,將本地的IP-MAC對應表更換為接收到的數據格式,由於這壹切都是A的系統內核自動完成的,A可不知道被偽造了。

ARP欺騙的主要用途就是進行在交換網絡中的嗅探。有關交換網絡的嗅探不是本文的討論內容。

二、IP地址沖突

我們知道,如果網絡中存在相同IP地址的主機的時候,就會報告出IP地址沖突的警告。這是怎麽產生的呢?

比如某主機B規定IP地址為192.168.0.1,如果它處於開機狀態,那麽其他機器A更

改IP地址為192.168.0.1就會造成IP地址沖突。其原理就是:主機A在連接網絡(或更改IP地址)的時候就會向網絡發送ARP包廣播自己的IP地址,也就是freearp。如果網絡中存在相同IP地址的主機B,那麽B就會通過ARP來reply該地址,當A接收到這個reply後,A就會跳出IP地址沖突的警告,當然B也會有警告。

因此用ARP欺騙可以來偽造這個ARPreply,從而使目標壹直遭受IP地址沖突警告的困擾。

三、阻止目標的數據包通過網關

比如在壹個局域網內通過網關上網,那麽連接外部的計算機上的ARP緩存中就存在網關IP-MAC對應記錄。如果,該記錄被更改,那麽該計算機向外發送的數據包總是發送到了錯誤的網關硬件地址上,這樣,該計算機就不能夠上網了。

這裏也主要是通過ARP欺騙進行的。有兩種辦法達到這樣的目的。

1、向目標發送偽造的ARP應答數據包,其中發送方的IP地址為網關的地址,而MAC地址則為壹個偽造的地址。當目標接收到該ARP包,那麽就更新自身的ARP緩存。如果該欺騙壹直持續下去,那麽目標的網關緩存壹直是壹個被偽造的錯誤記錄。當然,如果有些了解的人查看ARP-a,就知道問題所在了。

2、這種方法非常狠,欺騙網關。向網關發送偽造的ARP應答數據包,其中發送方的IP地址為目標的IP地址,而MAC地址則為壹個偽造的地址。這樣,網關上的目標ARP記錄就是壹個錯誤的,網關發送給目標的數據報都是使用了錯誤的MAC地址。這種情況下,目標能夠發送數據到網關,卻不能接收到網關的任何數據。同時,目標自己查看ARP-a卻看不出任何問題來。

四、通過ARP檢測混雜模式節點

在混雜模式中,網卡進行包過濾不同於普通模式。本來在普通模式下,只有本地地址的數據包或者廣播(多播等)才會被網卡提交給系統核心,否則的話,這些數據包就直接被網卡拋棄。現在,混合模式讓所有經過的數據包都傳遞給系統核心,然後被sniffer等程序利用。

通過特殊設計的ARP請求可以用來在壹定程度上檢測處於混雜模式的節點,比如對網絡中的每個節點都發送MAC地址為FF-FF-FF-FF-FF-FE的ARP請求。對於網卡來說這不是壹個廣播地址(FF-FF-FF-FF-FF-FF),所以處於普通模式的節點就會直接拋棄該數據包,但是多數操作系統核心都認為這是壹個廣播地址,如果有壹般的sniffer程序存在,並設置網卡為混雜模式,那麽系統核心就會作出應答,這樣就可以判斷這些節點是否存在嗅探器了。

可以查看,很多基於ARP的攻擊都是通過ARP欺騙實現的。至於ARP欺騙的防範,還是盡可能使用靜態的ARP。對於WIN,使用arp-s來進行靜態ARP的設置。當然,如果能夠完全使用靜態的IP+MAC對應,就更好了,因為靜態的ARP緩存只是相對的。

當然,可以有壹些方法來實現ARP欺騙的檢測。設置壹個ARP的嗅探器,其中維護著壹個本地網絡的IP-MAC地址的靜態對應表,查看所有經過的ARP數據,並檢查其中的IP-MAC對應關系,如果捕獲的IP-MAC對應關系和維護的靜態對應關系對應不上,那麽就表明是壹個欺騙的ARP數據包了。

壹個ARP數據包發送程序源代碼和編譯好的EXE程序可以參考ARPSender程序。註意:需要先安裝WinPcap。

協議分析六類常見錯誤

協議分析器是網絡管理員庫中最強有力的工具之壹。它能將難處理、耗時長、讓CEO們感到惱火甚至不得不重啟所有機器的問題轉變為能短時處理、易於在每周例行狀態報告中反映的問題,為公司省下大量的時間與金錢。

然而,就像其它任何復雜工具壹樣,它必須被適當運用才能獲得最大的效益。在使用協議分析器診斷網絡故障時,應當盡量避免……

錯誤1分析器誤置

正確放置分析器對快速診斷故障具有決定性作用。設想分析器是置於網絡中的窗口,猶如建築物窗口壹般,視野的改變依賴於從哪個窗口看出去。從南面窗口望去是看不到建築物北面高速公路上交通的擁擠狀況的。在分析置於網絡不當位置的分析器時,跟蹤往往要花很長時間。那麽,怎樣正確放置分析器呢?我們可以舉例說明。

以下為幾個可能出現的問題及原因分析:

設想A:壹臺主機,服務器A,主機不能與其它任何主機通信。可能的原因:

1)服務器A沒有正確配置;

2)服務器A配置的網卡出錯;

3)服務器A所在局域網出了問題;

4)服務器A所在局域網段出錯。

設想B:壹臺主機,服務器B,主機不能與遠程網X中的任何壹臺主機通信;且局域網或其它遠程網中的主機無任何故障(這就意味著問題不可能出現在服務器B或服務器B所在局域網段上)。

可能原因:

1)服務器B有關網絡X的部分配置錯誤;

2)服務器B用於連接到網絡X的路由器所在網段的連接出了問題;

3)服務器B所在局域網與網絡X的壹處或多處鏈接出了問題;

4)網絡X用於連接到服務器B所在網絡的路由器所在網段出了問題;

5)網絡X出了問題。

設想C:壹臺主機,服務器C,主機不能與局域網中另壹主機通信,但與網絡中其它主機通信正常(這意味著問題不可能出現在服務器C或服務器C所在局域網段)。

可能的原因:

1)主機C錯誤配置;

2)主機C網卡出現故障;

3)主機C所在局域網段出了問題。

設想D:壹臺主機,服務器D,主機不能與壹遠程主機通信,但與服務器D所在局域網段的其它主機通信正常,到遠程網或遠程網自身的連接亦無故障。

可能原因:

1)主機D錯誤配置;

2)主機D網卡出錯;

3)主機D所在局域網段出了問題。

這些問題當中個別的不用分析器也可診斷或排除。例如:設想A中的第三種情況,就能通過檢查服務器A所在局域網的其它主機決定故障所在;設想D中的第二和第三種情況亦能通過這種方法確定(假設主機D能與局域網中其它主機通信)。

壹臺服務器或主機的錯誤配置通過檢測很容易被發現。但另外壹些問題,像網絡或網段中的故障,就需要分析器來診斷。

在以上所有可能的設想中,壹開始或許會將分析器置於離最有可能出現問題的主機或是懷疑有問題的網絡、網段盡可能近的地方,但是如果未發現有意義的問題,得準備好移動分析器,要知道,在出現故障的位置被確定以前,所做的壹切都是建立在猜想基礎上的。在以上設想B的第三種情況中,服務器B所在局域網和網絡X中都應該有分析器,至少分析器應該能夠從壹端被移動到另壹端。

例如,壹次故障中,壹臺服務器突然停止了工作。人們起初懷疑是站點人員對服務器實施了誤操作所致,實際上跟蹤器表明,是因為眾多主機向服務器發送連接請求信息的同時服務器卻沒有響應,致使服務器死鎖。

在花了幾天時間來判斷到底服務器出了什麽問題後,被告知觀察跟蹤器,於是請求站點操作員將跟蹤器從主機所在局域網(這裏指設想B中第三種情況的網絡X)移到服務器所在局域網。結果發現訪問控制列表沒有被正確添加到服務器所在局域網的路由器上,這份錯誤的訪問控制列表過濾了所有來源於客戶端主機所在網絡的信息。假若當初多壹些懷疑的話,就會發現在服務器所在局域網中根本就沒見到過連接請求信息。因為沒有同時查看網絡兩端的情況,致使站點很多天不能工作。

怎麽知道跟蹤器在網絡的哪壹端起作用呢?在跟蹤器中,發自客戶端主機的幀信息都具有實客戶端所有的源MAC地址,與此同時,目標MAC地址則存放在路由器中。

不幸的是,問題變得越來越復雜,僅僅知道分析器連接於哪個網絡還不夠。當將壹個局域網分解成多個部分時,首要的是去找到空閑Hub端口或同軸電纜的分接頭,然而,在網絡交換環境下,並不是僅僅將分析器接入交換設備的空閑端口就萬事大吉了。

大多數交換設備都具備將特定端口指定為分接頭或映像端口的能力,只是所用術語因交換設備制造廠商不同而有別。如果所有來自或發往特定端口的通信同樣能發送到映像端口,這時只要將分析器連接到映像端口,所有設置即告完成。

但問題在於有些交換設備不能將兩端口之間的通信發送到映像端口。舉例說,在雙工環境下,作為監控的連接之壹部分的兩臺主機能同時發送信息,交換機也能接收每幀數據並將其傳輸到鏈接中的另外端口。但對於映像端口,必須對某壹數據幀進行緩沖,如果這樣處理了太多幀,緩沖區就會溢出,數據幀就會丟失,跟蹤因此變得不可靠。更糟的是,根本就不知道是在跟蹤不可靠的線索。

某些交換設備支持內部分析器功能,這類交換機本身能夠俘獲傳向被跟蹤對象的數據幀。這種功能部件的可靠性依賴於交換機的緩沖容量。在某些情況下,我們不得不選擇映像端口或是內部分析器方式。但只要有可能,最好是將主機之壹和分析器連接到Hub,並將Hub掛到交換機上。

為什麽這麽做呢?這是因為即使確信交換機有足夠容量緩存所有數據幀,以至於映像端口或內部分析器不可能丟數據,跟蹤仍然是不可靠的。例如,標準以太網中,壹個處於交換機有故障端口的RJ45連接器每當交換機向服務器傳輸數據幀時都會創建交互式會話,交換機將此解釋成為壹次沖突並停止工作,當嘗試16次之後數據幀就會撤消,但數據幀仍被發送到映像端口,因此跟蹤器發現了數據幀並顯示服務器響應失敗。另壹種情況是:不合規格的配線導致1%的數據幀破壞。如果將分析器與第壹種情況(任何位置的數據幀都能傳送)中提到的的主機壹起掛到Hub,或者與第二種情況(網絡中有被破壞的數據幀)中主機壹起掛到Hub,接收交換機的端口會在未將數據幀發往映像端口之前就將它們撤消,跟蹤器沒有任何錯誤指示。當然,每當改變壹種方式,都得冒壹定風險來糾正可能出現的意外問題。如果RJ45連接器出現故障僅僅是因為沒有在交換機端口將其固定好,那麽只要將連接器重新插入Hub,故障或許也就不存在了,至少問題是得到了解決。

另外需要記住的是,對於交換設備,在其網段內每個端口都是有效的,因此當連接到服務器的交換端口未發現問題時,應將Hub(或分析器)移動到主機或路由器交換端口。

還有,註意不能將Hub掛到雙工環境。有些分析器能以雙工方式工作,這類分析器有兩個以太網口和壹個功能模塊,功能模塊將通信對分為兩部分,並分別發送到每壹以太網口,之後軟件把從每個以太網口接收來的數據結合成單壹的跟蹤鏈。如果網絡是雙工環境,就需要這種分析器。

錯誤2過多的過濾

過濾功能允許協議分析器忽略某些數據幀,從而為感興趣的幀騰出更多的俘獲緩沖空間。如果能過濾來源於較高協議層的數據,如IP地址和端口號以至更高層數據,則分析器幾乎很少需要基於源或目標MAC地址的過濾。然而,實際跟蹤中通常出現的問題是過濾太多。

有壹個站點出現過這樣的故障:服務器與壹特定客戶端之間的連接出了問題,莫名其妙地斷開了,其它客戶端都沒有任何問題。由於客戶端與服務器處在同壹子網,壹旦發生斷開現象,使客戶端與服務器恢復連接的唯壹辦法是重新啟動服務器。

這個站點安裝了分析器,同時因為數據量大,配置了過濾器,只允許俘獲兩主機(基於MAC地址)之間的數據幀。前兩天中沒有發現問題,但在第三天問題出現了:跟蹤表明服務器突然停止了發送多路會話和最後壹次會話。當從服務器端ping客戶端時,跟蹤器顯示服務器沒有發送任何數據幀。站點操作員得出的結論是:TCP棧或操作系統出了問題。

於是請求另壹次跟蹤,這次沒有使用過濾器。壹天半以後俘獲了另壹事件:跟蹤清楚表明服務器持續發送數據,而與此同時卻再也沒有得到應答。經過更深層挖掘,發現服務器數據幀的目標MAC地址突然改變了。

既然目標MAC地址不再與客戶端的相匹配,那麽第壹次未使用過濾器的跟蹤就不再俘獲到MAC地址,同時表明服務器已停止了工作。另外發現就在地址改變之前,服務器無故收到帶有為客戶端IP地址配置的新MAC地址的ARP信息包,這導致服務器升級ARP緩存並向錯誤主機發送數據。

通過ARP數據幀的源MAC地址由無故發送ARP的主機向下跟蹤,不知何故,主機居然同時配置了復用於客戶端的靜態IP地址和DHCP地址。當主機啟動時,分配的是靜態地址,這與服務器相沖突,於是調用DHCP,正確地址才配置上。

基於這壹點可得出這樣壹個結論:用過濾器看似很有道理,但很多時候問題的根源往往以假象出現在過濾器之外,如果跟蹤器沒有表明問題的起因,過濾器應當關閉,或至少應當擴展壹下,直至跟蹤器確實查出原因。僅當所有過濾器都關閉後跟蹤器仍無法查出問題起因,才可以得出結論——對網絡已無計可施了。

錯誤3

俘獲時幀太短

前面例子中表明,站點操作員使用過濾器是因為網絡中數據量過大。分析器僅能俘獲大約3分鐘時間的數據,這使得站點操作員幾乎不可能發現問題的發生並使分析器及時加以阻止以真正找到問題的起因。分析器能夠俘獲數據幀而沒有將它們填入俘獲緩沖區的時間長短取決於網絡的速度、網絡中幀的數量、幀的大小以及俘獲緩沖區的大小。

幾乎所有分析器都能控制俘獲數據幀的大小,這在處理連接問題和不太高協議層問題時顯得很有用。在通常情況下,只要俘獲數據的第壹個64字節也就足夠了。因此,如果網絡中所有幀都是1024字節而僅有3分鐘俘獲時間,那麽僅俘獲64字節將允許有超過30分鐘的俘獲時間。

錯誤4

觸發器安裝不正確

觸發器告訴分析器執行某項操作,比如終止俘獲。當等待問題發生而又不知道將何時發生時,觸發器顯得很有用。

安裝觸發器意味著沒有必要隨時以手動方式來控制分析器。觸發器安裝的最大問題往往是沒有正確定義,這會大大延長解決問題的時間。

當然,應該詳細知道怎樣安裝觸發器,並且,若有可能,在使用之前進行測試。有時可以安裝另壹臺分析器來發送觸發數據幀,以確認俘獲分析觸發器已正確安裝。

使用觸發器帶來的另壹問題是,許多分析器允許設置將被預觸發的俘獲緩沖區的百分比。舉例來說,可以指定50%的緩沖區在觸發之前俘獲,而另外50%的緩沖區在觸發之後俘獲。預觸發的百分比通常是0、25、50、75或100。

如果預觸發值設置不當,就有可能俘獲不到足夠的相關數據幀來診斷問題所在。預觸發值有可能被錯誤設置是因為其默認設置對現行問題往往不適用:也許是因為未將針對前壹問題的設置升級,也許是因為粗心的鼠標操作或錯誤按鍵。無論何種原因,壹定要確認觸發器已正確安裝。

那麽怎樣來設置呢?通常是將預觸發百分比設為100%,以知道是什麽原因導致觸發器關閉。

當然,只有當觸發器在觸發某事件時,它才處於關閉狀態。過去使用過特殊的觸發程序,它能測試狀態,然後發送信息包,分析器可將此信息包用作觸發器。測試狀態可以是日誌文件中的錯誤信息,或是上例中無法創建連接的情況。壹般整個程序也就壹百多行或稍長壹些。

錯誤5

日期/時間設置不正確

沒有正確設置分析器上的日期/時間看似壹件小事,很多時候可能也確實是這樣。然而,當處理廣域網絡中的問題時,有時同時運行兩臺分析器,網絡每端壹臺,則正確設置日期/時間是相當有用的。

如果將兩臺分析器時鐘設置相同,調整跟蹤會變得更為容易。假定在壹個例子中,通過發現通用幀並比較時間,會發現其中壹臺用了4小時37分,比另壹臺提前了15.7891秒,如果時鐘設置同步誤差在1到2秒,時間差距計算也就容易多了。

另外,如果需要費勁地隨主機中的事件調整跟蹤,由於基於時間包的同步是不可選的,則設置相同的日期/時間絕對具有實質意義。

錯誤6不理解協議

很多分析器具有“專家分析”功能,指的是它們能保持對信息的追蹤,像序列號、時間信息、顯示重傳信息、凍結窗口、無應答狀態等等。這類分析相當有用,但也有可能造成誤導,尤其在分析器沒有正確報錯時。

舉個例子,有壹種情況:從壹遠程位置發來的遠程登錄會話無法建立,而發自局域工作站的遠程登錄會話卻沒有問題。於是站點操作人員在遠程登錄服務器所在的局域網掛壹分析器,跟蹤器表明從遠程主機到遠程登錄服務器的數據幀沒有報錯;於是他們得出結論是操作系統故障。

另壹位操作人員查看跟蹤器發現,局域端遠程登錄會話連接到端口2323,而遠程會話連接到端口23。另外,遠程登錄服務器響應遠程連接請求的信息包包含了RST標誌設置。

在這裏,站點操作人員沒有仔細查看TCP細節,因此沒有意識到不同端口號和RST包的重要性,他們依賴來源於分析器的診斷信息,既然遠程登錄服務器的端口23沒有安裝,憑感覺猜想也認為是操作系統出了問題。然而,若站點工作人員了解TCP和遠程登錄,他們就會立即發現問題所在並能在5分鐘內找到壹個好的解決辦法。

事實上是,他們等半天時間來安裝跟蹤器,結果失去了遠程網上數目相當可觀的客戶。

  • 上一篇:如何在html頁面中顯示壹個打開的tableau表格
  • 下一篇:2022合肥三四月份適合去哪裏玩
  • copyright 2024編程學習大全網