一 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攻击入门的更多相关文章

  1. 浅析ARP协议及ARP攻击

    一. ARP数据包结构 (1)硬件类型:指明发送方想知道的硬件接口类型,以太网的值为1:(2)协议类型:指明发送方提供的高层协议类型:它的值为 0x0800 即表示 IP地址.(3)硬件地址长度和协议 ...

  2. ARP协议(4)ARP编程

    之前的几篇文章,分别介绍了 ARP 协议格式,在vs2012里配置winpcap环境,我们该做的准备都已经做完了.如今我们真正来实现了. 一.定义数据结构 依据ARP的协议格式,设计一个ARP协议格式 ...

  3. ARP协议(3)ARP编程--winpcap&vs2012配置

    好.之前说了那么多.最终到了,我们能够操刀的时候了. 在对ARP协议编程前.我们必需要能控制网络适配器(网卡).这个部分就是驱动! "我们要编写网卡驱动?",对,可是,至少我们现阶 ...

  4. ARP协议格式、ARP运行机制入门学习

    相关学习资料 http://baike.baidu.com/view/149421.htm?fromtitle=ARP%E5%8D%8F%E8%AE%AE&fromid=1742212& ...

  5. 描述ARP协议的工作原理,怎么实施ARP攻击和防御ARP攻击

    什么是ARP协议?ARP,即地址解析协议,实现通过IP地址得知其物理地址.在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址.为了让报文在 ...

  6. 网络层协议、ARP攻击

    一.IP数据包格式 二.ICMP协议介绍 PING命令 三.ARP协议介绍 四.ARP攻击原理 一.IP数据包格式 网络层的功能 定义了基于IP协议的逻辑地址 连接不同的媒介类型 选择数据通过网络的最 ...

  7. ARP协议分析(Wireshark)

    一.说明 1.1 背景说明 以前学网络用的谢希仁的<计算机网络原理>,一是网开始学不太懂网络二是ARP协议是没有数据包格式的(如果没记错应该是没有).学完只记得老师说:ARP很简单的,就是 ...

  8. 关于ARP协议

    什么是arp协议: arp协议是地址解析协议,英文是address resolution protocol 通过IP地址可以获得mac地址 两个主机的通信归根到底是MAC地址之间的通信 在TCP/IP ...

  9. ARP协议(1)什么是ARP协议

    这是最近在看<TCP/IP具体解释>系列书总结出来的,之后会陆续把其它协议部分分享出来. 我尽量以简单易读.易懂的方式呈现出来,可是,因为文笔和水平有限.有些地方或许存在描写叙述上的不足或 ...

随机推荐

  1. OpenGL Shader Key Points (1)

    1.  Shader起步 1.1.  可编程管线 仅考虑Vertex shader和fragment shader: 1.2.  Shader Object 在编译阶段生成,把shader源代码编译成 ...

  2. Unity Editor 编写unity插件类

    在unity写了一个编辑类,基于iTweenpath插件,为了更方便的操作iTweenpath,顺便练习UnityEditor的操作,写了一个CreateiTweenPath,放在Editor文件夹中 ...

  3. Aho-Corasick算法学习

    1.概述 Aho-Corasick自动机算法(简称AC自动机)1975年产生于贝尔实验室.该算法应用有限自动机巧妙地将字符比较转化为了状态转移.此算法有两个特点,一个是扫描文本时完全不需要回溯,另一个 ...

  4. How tomcat works 读书笔记十七 启动tomcat 下

    在上一节中,我们程序的起始位置还是Bootstrap,现在我们通过bat文件来启动这个类. 在分析catalina.bat之前,我们先看看几个简单的我们能用到的dos命令. 基础知识 1 rem 注释 ...

  5. 实战项目开发细节:C语言分离一个16进制数取出相应的位1或0

    最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题. 其中,甄别好坏的方法是通过比如按键,或者其它的操作然 ...

  6. 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, ...

  7. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  8. 转载 jQueryEasyUI Messager基本使用

    http://www.cnblogs.com/libingql/archive/2011/07/17/2109020.html 一.jQueryEasyUI下载地址 http://www.jeasyu ...

  9. python抽象类+抽象方法实现接口(interface)

    #python没有类似于java和C#的接口类(interface),需要使用抽象类 和抽象方法来实现接口功能 #!/usr/bin/env python#_*_ coding:utf-8 _*_ f ...

  10. Centos 7安装python3

    纯傻瓜式步骤,保证成功. 下面的操作,按照步骤来就可以了,不要在中途cd 到别的文件目录下,要想查看效果可以用 lsj加上对应的目录,不需要切换进去. 首先不管你当前在哪个目录下,输入以下命令. [r ...