ARP欺骗原理详细介绍
? ? ? ? 一臺主機A如果要向目標主機B發送數據,無論主機B在本網段還是在遠程網絡,這些需要發出去的數據包中需要四樣必不可少的地址,那就是源IP地址和源MAC地址,以及目標IP地址和目標MAC地址,當主機B在封裝數據包時,自己的IP地址和MAC地址可以正確地,輕易地封裝進去,目標IP自己也知道,可以封裝進去,可是,關鍵就在目標MAC該如何得來,由于主機A曾經和主機B發生過通信,曾經通過ARP得到過目標主機的MAC地址,那么它就會把主機B的IP地址和MAC對應地記錄下來,放在緩存表中,以備下一次再使用,但要說明的是,因為考慮到主機B有更換網卡的可能,所以無論何時當主機A再次收到關于主機B的MAC地址更新信息,它都將刷新自己的ARP緩存表,將新收到的MAC地址和主機B的IP地址對應起來,正因為主機A在任何時候收到ARP數據包,都將再次更新ARP緩存,所以導致了另外一個令人頭疼的事情發生:
? ? ? ??如果現在一臺不懷好意的主機C想要竊取網絡中的數據或者其它目的,那么這時它就可能向A發送一個ARP數據包,數據包中聲稱主機B的MAC地址已經改變,當主機A收到后,得知此消息,就立刻更新原來主機B的MAC地址,當它要和主機B進行通信時,就會在數據包中封裝新的MAC地址,如果這個MAC地址是前面主機C的,那么主機A就會把本來要發給主機B的數據錯誤地發給了主機C,被主機C竊取成功,而主機C為了掩人耳目,“看”過數據后,再發給主機B,從而不影響主機A和主機B之間的正常通信,但如果前面主機C發給主機A的ARP更新包中的MAC地址不是自己的,而是偽造的根本不存在的MAC地址,那么這時主機A和主機B之間就不可能再正常通信了,這就是ARP病毒對PC主機在網絡間通信造成的嚴重威脅和后果,造成數據被竊聽或網絡不通的慘局!
? ? ? ??雖然局域網之間通信是主機與主機之間直接通信,但是,如果要與外網的主機通信,這時,還需要用到網關或路由器(很多情況下一個局域網的路由器就直接充當網關的角色),當局域網內的某臺主機A想要與外網的主機通信,那么這時,它在對數據包進行封裝時,目標MAC地址需要寫成網關的MAC地址,再交由網關代為轉發,發到網外去,如果這臺主機A在使用ARP數據包請求網關的MAC地址時,出現一臺不懷好意的主機向主機A回應了一個ARP回應報,數據包中就將這臺病毒主機或者根本不存在的MAC地址告訴主機A,那么這時,主機A發給遠程網絡的數據由于經過不懷好意的主機“中轉”了一下,造成數據被竊聽,或因為錯誤的目標MAC,而最終沒有網關給數據進行轉發,導致與外網不能能正常通信,這就是ARP病毒不僅能夠從主機下手來影響局域網內的通信,也能影響局域網與外網的通信,既然ARP病毒可以從主機的下手影響局域網與外網通信,那么它同樣又可以從網關和路由器下手來影響網絡間的通信,(多數時候路由器直接充當網關),那么ARP病毒是在什么時候來讓路由器或網關的ARP緩存產生混亂的呢?那么請先回想一下,局域網內的主機向外網發送數據時,要通過ARP來得到網關或路由器的MAC,就有可能遭到ARP欺騙,然后,當網關或路由器收到來自外網的數據包要發到本地網絡時,那么它同樣要把這些數據包的目標MAC地址改寫成最終接收PC主機的MAC地址,它首先是查自己的ARP緩存表,如果存在它需要的條目,就直接封裝進數據發出去,如果緩存表里沒有該怎么辦呢?不錯,還是使用老方法,用ARP廣播來請求目標的MAC地址,所以這時又會出現什么情況呢,那就是遭到不懷好意的主機發來的錯誤的ARP回應,讓網關路由器在數據包中封裝了錯誤的目標MAC地址,從而造成數據包沒有能夠正確到達目的地,從而達到這臺不懷好意的主機竊取數據和影響網絡通信的目的,因為路由器隨時收到主機發來的ARP更新包,都會再次把新的MAC和原來的IP地址對應起來,寫入緩存表。到這里為止,可以得知,ARP病毒可以通過回應錯誤的ARP數據包來讓主機和路由器的ARP錯誤,也可以通過隨時發送錯誤的ARP更新包來讓主機和路由器的ARP緩存錯誤,這些錯誤導致網絡的數據被竊聽和丟失,都是針對主機和路由器下手的,那么有人應該會問,交換機會不會因為ARP病毒而產生錯誤呢?那么我可以鄭重地告訴大家,ARP病毒所產生的錯誤與交換機無任何關系,也對交換機不能造成任何后果,理由如下:
? ? ? ??無論交換機在收到主機或者路由器發過來的數據時,都有責任對這些數據進行轉發,當它從某個端口收到數據包后,讀取數據包中的源MAC地址,從而就得到了此端口和MAC地址的映射表,當它在映射表中還找不到目標MAC地址來確定應該將數據發向哪個端口時,它就會在除源端口之外的其它所有端口進行泛洪(類似廣播),這時,因為是泛洪,所以真正的目標主機能夠收到這些數據包,也因為交換機在轉發數據包的時候,即使ARP緩存表是空的,它也不需要發ARP廣播來請求MAC地址,所以也根本不存在ARP欺騙,如果下面繼續有其它端口的數據要轉發,交換機再使用上面同樣的方法,來學習到每個端口對應的MAC地址,就是因為通過這樣向其它端口泛洪來學習到端口和MAC地址的映射表,所以交換機從來沒有收到過任何關于MAC地址到IP地址的ARP數據包,況且交換機也從來不讀取數據包中的IP地址,在這里可以為交換機總結出:1,交換機任何時候都不關心IP地址,因為交換機是二層設備,(三層交換機除外,三層交換機就當路由器來對待了)。2,交換機中的ARP緩存是端口號到MAC地址的映射,與IP地址無關。3,交換機中的ARP緩存表是通過在轉發數據包時讀取源端口和源MAC時記錄下來的,而不是通過ARP廣播去詢問的。4當交換機的緩存表不能反應出目標MAC和端口的映射時,就會向除源端口外的每個端口發一份(泛洪),以保證真正的目標主機能夠收到數據。5因為ARP緩存中找不到端口號和MAC地址的映射時,就會泛洪,所以人工地綁定端口和MAC地址只是解決泛洪,讓交換機不要因為找不到目標MAC地址而向每個端口都復制數據,這種方法與解決ARP欺騙沒有任何關系!
? ? ? ??請仔細理解交換機的工作原理:交換機是根據自己的ARP緩存表來提供數據轉發的,ARP緩存中記錄著端口號對應的MAC地址,當收到數據需要轉發時,先讀取數據中的源MAC地址,再看來自哪個端口,然后記錄下來寫入ARP緩存表,最后交換機查找ARP緩存表以確定該把數據發向哪個端口,如果ARP緩存中沒有找到答應,那么這時交換機便決定把數據向除了向源端口之外其它所有端口都復制一份,這樣便可以萬無一失地把數據送到目的地,除非根本沒有這個目的地,所以交換機的ARP緩存表是通過讀取需要轉發的數據的源MAC和源端口來學習到的,不是通過ARP詢問來更新的!
總結
以上是生活随笔為你收集整理的ARP欺骗原理详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3+requests:get
- 下一篇: C/C++unlink函数的使用