ARP協議,以及ARP欺騙

1.定義:

地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,并接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。地址解析協議是建立在網絡中各個主機互相信任的基礎上的,網絡上的主機可以自主發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發送偽ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用于查詢本機ARP緩存中IP地址和MAC地址的對應關系、添加或刪除靜態對應關系等。相關協議有RARP、代理ARP。NDP用于在IPv6中代替地址解析協議。

2.工作過程:

主機A的IP地址為192.168.1.1,MAC地址為0A-11-22-33-44-01;
主機B的IP地址為192.168.1.2,MAC地址為0A-11-22-33-44-02;
當主機A要與主機B通信時,地址解析協議可以將主機B的IP地址(192.168.1.2)解析成主機B的MAC地址,以下為工作流程:
第1步:根據主機A上的路由表內容,IP確定用于訪問主機B的轉發IP地址是192.168.1.2。然后A主機在自己的本地ARP緩存中檢查主機B的匹配MAC地址。
第2步:如果主機A在ARP緩存中沒有找到映射,它將詢問192.168.1.2的硬件地址,從而將ARP請求幀廣播到本地網絡上的所有主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網絡上的每臺主機都接收到ARP請求并且檢查是否與自己的IP地址匹配。如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。
第3步:主機B確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中。
第4步:主機B將包含其MAC地址的ARP回復消息直接發送回主機A。
第5步:當主機A收到從主機B發來的ARP回復消息時,會用主機B的IP和MAC地址映射更新ARP緩存。本機緩存是有生存期的,生存期結束后,將再次重復上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B發送IP通信了
3.工作要素:ARP緩存
查看ARP緩存
查看ARP緩存?[2]
ARP緩存是個用來儲存IP地址和MAC地址的緩沖區,其本質就是一個IP地址-->MAC地址的對應表,表中每一個條目分別記錄了網絡上其他主機的IP地址和對應的MAC地址。每一個以太網或令牌環網絡適配器都有自己單獨的表。當地址解析協議被詢問一個已知IP地址節點的MAC地址時,先在ARP緩存中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才發送ARP請求向局域網查詢。
為使廣播量最小,ARP維護IP地址到MAC地址映射的緩存以便將來使用。ARP緩存可以包含動態和靜態項目。動態項目隨時間推移自動添加和刪除。每個動態ARP緩存項的潛在生命周期是10分鐘。新加到緩存中的項目帶有時間戳,如果某個項目添加后2分鐘內沒有再使用,則此項目過期并從ARP緩存中刪除;如果某個項目已在使用,則又收到2分鐘的生命周期;如果某個項目始終在使用,則會另外收到2分鐘的生命周期,一直到10分鐘的最長生命周期。靜態項目一直保留在緩存中,直到重新啟動計算機為止
4.ARP命令
ARP命令
ARP緩存中包含一個或多個表,它們用于存儲IP地址及其經過解析的MAC地址。ARP命令用于查詢本機ARP緩存中IP地址-->MAC地址的對應關系、添加或刪除靜態對應關系等。如果在沒有參數的情況下使用,ARP命令將顯示幫助信息。
常見用法
arp -a或arp –g
用于查看緩存中的所有項目。-a和-g參數的結果是一樣的,多年來-g一直是UNIX平臺上用來顯示ARP緩存中所有項目的選項,而Windows用的是arp -a(-a可被視為all,即全部的意思),但它也可以接受比較傳統的-g選項。
arp -a Ip
如果有多個網卡,那么使用arp -a加上接口的IP地址,就可以只顯示與該接口相關的ARP緩存項目。
5.APR欺騙機制
ARP欺騙的運作原理是由攻擊者發送假的ARP數據包到網上上,尤其是送到網關上。其目的是要讓送至特定的IP地址的流量被錯誤送到攻擊者所取代的地方。因此攻擊者可將這些流量另行轉送到真正的網關(被動式數據包嗅探,passive sniffing)或是篡改后再轉送(中間人攻擊,man-in-the-middle attack)。攻擊者亦可將ARP數據包導到不存在的MAC地址以達到阻斷服務攻擊的效果,例如netcut軟件。
例如某一的IP地址是192.168.0.254,其MAC地址為00-11-22-33-44-55,網上上的計算機內ARP表會有這一筆ARP記錄。攻擊者發動攻擊時,會大量發出已將192.168.0.254的MAC地址篡改為00-55-44-33-22-11的ARP數據包。那么網上上的計算機若將此偽造的ARP寫入自身的ARP表后,計算機若要透過網上網關連到其他計算機時,數據包將被導到00-55-44-33-22-11這個MAC地址,因此攻擊者可從此MAC地址截收到數據包,可篡改后再送回真正的網關,或是什么也不做,讓網上無法連線。
簡單案例分析:這里用一個最簡單的案例來說明ARP欺騙的核心步驟。假設在一個LAN里,只有三臺主機A、B、C,且C是攻擊者。
  1. 攻擊者聆聽局域網上的MAC地址。它只要收到兩臺主機洪泛的ARP Request,就可以進行欺騙活動。
  2. 主機A、B都洪泛了ARP Request.攻擊者現在有了兩臺主機的IP、MAC地址,開始攻擊。
  3. 攻擊者發送一個ARP Reply給主機B,把此包protocol header里的sender IP設為A的IP地址,sender mac設為攻擊者自己的MAC地址。
  4. 主機B收到ARP Reply后,更新它的ARP表,把主機A的MAC地址(IP_A, MAC_A)改為(IP_A, MAC_C)。
  5. 當主機B要發送數據包給主機A時,它根據ARP表來封裝數據包的Link報頭,把目的MAC地址設為MAC_C,而非MAC_A。
  6. 當交換機收到B發送給A的數據包時,根據此包的目的MAC地址(MAC_C)而把數據包轉發給攻擊者C。
  7. 攻擊者收到數據包后,可以把它存起來后再發送給A,達到偷聽效果。攻擊者也可以篡改數據后才發送數據包給A,造成傷害。?[1]?

