ARP工作过程、ARP欺骗的原理和现象、如何防范ARP欺骗
地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确定其物理地址的一种协议。
下面假设在一个局域网内,主机A要向主机B发送IP数据报。
ARP协议工作过程
- A先在其ARP高速缓存中查看有无B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。如果查不到B的IP的项目,则进入第(2)步。
- A的ARP进程在本局域网上广播发送一个ARP请求分组,主要内容是A自己的IP地址、MAC地址,询问的IP地址(也就是B的IP地址)。
- 在本局域网上的所有主机运行的ARP进程都收到此ARP请求分组。
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向A单播发送ARP响应分组(其中写入了B自己的硬件地址),同时将A的地址映射写入自己的ARP高速缓存中。由于其余的所有主机IP地址都与ARP请求分组要查询的IP地址不一致,因此都不理睬这个ARP请求分组。
- A收到B的ARP响应分组后,就在其ARP高速缓存中写入B的IP地址到硬件地址的映射。
至此,A得到了从B的IP地址到其MAC地址的映射。当这个映射项目在高速缓存中保存超过生存时间,将被从高速缓存中删除。
ARP欺骗的原理与现象
ARP欺骗的核心思想就是向目标主机发送伪造的 应 ARP答,并使目标主机接收应答中伪造的IP地址与MAC地址之间的映射对,以此更新目标主机ARP缓存。下面就在理论上说明实施ARP欺骗的过程(见图 : 1) S代表源主机,也就是将要被欺骗的目标主机; D代表目的主机,源主机本来是向它发送数据; A代表攻击者,进行ARP欺骗。

