数据来源

一、广播与广播域概述

1、广播与广播域

        广播:将广播地址做为目标地址的数据帧

        广播域:网络中能接收到同一个广播所有节点的集合(广播域越小越好,收到的垃圾广播越少,这样通信效率更高)

下图每个圈都是一个广播域,说明了交换机隔离不了广播域,路由器可以隔离广播域(物理隔离)

2、MAC地址广播

        广播地址为:FF-FF-FF-FF-FF-FF

3、IP地址广播

255.255.255.255

广播IP地址为IP地址网段的广播地址,如:192.168.1.255 /24

二、ARP协议概述

1、什么是ARP协议

Address Resolution Protocol,地址解析协议,是一个内网协议,工作在内网,跑不出当前局域网,会被路由器隔离

为啥ARP出不了当前的局域网?

因为无论是啥要出本网段都要经过路由器,而路由器是根据路由表转发数据,而ARP协议的报文并不能告诉自己要去哪里,只有IP协议的报文才能告诉路由器自己去哪里。

作用:将一个已知的IP地址解析成MAC地址

        原理:1)发送ARP广播请求

ARP报文内容:我的IP是:10.1.1.1 我的MAC地址是:AA

谁是10.1.1.3 ? 你的MAC地址:?

                   2)接收ARP单播应答

我是10.1.1.3  我的MAC地址:BB

 2、ARP把IP解析MAC地址的过程如下(两个步骤一问一答):

1)PC1发送数据给PC2,查看缓存没有PC2的MAC地址

2)PC1发送ARP请求消息(广播)

3)所有主机收到ARP请求消息

  • PC2回复APR应答(单播)
  • 其他主机丢弃

 4)PC1将PC2的MAC地址保存到缓存中(关机就会消失),发送数据

文字详细解析:

步骤一:ARP广播请求,内网广播(通过目标ip询问目标MAC地址)

     1)如:A与B两台PC通信,A的ip是10.1.1.1,B的ip是10.1.1.3,A向B发送一条消息“老铁,今天拉屎没呀”,然后A这台PC就要把消息“老铁,今天拉屎没呀”封装成数据帧(IT的最小传输数据的单位就是帧,也只有封装成数据帧消息才能发送出去)。

        帧结构图:

MAC子层(帧头)构成:目标MAC地址(6字节),源MAC地址(6字节),类型(2字节),总的大小=6+6+2 = 14 字节

        FCS(帧尾):提供了一种错误检测机制,用来验证帧在传输过程中的完整性(4个字节)

数据帧的封装过程:

  • 5层应用层的软件输入了数据:“老铁,今天拉屎没呀”
  • 4层传输层的防火墙封装TCP/UDP头
  • 3层网络层的路由器封装IP包头
  • 2层数据链路层的网卡封装帧头和帧尾

        2)到这2层封装帧头就会卡住了数据发不出去,因为帧头包括了源MAC地址和目标MAC地址,但是现在A不知道B的MAC地址(目标MAC地址),这时RP协议就站出来了,说这个问题我能解决,然后就会回到网络层(3层)的ARP协议上交给ARP协议处理。

ARP协议处理过程:ARP协议会生成一个独立的报文(全称:ARP请求解析报文,简称:ARP请求报文)。ARP请求报文的内容就两句话1. 我是的IP的10.1.1.1,MAC地址是某某某(表名自己身份)2. 谁是10.1.1.3(目标ip),你的MAC地址是__?___(让别人填空)

        3)ARP协议生成这两句话之后(请求报文)就会发送给2层数据链路层的网卡(A的网卡),网卡收到请求报文之后说你这是请求报文是吧,我要让所有人听到你的心声!