轉載于:https://www.cnblogs.com/yinlili/p/9887745.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250325.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css --- [小結]讓盒子水平垂直居中的解決方案

描述 有如下模型,想辦法讓 <style>.box{width: 500px;height: 500px;background: skyblue;} </style> <div class"box"><div class"inner"></div> </div>想辦法讓inner在box中水平垂直居中 方案1: 使用絕對定位 讓…

數組洗牌 Fisher Yates

看播放器代碼時發現的這個洗牌算法&#xff0c;再網上查了一番 作用是把數組變成隨機序列&#xff0c;原理類似于從牌堆A中隨機抽牌放進牌堆B 代碼1&#xff1a; 返回一個由&#xff08;數組下標&#xff09;組成的數組 function random(length) {function shuffle (arr) {for…

一個不錯的MYSQL數據庫備份類,PHP版,一個文件,精簡版

1 <?php2 class DbManage {3 var $db; // 數據庫連接4 var $database; // 所用數據庫5 var $sqldir; // 數據庫備份文件夾6 // 換行符7 private $ds "\n";8 // 存儲SQL的變量9 public $sqlContent "";10 // 每條sql…

javascript --- 堆棧內存與閉包的作用

你可能會用到的 堆內存: 存儲引用類型值所在的空間棧內存: 存儲基本類型值和存儲代碼所在空間函數上下文: JS每一個函數在執行的時候都會創建一個執行上下文 1. 堆內存中的數字和字符串都是相等的 let a {}, b0, c0; a[b] marron; a[c] Mar console.log(a[b]) // Mar第一…

python_sting字符串的方法及注釋

string類型是python內置的類型&#xff0c;無需安裝 方法/屬性說明 capitalize() 把字符串的第一個字符改為大寫 casefold() 把整個字符串的所有字符改為小寫 center(width) 將字符串居中&#xff0c;并使用空格填充至長度width的新字符串 count(sub[,start[,end]]) …

作業3

import turtle turtle.bgcolor(red) turtle.color(yellow)turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(100)turtle.right(144) turtle.end_fill() turtle.done()轉載于:https://www.cnblogs.com/zhangkef97/p/9016608.html

javascript --- [小練習]變量提升、優先級綜合

求下列函數輸出結果 function Foo() {getName function() {console.log(1)}return this } Foo.getName function() {console.log(2) } Foo.prototype.getName function() {console.log(3) } var getName function() {console.log(4) }function getName() {console.log(5) …

Confluence 6 自定義 Decorator 模板的宏和針對高級用戶

宏 頁面的某些部分使用的是 Velocity 宏進行創建的&#xff0c;包括導航欄。有關宏的創建&#xff0c;你可以參考頁面 Working With Decorator Macros 頁面中的內容。 針對高級用戶 velocity 目錄是 Confluence 首先進行模板搜索的查找路徑。你可以對 Confluence 的 velocity …

Matlab之rand(), randn(), randi()函數的使用方法

1. rand()函數用于生成取值在&#xff08;0~1&#xff09;之間均勻分布的偽隨機數。rand(n)&#xff1a;生成n*n的0~1之間的滿足均勻分布的偽隨機矩陣&#xff1b;rand(m,n)&#xff1a;生成m*n的偽隨機數&#xff1b;rand(m,n,double)&#xff1a;生成m*n的雙精度偽隨機數&am…

javascript --- [有趣的條件]雙等號的隱式調用和數據劫持

1 雙等號的隱式調用和數據劫持 求下面條件,在a為什么樣時,等號成立 if(a 1 && a 2 && a 3){console.log(等號成立) }1.1 雙等號的隱式轉換 首先得了解雙等號的隱式轉換規則 等式備注對象 字符串隱式調用 toString方法將對象轉換成字符串null undeifne…

分組查詢

1、簡單分組查詢 語法形式&#xff1a; select function() from table_name where condition group by field; 進行分組查詢時&#xff0c;分組所依據的字段上的值一定要有重復值&#xff0c;否則分組沒有任何意義。 2、實現統計功能分組查詢 關鍵字group by單獨使用時&#xf…

深入探討多模態模型和計算機視覺

近年來&#xff0c;機器學習領域在從圖像識別到自然語言處理的不同問題類型上取得了顯著進展。然而&#xff0c;這些模型中的大多數都對來自單一模態的數據進行操作&#xff0c;例如圖像、文本或語音。相比之下&#xff0c;現實世界的數據通常來自多種模態&#xff0c;例如圖像…

移動硬盤函數不正確要如何尋回資料

移動磁盤打不開函數不正確&#xff0c;是因為這個I盤的文件系統內部結構損壞導致的。要恢復里面的數據就必須要注意&#xff0c;這個盤不能格式化&#xff0c;否則數據會進一步損壞。具體的恢復方法看正文 工具/軟件&#xff1a;AuroraDataRecovery 步驟1&#xff1a;先百度搜索…

vue --- [全家桶]vue-router

1. Vue - router Vue Router是 Vue.js 官方的路由管理器它和Vue.js的核心深度集成,可以非常方便的用于SPA應用程序的開發 Vue Router包含的功能有: 支持HTML5歷史模式或hash模式支持嵌套路由支持路由參數支持編程式路由支持命名路由 <div id"app"><rout…

HashMap的四種訪問方式

第一種&#xff1a;通過Map.entrySet使用iterator遍歷key和value 1 public void visit_1(HashMap<String,Integer> hm){ 2 Iterator<Map.Entry<String,Integer>> it hm.entrySet().iterator(); 3 while(it.hasNext()){ 4 Map.Entry<String ,Integer> …

16.unix網絡編程一卷 unp.h

unix網絡編程 --ubuntu下建立編譯環境 1.安裝編譯器&#xff0c;安裝build-essential sudo apt-get install build-essential 2.下載本書的頭文件 下載unp13e&#xff1a; http://pix.cs.olemiss.edu/csci561/prg561.1.html 3.進入unp13e 查看readme&#xff0c;照下列提示操作…

webpack --- [讀書筆記] webpack中常用的一些配置項

1. Webpack 當前Web開發面臨的困境 文件依賴關系錯綜復雜靜態資源請求效率低模塊化支持不友好瀏覽器對高級JavaScript特性兼容程度低 1.1 webpack概述 webpack是一個流行的前端項目構建工具,可以解決當前web開發中所面臨的困境. webpack提供了友好的模塊化支持,以及代碼壓…

spring中bean的作用域屬性single與prototype的區別

https://blog.csdn.net/linwei_1029/article/details/18408363 轉載于:https://www.cnblogs.com/stanljj/p/9907444.html

windows程序設計.第一個windos程序

Windows程序設計&#xff08;第5版&#xff09; windows程序需要調用API。 第一個Windows程序 1 /*HelloMsg.c -- Displays "Hello World!" in a message box*/ 2 #include <Windows.h> 3 4 int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE…

java接口練習2

1、編寫2個接口&#xff1a;InterfaceA和InterfaceB&#xff1b;在接口InterfaceA中有個方法voidprintCapitalLetter()&#xff1b;在接口InterfaceB中有個方法void printLowercaseLetter()&#xff1b;然后寫一個類Print實現接口InterfaceA和InterfaceB&#xff0c;要求printC…