当S想要向D发送数据时,假设目前他的ARP缓存中没有关于D的记录,那么他首先在局域网中广播包含D的IP地址的ARP请求。但此时A具有与D相同的IP地址,于是分别来自A与D的ARP响应报文将相继到达S。如果A控制自己的ARP响应晚于D的ARP响应到达S, S就会将如下伪造映射:
D的IP地址 → A的MAC地址
保存在自己的ARP缓存中。在这个记录过期之前,凡是S 发送给D的数据实际上都将发送给A。 而S却毫不察觉。或者A在上述过程中,利用其它方法直接抑制来自D的ARP应答将是一个更有效的方法而不用依赖于不同操作系统的处理机制。进一步, A可不依赖于上述过程,直接在底层伪造ARP响应报文来达到同样的目的。
从影响网络连接通畅的方式来看,ARP欺骗分为二种,一种是对路由器ARP表的欺骗;另一种是对内网PC的网关欺骗。
一般来说,ARP欺骗攻击的后果非常严重,大多数情况下会造成大面积掉线;如果是被中间人攻击,截取Internet与这个目标主机的之间的全部通信,则会导致信息泄露,在主机看来访问外部服务的响应变慢;或者对于服务器而言,上层应用忙于处理这种异常而无法响应外来请求。
ARP欺骗的防范
1.主机级被动检测
当系统接收到来自局域网上的ARP请求时,系统检查该请求发送端的IP地址是否与自己的IP地址相同。如果相同,则说明该网络上另有一台机器与自己具有相同的IP地址。
2.主机级主动检测
主机定期向所在局域网发送查询自己IP地址的ARP请求报文。如果能够收到另一ARP响应报文,则说明该网络上另
有一台机器与自己具有相同的IP地址。
3.服务器级检测
当服务器收到ARP响应时,为了证实它的真实性,根据反向地址解析协议(RARP)就用从响应报文中给出的 地 MAC
址再生成一个RARP请求,它询问这样一个问题:“如果你是这个MAC地址的拥有者,请回答你的IP地址”。这样就会查询到这个MAC地址对应的IP地址,比较这两个IP地址,如果不同,则说明对方伪造了ARP响应报文。
4.网络级检测
配置主机定期向中心管理主机报告其ARP缓存的内容。这样中心管理主机上的程序就会查找出两台主机报告信息的不一致,以及同一台主机前后报告内容的变化。这些情况反映了潜在的安全问题。或者利用网络嗅探工具连续监测网络内主机硬件地址与IP地址对应关系的变化。
ARP工作过程、ARP欺骗的原理和现象、如何防范ARP欺骗的更多相关文章
- 网络通信协议七之ARP工作过程及工作原理解析
ARP(地址解析协议) 局域网: ARP地址解析协议用于将计算机的网络IP地址转化为物理MAC地址,ARP协议的基本功能就是通过目标设备的IP地址.查询目标设备的MAC地址,以保证通信的顺利进行.在每 ...
- 图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)
一.代理ARP概述 我:当电脑要访问互联网上的服务器,目标MAC是什么? 很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛! 这时我会反问:那电脑怎么拿到这个服务器的MAC地 ...
- ARP欺骗的原理
转载请注明来源:https://www.cnblogs.com/hookjc/ 从<ARP协议工作原理>一文我们已经了解到,主机在两种情况下会保存.更新本机的ARP缓存表, 1. 接 ...
- 中间人攻击——ARP欺骗的原理、实战及防御
1.1 什么是网关 首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门. 1.2 A ...
- 认清楚服务器的真正身份--深入ARP工作原理
我们知道IP地址是ISP分配给我们的,IP不能作为服务器的唯一的身份,那么服务器真正的身份是什么呢?MAC IP地址直接的通信在底层要转换到MAC直接的通信,那他们如何通信的呢? 1.简介 出场人物: ...
- 网管必须必须知道的知识!ARP攻击与欺骗的原理!
ARP攻击与ARP欺骗原理及应用 1.ARP概述以及攻击原理 2.ARP欺骗原理 3.ARP故障处理 1.什么是ARP协议?将一个已知的IP地址解析成MAC地址.无论是ARP攻击还是ARP欺骗,它们都 ...
- ARP攻击的发现、攻击原理、攻击方式、防护,竟然这么简单?!
ARP协议概述 ARP协议(address resolution protocol)地址解析协议. 一台主机和另一台主机通信,要知道目标的IP地址,但是在局域网中传输数据的网卡却不能直接识别IP地址, ...
- Wireshark - 观察 ARP 地址解析过程
下面使用 Wireshark 分析 ARP 的工作过程.试验的机器:发送者机器(IP 地址:10.21.28.47,MAC 地址:68:f7:28:0f:32:2e)下文称为 HOSTA:目标机器(I ...
- 通信原理之IP协议,ARP协议 (三)
把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...
随机推荐
- GRUB2 命令行使用笔记
在GRUB界面按C可进入命令行模式,学会命令行模式有助于玩转单机多OS. 磁盘描述规则: hd0,0 表示第1硬盘第1分区 help 显示帮助(内容会比这里全,此处只做几条常用命令介绍) cat 命令 ...
- C语言:传值,传地址
形参:形式参数实参:实际参数 传值: 把实参的值复制给形参, 修改函数内的形参,不会影响实参. 传地址: 指针传值,形参为指向实参地址的指针 当对形参的指向操作时,相当于对实参本身进行的操作 #inc ...
- Linux RPS/RFS 实现原理浅析
本文快速解析一下RPS/RFS的基本原理. RPS-Receive Packet Steering 下面这个就是RPS的原理: 其实就是一个软件对CPU负载重分发的机制.其使能的作用点在CPU开始处 ...
- 《Linux 性能及调优指南》2.4 基准工具
翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...
- es6(15)--generator
//generator处理异步,下一步用next,遇到return或者yied就会停止 { //generator基本定义 let tell=function* (){ yield 'a'; yiel ...
- android 开发 RecyclerView 横排列列表布局
1.写一个一竖的自定义布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- 判断B是不是A的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解答: class Solution: def HasSubtree(self, pRo ...
- c++官方文档-copy constructor
#include <iostream> using namespace std; class Example5 { string* ptr; public: Example5(const ...
- flex学习笔记-日历选择与显示
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- javascript自定义简单map对象功能
这里介绍一种js创建简单map对象的方法: function Map() { //创建object对象, 并给object对象添加key和value属性 var obj1=new Object(); ...