这时A的网卡就会给请求报文前面加帧头和帧尾帧头的源MAC地址就写自己的,目标MAC地址就写FF-FF-FF-FF-FF-FF(12个F),这时ARP请求报文就鸟枪换全地图炮变成了ARP请求广播报文(帧结构)

     4)然后网卡就会把这个帧(ARP请求广播报文)传给交换机,交换机就会读取帧头的目标MAC地址,发现目标MAC地址是12个F的(MAC广播地址),就会把帧向所有的端口(和交换机连接的接口)广播出去,所有端口的设备都能收到这个帧,除了目标ip地址与本机相同的才会做出响应,其他的设备都会丢弃这个帧(黑客除外)。

步骤二 :目标ARP单播应答(收到了询问,响应MAC地址)

        5)其他设备(pc)收到数据帧的大概反应帧传到数据链路层(2层)的网卡的时候首先查看帧头(MAC子层)的目标MAC地址,发现是12个F,然后再查看帧头类型字段发现不是0800(IP协议),而是0806(ARP协议),然后网卡就明白了这个帧是ARP请求广播报文,然后就解封装(把帧头和帧尾拿掉),送到网络层路由器(3层)的,这时ARP协议就会读取帧的内容,发现是找IP10.1.1.3的,就会进行比较我这台设备的IP是10.1.1.3?

不是,干掉

        是(那就是来到了B这台PC),ARP协议查看报文内容,发现这是A这台PC发送过来的报文,目的是询问我的MAC地址,然后B这台PC就把自己的MAC地址(如:CC)在请求报文上填上去,传给数据链路层(2层)的网卡,网卡又开始他的骚操作,封装数据加帧头和帧尾,组成数据帧。这里帧头的源MAC地址是B自己的MAC地址,目标MAC地址是A的(A的请求报文包含里自己的MAC和IP地址)

网卡处理完之后就把数据帧传给交换机,交换机查看帧头目标MAC地址是A这台PC的,就直接把数据转发过去,A收到了B的ARP单播应答之后就知道了目标MAC地址(B的MAC地址/应答的源MAC地址),然后就会把地址存储在ARP缓存内(在这之后向B发送请求,就不需要进行广播,而是读缓存),存储完成之后继续完成之前没发送出去的数据帧,数据帧就会给交换机,由交换机读取帧头的目标MAC地址把数据转发出去。

ARP把IP解析MAC地址的过程现实中都是自动完成的,了解即可

Windows 系统中的ARP命令

       arp -a          # 查看ARP缓存命令

       arp -d         # 清除ARP缓存命令(关机也会消失,开机就会自动学习)

      arp -s          # ARP绑定

让ARP开始工作便捷的方法就是直接使用命令:ping   目标地址

三、ARP攻击或欺骗

  • 欺骗其他所有的计算机
  • 欺骗被攻击计算机

原理:通过发送伪造虚假的ARP报文(广播或单播),来实现的攻击或欺骗。

 攻击的报文内的MAC地址是假的,目的是为了中断通信/断网。

 欺骗的报文内的MAC地址是攻击者自己的MAC地址,目的是为了监听、窃取、篡改、控制流量,但不中断通信

对于ARP广播发起请求这一方来说,ARP单播应答是谁后到就学习谁的,就是最后到达的才是最后能生效的,后到的ARP单播应答会不断更新掉前面到达的,所以就很容易被欺骗,我用软件随便编造一个目标MAC地址一直给他ARP单播应答,他就一直获取不到正确的地址,最后获取到的地址是我给他的,之后他的数据都会发给我的电脑,这就能实现数据监听。

攻击:

通过单播应答攻击: 

