當前位置:編程學習大全網 - 源碼下載 - 密封網關源代碼

密封網關源代碼

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。要執行這個命令:ping 192.168.438+0.2。此命令通過ICMP協議發送互聯網控制消息協議。這個過程需要經歷以下幾個步驟:

1.應用程序構造壹個數據包,在本例中,生成壹個ICMP包並提交給內核(網絡驅動);

2.內核檢查IP地址是否可以轉換成MAC地址,即檢查本地ARP緩存中的IP-MAC對應表;

3.如果存在IP-MAC對應關系,跳到步驟9;如果IP-MAC對應關系不存在,則繼續以下步驟;

4.內核廣播ARP,目的MAC地址為FF-FF-FF-FF-FF,ARP命令類型為REQUEST(1),包含自己的MAC地址;

5.192.168.1.2主機收到ARP請求時,發送ARP應答(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。當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回復地址。當A收到這個回復,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-FE的ARP請求。對於網卡來說,這不是壹個廣播地址(FF-FF-FF-FF-FF-FF-FF),所以正常模式下的節點會直接丟棄這個包,但是大多數操作系統內核都認為這是壹個廣播地址。如果有壹個通用的嗅探器程序,網卡設置為混雜模式,那麽系統核心會做出響應,這樣就可以判斷這些節點中是否有嗅探器。

可見,很多基於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地址存儲在路由器中。

可惜問題越來越復雜,光知道分析儀連接到哪個網絡是不夠的。當壹個局域網被分成幾個部分時,首先要找到空閑的集線器端口或同軸電纜的抽頭。然而,在網絡交換環境中,不僅僅是將分析儀連接到交換設備的空閑端口。

大多數交換設備都能夠將特定端口指定為分路器或鏡像端口,但是不同的交換設備制造商使用的術語會有所不同。如果來自或發往特定端口的所有通信也可以發送到圖像端口,那麽只要分析儀連接到圖像端口,所有設置都將完成。

但問題是壹些交換設備無法將兩個端口之間的通信發送到鏡像端口。例如,在雙工環境中,作為受監控連接壹部分的兩臺主機可以同時發送信息,交換機也可以接收每幀數據並將其傳輸到鏈路中的另壹個端口。但是對於圖像端口,必須緩沖某個數據幀。如果以這種方式處理太多幀,緩沖區將溢出,數據幀將丟失,因此跟蹤將變得不可靠。更糟糕的是,我甚至不知道我在跟蹤壹條不可靠的線索。

壹些交換設備支持內部分析器的功能,這種交換機本身可以捕獲傳輸到被跟蹤對象的數據幀。該功能組件的可靠性取決於開關的緩沖容量。在某些情況下,我們必須選擇圖像端口或內部分析器。但只要有可能,最好將其中壹臺主機和分析儀連接到集線器,並將集線器掛在交換機上。

妳為什麽這麽做?這是因為,即使您確定交換機有足夠的容量來緩存所有數據幀,以便鏡像端口或內部分析器不會丟失數據,跟蹤仍然是不可靠的。例如,在標準以太網中,每當交換機向服務器發送數據幀時,位於交換機故障端口的RJ45連接器就會創建壹個交互式會話。交換機將此解釋為沖突並停止工作。16次嘗試後,數據幀會被取消,但數據幀仍然發送到鏡像端口,所以追蹤器找到數據幀,顯示服務器響應失敗。在另壹種情況下,不合標準的布線導致1%的數據幀破壞。如果是第壹種情況(數據幀可以傳輸到任何地方)分析儀掛在有主機的Hub上,或者第二種情況(網絡中數據幀損壞)分析儀掛在有主機的Hub上,接收交換機的端口會在數據幀發送到圖像端口之前將其取消,跟蹤器沒有錯誤指示。當然,每換壹種方式,都要冒壹定的風險去修正可能出現的意想不到的問題。如果RJ45連接器故障僅僅是因為它沒有固定在交換機端口,那麽如果連接器再次插入集線器,故障可能就不存在了,至少問題解決了。

另外,需要記住的是,對於交換設備來說,其網段內的每個端口都是有效的,所以當連接到服務器的交換端口沒有發現問題時,應該將集線器(或分析器)移到主機或路由器的交換端口。

此外,註意不要將集線器懸掛在雙工環境中。壹些分析儀可以在雙工模式下工作。這些分析儀有兩個以太網端口和壹個功能模塊。功能模塊將通信對分成兩部分,並將其發送到每個以太網端口,然後軟件將從每個以太網端口接收的數據組合到單個跟蹤鏈中。如果網絡是雙工環境,則需要此分析器。

錯誤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%,以了解是什麽導致觸發關閉。

當然,觸發器只有在觸發事件時才會關閉。過去使用了特殊的觸發器,它可以測試狀態,然後發送壹個數據包,該數據包可以被分析器用作觸發器。測試狀態可以是日誌文件中的錯誤消息,也可以是上述示例中無法創建連接的情況。壹般整個程序都是100多行或者稍微長壹點。

錯誤5

日期/時間設置不正確。

沒有在分析器上正確設置日期/時間似乎是壹件小事,在許多情況下可能是真的。但是,在處理廣域網中的問題時,有時會同時運行兩個分析器,網絡兩端各有壹個,因此正確設置日期/時間非常有用。

如果兩臺分析儀的時鐘設置相同,將更容易調整跟蹤。假設在壹個例子中,通過尋找常見幀,對比時間,會發現其中壹個用了4小時37分鐘,比另壹個早了15.795438+0秒。如果時鐘設置的同步誤差是1到2秒,那麽時間間隙的計算就會容易很多。

此外,如果您需要用主機中的事件來調整跟蹤,設置相同的日期/時間是絕對有意義的,因為基於時間包的同步不是可選的。

錯誤6不理解協議

很多分析儀都有“專家分析”的功能,也就是說可以跟蹤信息,比如序列號、時間信息、顯示重傳信息、凍結窗口、無應答狀態等等。這種分析非常有用,但也可能會產生誤導,尤其是當分析器沒有正確報告錯誤時。

例如,存在無法從遠程位置建立遠程登錄會話的情況,但是從本地工作站建立遠程登錄會話沒有問題。於是站點操作員在遠程登錄服務器所在的局域網上掛了壹個分析儀,跟蹤器顯示從遠程主機到遠程登錄服務器的數據幀沒有報錯;所以他們得出結論,操作系統有問題。

另壹名操作員檢查了跟蹤器,發現本地遠程登錄會話連接到端口2323,而遠程會話連接到端口23。此外,遠程登錄服務器響應遠程連接請求的數據包包含RST標誌設置。

在這裏,網站運營商沒有仔細查看TCP的細節,所以他們沒有意識到不同端口號和RST數據包的重要性。他們依賴分析儀的診斷信息。由於沒有安裝遠程登錄服務器的端口23,他們猜測操作系統有問題。但是,如果站點工作人員了解TCP和遠程登錄,他們會立即發現問題,並在5分鐘內找到好的解決方案。

事實上,他們等了半天才安裝跟蹤器,結果他們在遠程網絡上失去了相當數量的客戶。

  • 上一篇:yum是什麽意思
  • 下一篇:經典C語言編程30例(壹)
  • copyright 2024編程學習大全網