ARP协议与ARP攻击入门
一 ARP协议
ARP协议是一个年代相当“久远”的网络协议。ARP协议制定于1982年11月,英文全称:Address Resolution Protocol,即“地址解析协议”。
我们知道,虽然终端设备想要上网必须具有公有IP地址,但是在Internet的TCP/IP协议中,IP地址的作用是标识一台主机或路由器与一条链路的接口,也就是说IP地址指明了数据由一个网络传输到另一个网络的路径,但是我们知道,为了节约IP地址,通常情况下,在一个内部网络中,主机常常使用RFC规定的三种私有IP地址作为局域网中主机的IP地址,而且主机的IP地址是由该网络的路由器动态分配的,如果数据的传输仅仅依赖于IP地址,那么当数据到达一个内部网络中时就可能因为目标主机的IP地址发生改变而将数据传输到了错误的目标主机。但是不同设备的物理地址(MAC)是全网唯一的,而且一般也不会被改变(MAC地址是写入网卡的,固定的),因此使用MAC地址作为信息的标识,定位目标网络设备就可以保证信息能够正确抵达目标主机。而通过目标设备的IP地址查找目标设备的MAC地址就是ARP协议的基本功能。
ARP协议的工作过程
由于内部网络中主机的IP地址往往是动态分配的,因此,在主机中是有ARP缓存的,记录着本网络中IP地址与MAC地址的对应关系。那么,这个ARP缓存是怎么生成的呢?首先,当网络中的主机A需要向主机B发送信息时,会将包含目标IP地址的ARP请求广播到该网络中的所有主机上,网络中的其他主机在收到主机A的ARP请求后可以自主的发送ARP应答报文,应答中包含自己的IP和自己的MAC地址,主机B也会发送这样的应答报文给主机A。这样主机A就知道了主机B的MAC地址与IP地址了。
ARP协议的工作是建立在网络中各个主机之间相互信任的基础上的,一台主机在收到其他主机的ARP应答报文时并不会采取措施校验该报文的真实性,而是直接就记录到了自己的ARP缓存中以备下次使用。
二 ARP攻击
ARP攻击的第一步就是ARP欺骗。由上述“ARP协议的工作过程”我们知道,ARP协议基本没有对网络的安全性做任何思考,当时人们考虑的重点是如何保证网络通信能够正确和快速的完成——ARP协议工作的前提是默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。不过后来,人们发现ARP应答中的IP地址和MAC地址中的信息是可以伪造的,并不一定是自己的真实IP地址和MAC地址,由此,ARP欺骗就产生了。
ARP欺骗
ARP的应答报文是可以伪造的。假设一个网络中有3台主机,分别为A、B和C。当主机A向网络中发送了ARP请求时,用于攻击的主机C可以假装是B,然后向主机A发送一个伪造的ARP应答报文,由于A并不会采取措施验证该报文真伪,而是直接存入自己的ARP缓存并在需要时使用(ARP缓存分两种,一种是静态ARP缓存,该类缓存只要主机不关机就一直存在。另一类是动态ARP缓存,该类缓存是有时效限制的,一般ARP动态缓存的最长生命周期是10分钟,如果一个动态缓存项目在2分钟内没有被使用,则删除,如果在两分钟内被使用了,则增加两分钟的生命周期,直到达到10分钟的最长生命周期后进行更新),由此,C就成功的欺骗了A。那么来自主机B的正确的应答报文去哪了?如果A收到了来自B的正确的应答报文,更新了自己的ARP缓存,那么C的ARP欺骗不就失败了吗?确实会发生这种情况,但是如果C不断的向网络中的各台主机大量发送伪造的ARP应答报文,直到同时欺骗了A和B,C就成功的对主机A和B进行了ARP欺骗。接下来C就可以监听A和B之间的流量,伪造A和B的通信内容或者阻止A和B的通信。
为什么ARP攻击只能发生在局域网
当我们在说“ARP攻击”时,我们还常常和另外一个词连系在一起:“局域网”。为什么ARP攻击只能发生在局域网呢?或者说为什么ARP协议只能在局域网内发挥作用?这和互联网通信的原理以及ARP协议的功能有关。简单的说,我们可以这样理解:
我们知道,IP地址位于OSI模型的第三层(网络层),MAC地址位于OSI模型的第二层(数据链路层)。而路由器工作在三层或者三层以上。由此看来,用于连接IP地址与MAC地址的ARP协议是不能跨越第三层的(ARP工作在网络层),因此ARP广播包也不可能通过路由器到达其他网络。
上面的这个解释很好理解,但是并不是很严密的解释,也没有触及到问题的核心。如果要完全解释“为什么ARP攻击只能发生在局域网内部?”这个问题,我们就必须更深入的理解TCP/IP协议和路由器的工作原理。
在TCP/IP协议中,数据的传输有三种方式:单播、组播和广播。单播就是一对一的通信,组播(也称多播)是一对多的通信(如视频直播)。单播和组播都是可以跨越物理网络进行通信的,也就是进行通信的主机之间可以不在一个子网内部。但是,广播就有一些特别了,由于广播域的存在(一般一个局域网就是一个广播域),所以路由器在收到广播数据时是会拒绝向其它网络转发的,路由器实际上起到了分离广播域,隔离广播数据的作用。
ARP攻击之所以能够产生,就是因为伪造了对ARP广播的应答,综合上述分析可知,如果用于攻击的主机并不在目标网络中,就接收不到目标网络中ARP请求的广播,其伪造的ARP应答也无法到达目标网络。因此,ARP攻击只能发生在局域网(子网)内部。正因如此,我们只能对目标主机IP地址网络号部分以及子网掩码与我们的攻击机器IP地址网络号部分和子网掩码相同的主机发动ARP攻击。
end
更多内容请访问我的个人网站荒原之梦
ARP协议与ARP攻击入门的更多相关文章
- 浅析ARP协议及ARP攻击
一. ARP数据包结构 (1)硬件类型:指明发送方想知道的硬件接口类型,以太网的值为1:(2)协议类型:指明发送方提供的高层协议类型:它的值为 0x0800 即表示 IP地址.(3)硬件地址长度和协议 ...
- ARP协议(4)ARP编程
之前的几篇文章,分别介绍了 ARP 协议格式,在vs2012里配置winpcap环境,我们该做的准备都已经做完了.如今我们真正来实现了. 一.定义数据结构 依据ARP的协议格式,设计一个ARP协议格式 ...
- ARP协议(3)ARP编程--winpcap&vs2012配置
好.之前说了那么多.最终到了,我们能够操刀的时候了. 在对ARP协议编程前.我们必需要能控制网络适配器(网卡).这个部分就是驱动! "我们要编写网卡驱动?",对,可是,至少我们现阶 ...
- ARP协议格式、ARP运行机制入门学习
相关学习资料 http://baike.baidu.com/view/149421.htm?fromtitle=ARP%E5%8D%8F%E8%AE%AE&fromid=1742212& ...
- 描述ARP协议的工作原理,怎么实施ARP攻击和防御ARP攻击
什么是ARP协议?ARP,即地址解析协议,实现通过IP地址得知其物理地址.在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址.为了让报文在 ...
- 网络层协议、ARP攻击
一.IP数据包格式 二.ICMP协议介绍 PING命令 三.ARP协议介绍 四.ARP攻击原理 一.IP数据包格式 网络层的功能 定义了基于IP协议的逻辑地址 连接不同的媒介类型 选择数据通过网络的最 ...
- ARP协议分析(Wireshark)
一.说明 1.1 背景说明 以前学网络用的谢希仁的<计算机网络原理>,一是网开始学不太懂网络二是ARP协议是没有数据包格式的(如果没记错应该是没有).学完只记得老师说:ARP很简单的,就是 ...
- 关于ARP协议
什么是arp协议: arp协议是地址解析协议,英文是address resolution protocol 通过IP地址可以获得mac地址 两个主机的通信归根到底是MAC地址之间的通信 在TCP/IP ...
- ARP协议(1)什么是ARP协议
这是最近在看<TCP/IP具体解释>系列书总结出来的,之后会陆续把其它协议部分分享出来. 我尽量以简单易读.易懂的方式呈现出来,可是,因为文笔和水平有限.有些地方或许存在描写叙述上的不足或 ...
随机推荐
- OpenGL Shader Key Points (1)
1. Shader起步 1.1. 可编程管线 仅考虑Vertex shader和fragment shader: 1.2. Shader Object 在编译阶段生成,把shader源代码编译成 ...
- Unity Editor 编写unity插件类
在unity写了一个编辑类,基于iTweenpath插件,为了更方便的操作iTweenpath,顺便练习UnityEditor的操作,写了一个CreateiTweenPath,放在Editor文件夹中 ...
- Aho-Corasick算法学习
1.概述 Aho-Corasick自动机算法(简称AC自动机)1975年产生于贝尔实验室.该算法应用有限自动机巧妙地将字符比较转化为了状态转移.此算法有两个特点,一个是扫描文本时完全不需要回溯,另一个 ...
- How tomcat works 读书笔记十七 启动tomcat 下
在上一节中,我们程序的起始位置还是Bootstrap,现在我们通过bat文件来启动这个类. 在分析catalina.bat之前,我们先看看几个简单的我们能用到的dos命令. 基础知识 1 rem 注释 ...
- 实战项目开发细节:C语言分离一个16进制数取出相应的位1或0
最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题. 其中,甄别好坏的方法是通过比如按键,或者其它的操作然 ...
- LeetCode(46)-Remove Nth Node From End of List
题目: Given a linked list, remove the nth node from the end of list and return its head. For example, ...
- Spring Kafka和Spring Boot整合实现消息发送与消费简单案例
本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...
- 转载 jQueryEasyUI Messager基本使用
http://www.cnblogs.com/libingql/archive/2011/07/17/2109020.html 一.jQueryEasyUI下载地址 http://www.jeasyu ...
- python抽象类+抽象方法实现接口(interface)
#python没有类似于java和C#的接口类(interface),需要使用抽象类 和抽象方法来实现接口功能 #!/usr/bin/env python#_*_ coding:utf-8 _*_ f ...
- Centos 7安装python3
纯傻瓜式步骤,保证成功. 下面的操作,按照步骤来就可以了,不要在中途cd 到别的文件目录下,要想查看效果可以用 lsj加上对应的目录,不需要切换进去. 首先不管你当前在哪个目录下,输入以下命令. [r ...