上面说的ARP把IP解析MAC地址的过程都是双方处于同一网段的情况下 ,如果我要访问外网比如www.baidu.com呢 ?

        1)PC还是会发起ARP广播发起请求,不过报文的内容有些变化:1. 我是的IP的10.1.1.1,MAC地址是某某某(表名自己身份)2. 谁是10.1.1.254(网关ip地址),你的MAC地址是__?___(让网关填空)

        2)网关收到ARP的广播请求后,把自己的MAC地址(如:BB)填到报文内,然后把这个请求报文(帧)给到交换机,交换机根据帧头的目标MAC地址单播应答转发给PC,之后PC就会把之前要发送的数据帧发送给网关,也就是路由器,PC连接外网必须通过路由器。

        3)如果这时有人使用ARP攻击,就是伪造虚假的ARP报文和虚假的MAC地址,给PC单播应答,这个虚假的帧内的目标MAC是ee,但真实网关是BB,这样以后pc的数据帧都到不了网关(路由器),都发给虚假的MAC地址ee了,这样PC就无法连接外网,就断网了(当然攻击者除外)。

通过广播报文攻击: 

攻击方的PC发起ARP广播发起请求,报文的内容有些变化:1. 我是的IP的10.1.1.254(伪造的),MAC地址SSS(表名自己身份)2. 谁是10.1.1.10(目标ip地址),你的MAC地址是__?___

这个时候在10.1.1.0这个网段的所有PC都会收到这个请求报文,虽然这些PC可能都不是10.1.1.254,甚至10.1.1.254可能都不存在,ip虽然匹配不上,PC不会做出响应,但是这些PC很贪婪,还是会把这个请求报文中的IP和MAC地址记录在缓存中,以后这些PC访问网关时,他们这10.1.1.0的网段的网关刚好是10.1.1.254,那他们以后发送给网关的请求都有可能发送到我伪造的MAC地址(SSS)上

欺骗:

ARP欺骗演示:

  • ARP欺骗主机(同一局域网成员 )

        1)PC1发起ARP广播发起请求,报文的内容有些变化:1. 我是的IP的10.1.1.2,MAC地址CC(表名自己身份)2. 谁是10.1.1.3(目标ip地址),你的MAC地址是__?___

        2)这里设:这个局域网中10.1.1.3这个IP就是李四用的电脑,但是这时张三站出来了,他把他的IP伪造成10.1.1.3,这一过程中李四的电脑可能也回应了,但是没有用,对于ARP广播发起请求这一方来说,ARP单播应答是谁后到就学习谁的,张三的电脑一直在伪造IP和MAC地址一直在单播应答。

        3)最后PC1启用的MAC地址大概率都是张三MAC地址,PC1就会把数据都发到张三的电脑上,张三这时就可以查看这些信息过滤出有价值或直接篡改数据(原来PC1可能就发个问候语,张三就改成问候祖宗的),然后再把数据转发给数据真正的主人李四(这个过程中原来报文内的MAC地址CC,已经被改成张三的伪造的MAC,交换机转发只认MAC地址),李四会回复消息给PC1也会发送到张三的电脑上,张三又可以过滤有价值的信息,再转发给PC1,在这过程中他们都是可以正常上网的,如果没学过这方面的知识的人是很难发现他们之间的通信多出个中间人,如下图:

详细示意图 

  • ARP欺骗网关

甚至张三直接截取PC1获取李四的上网数据,监听他们上网都在干啥。

        实现:
                在PC1和李四寻找谁是网关的时候,张三又站出来了张三把自己的IP伪造成网关,网关的MAC是他自己,张三窃取完数据(包括他们的游戏数据还是在看视频),再转发给真正的网关。(每次PC重启ARP缓存都会清空,PC要上网就会查缓存,没找到进行ARP广播,张三的机会就来了),如下图:

总结:

        看到这里会发现,ARP攻击和ARP欺骗原理都是一样的,都是通过发送虚假的ARP报文,但是报文内容不一样,

实战测试更新中。。。

四、ARP协议没有验证机制

只要收到ARP报文无论是真是假,都会学习,然后都会把报文中的MAC地址存储到ARP缓存内。ARP攻击者通过发送虚拟伪造的arp报文对受害者进行ARP缓存投毒

五、攻击实验

ARP攻击演示(要少用,比较容易被发现):

1)准备3台虚拟机

我这里用两台win3和一台winxp,默认张三、李四、王五的电脑,并配置局域网,张三的IP:10.1.1.2/24、李四的IP:10.1.1.1/24、王五的IP:10.1.1.3/24,让三个人处于同一网段,并保证他们相互之间可以互相通信(如果是现实中连接同一个wifi就可以了)。可以使用ping命令进行测试。

2)使用NetrobocopSetup扫描出网段的其他PC的相关信息

3)选择要管理主机右键 -- 手工管理

4)然后就能看到很多攻击方式

IP冲突:张三直接给李四这台电脑来个IP冲突,不主动停止就会一直发,李四的电脑就会显示IP冲突,这只是一个恶搞并不影响通信

原理:张三的电脑一直在发ARP广播给该局域网下的所有PC,内容大致就是我ip是10.1.1.1,mac地址是....,其他PC收到不会当回事,但是李四的电脑IP就是10.1.1.1,他就会疑惑我不就是10.1.1.1?这时电脑就会提示ip冲突

禁止与所有主机进行TCP/IP连接:李四的电脑就能与外界通信了(俗称:断网)

原理:李四的PC和外界通信的时候在知道目标IP的前提下还需要知道目标MAC地址,所以就会发送ARP广播请求目标MAC地址,但是张三的PC一直在伪造虚假的ARP报文和虚假的MAC地址,给李四PC单播应答,李四就只能使用张三伪造的虚假MAC地址,这一过程中真正的目标PC也有单播应答,不过没用,ARP协议的接收请求机制是后来到达会覆盖前面到达的请求,而张三一直在通过虚假的ARP请求攻击李四,最后自然是张三笑到最后,而李四用虚假的MAC地址去通信,当然就不可能成功。

先到李四的PC输入:

        arp -d   # 清空ARP缓存

        ping 10.1.1.3   # ping 一下王五的电脑,给ARP缓存添加记录

        arp -a  # 查看MAC地址表 

开始禁止李四与所有主机进行TCP/IP连接(断网)

arp缓存老化时间默认:120秒,如果断网了还可以通信那应该是缓存还在等一下,或手动清理arp -d

ARP欺骗(常用,不易被发现)

使用工具Cain

看到这安装页面就知道张三不是啥好人

 1)选择要要抓包的网卡(就是张三自己的网卡,别人的数据包经过张三就抓出来)

2)不过现在他们的数据还不会经过张三的PC,开始ARP欺骗

把这个局域网下的其他PC扫出来

下一批受害者就出现了,有请李四和王五

3)添加ARP欺骗列表

4)开始投毒

5)实验数据劫持

如:王五开启了telnet服务,让李四远程管理他的PC,张三劫持数据(telnet的连接是没有加密的,除非是用ssh连接会安全一点)

        王五开启telnet服务

        李四远程连接管理王五的PC

         命令:telnet 10.1.1.3(王五的IP)

然后输入账号密码,登录

        张三查看抓包记录

软件其他用法

六、ARP防御

我们的电脑默认情况下对ARP的攻击是没有防御能力的

防御方式:

1. 静态ARP绑定

手工绑定/双向绑定

        windows客户机上:

    arp -s  目标IP地址   目标MAC地址   # 绑定静态arp到缓存内

                arp -a   # 查看arp缓存表

缺点:如果公司规模比较大,工作量也会很大,而且arp缓存120s或电脑重启都会老化。

解决:默认老化的时间可以修改长点,命令写在批处理文件内放到启动目录下,公司有域的话会好点,通过域下发批处理命令,没有的话工作量还是很大。

2. ARP防火墙

1)自动绑定静态ARP:开了ARP防火墙之后客户机开启IP就会与网关进行自动绑定

2)主动防御:开了ARP防火墙之后客户机受到小黑子的虚拟ARP攻击,防火墙也会不断的发送ARP报文给网关自己就是自己。进行防御覆盖掉攻击的报文(防御报文的MAC地址是真实的,攻击的是虚拟的)

很多管家都有ARP防火墙的插件,如:腾讯、360 ,不过都是要自己下载安装的,默认是不开启。

缺点:是对网关负荷比较大,比较攻击越久,防御越久短时间内都发送了大量的报文,如果是家里或者公司规模比较小员工比较少的情况下,可以偶尔开启,毕竟开启ARP防火墙对网关也是一种负担。

3. 硬件机防御(企业级交换机)

带有ARP防御功能的企业级交换机支持端口(连接交换机的接口)做动态ARP绑定(要配合DHCP服务器)或做静态ARP绑定(思科、华为的交换机都有这种功能)

注意:DHCP服务器可以用一台PC来做,也可以用路由器来做DHCP服务器。

交换机动态ARP绑定原理:

1)比如:张三PC的MCA地址是AA,当插上网线的第一时间就会发送DHCP Discovery(发现)广播包(目的:寻求服务器),就会经过交换机端口转发给DHCP服务器,这时交换机就会记录下来了,与Fa0/1这个端口(叫接口也行)连接的PC的MAC地址是AA,如下图:

2)DHCP服务器收到Discovery广播包的请求之后,就会响应DHCP offer(提供)广播包(目的:提供IP地址)如:10.1.1.1,数据会由交换机转发给张三,一般的交换机不管关系服务器给PC发了什么内容(因为它只是一个二层的设备没能力管IP地址,那是三层以上设备的功能),但是企业级交换机就会读取offer 广播包,查看包中IP地址,然后记录下来挂在他端口Fa0/1上的张三要使用10.1.1.1作为他的IP地址,MAC地址是AA,记录完之后就会对端口Fa0/1做动态ARP绑定(内容大概就是这个Fa0/1端口现在就是给IP为10.1.1.1,MAC地址是AA的PC使用的),以后如果有其他PC也在交换机上连接了网线,流程大致也是这样,如下图:

3)全部连接完网线之后,他们相互之间就可以互相通信了,这是张三这个小黑子按耐不住自己那颗躁动的心了,发送了虚假的ARP报文想要投毒,报文的内容是我是10.1.1.2,MAC地址是BB,想搞李四,ARP报文就会发给交换机由交换机进行转发,但是交换机之前已经做了ARP动态绑定,所以就会检查ARP报文,发现张三的报文内容的IP和MAC地址和交换机自己端口动态绑定的IP和MAC地址不一致,小黑子漏出鸡脚了吧,这时交换机就会有两个选择(可能更多):一、直接把这个ARP报文丢弃,不转发,从根源上解决ARP攻击。二、直接把这个ARP报文丢弃,不转发,并禁用张三所在的端口(这样张三就物理断网了,他PC插的网线就是摆设)。这选择是配置交换机时就提前设置好的。

不过这个检测也有个小漏洞,如果张三提前知道这个局域网的网段提前配置好了IP就不会向DHCP发包,而且张三第一次发包就是ARP攻击包的化就能成功,不过以后就不行了,因为只要发过一次包交换机就会把包中信息提取记录下来,以后再伪造虚假的IP或MAC地址就会被检测处理。

交换机静态ARP绑定原理:把所有电脑的IP和MAC地址提取出来,然后分别手动绑定个固定的端口,不可移动(优点:很安全    缺点:工作量大),一般是银行、政府或一些对保密性要求比较高的机构,才会选择。

注意:做了静态ARP绑定之后,对应的端口就只会允许规定的PC通过。

开启交换机的监听DHCP功能

如思科和锐捷:

conf  t   # 进入全局配置模式

ip dhcp snooping    # 开始交换机监听DHCP功能,以后要是有arp报文就会开始工作

int range   f0/1 - 48  # 进入批量配置接口( f0/1 - 48)模式

switch(config-range-if)# 然后个所有的接口都开启监听arp报文的功能,命令看交换机使用手册

ARP协议详解:了解数据包转发与映射机制背后的原理相关推荐

  1. TCP/IP网络协议栈:ARP协议详解

    <TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...

  2. ARP协议详解之ARP动态与静态条目的生命周期

    ARP协议详解之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自动添加和删除. q  每个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉.所以,生 ...

  3. ARP协议详解之Gratuitous ARP(免费ARP)

    ARP协议详解之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP,无故ARP.Gratuitous ARP不同于一般 ...

  4. Web协议详解与抓包实战之HTTP1.1 学习笔记【一】

    Web协议详解与抓包实战之HTTP1.1[一] 前言 <Web协议详解与抓包实战>课程学习,陶辉老师主讲 学习内容: HTTP–TLS/SSL–TCP/IP自上而下根据应用学习web协议H ...

  5. 网络-ARP协议详解与ARP欺骗(中毒)攻击实战

    目录 简介 ARP报文 ARP流程 四种情况 ARP请求 ARP响应 ARP攻击原理 实战 ARP欺骗 环境 查看arp表 更新攻击机软件 使用ettercap进行攻击 查看劫持到的图片 ARP攻击防 ...

  6. tcpdump使用详解及数据包分析

    tcpdump使用与数据分析 语法 tcpdump(选项) 选项 -A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: ...

  7. TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记

    TCP/IP协议的体系结构: TCP/IP协议族四层模型和OSI七层模型 上层协议使用下层协议的服务,下层协议给上层协议提供一个接口. 四层模型中各个层次的作用和特点 上图说明: 最底层是数据链路层, ...

  8. 协议编码分析 - ARP协议详解

    一.            ARP协议简介 ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务.&l ...

  9. ARP协议详解(3)--arp欺骗

    不知道为什么今天翻看csdn草稿箱发现在大一下写过这个没有发出来,也不知道为什么,忘了 文章目录 实验环境 实践 讲了那么理论知识,现在让我们来实践一下吧 实验环境 kali(欺骗方)–192.168 ...

最新文章

  1. 【Smart_Point】C/C++ 中智能指针
  2. .NET Core 构建跨平台的桌面应用
  3. BZOJ 4407: 于神之怒加强版
  4. nginx官方模块之http_sub_status_module
  5. SpringBoot连接MQTT服务器时因ClintID重复导致频繁掉线重连
  6. 一文搞懂一致性hash的原理和实现
  7. native的Socket向Android的LocalSocketServer发送汉字乱码的问题
  8. oracle查询删除时间戳,Oracle查询时间戳,建表时间,新建序列,误删数据
  9. 为什么用自己的电脑部署服务器之后外网访问不到呢?并且该如何解决这个问题呢?...
  10. maven插件开发(二)
  11. 微积分的未来:DNA、非线性、混沌、复杂系统与人工智能
  12. UG二次开发GRIP标准件库
  13. 基于CATIA V5实现无图纸制造
  14. html 组合快捷键,ctrl常用组合键有哪些
  15. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8)
  16. Android音频混响特效的设置
  17. UOS 录制电脑播放的音频 / 内录音频
  18. 【吴恩达深度学习】——NLP和Word Embedding
  19. ENVI5.3.1Landsat 8影像基于单窗算法和辐射传输方程进行地表温度反演
  20. AD18.1.9和AD18.1.7的安装步骤

热门文章

  1. mediawiki 导入导出Excel文件
  2. Twenty-ninth
  3. 判断一个链表是否有环
  4. 接到电话面试邀请时要问哪些问题?
  5. VS2017 + Win10 下的 OpenCPN 5.0.0 编译过程小结
  6. 符号执行android,【技术分享】使用符号执行技术解决Android Crackme
  7. node.js调用.c文件_在Node.js中分派S3文件
  8. 关于C语言中的a++,++a,a--,--a;
  9. 数学中希腊字母发音以及常用符号公式读法
  10. 优雅的PHP采集框架QueryList