Arc协议
前⾔:ARP协议的作⽤:
1. 什么是ARP?
ARP (Address Resolution Protocol) 是个地址解析协议。最直⽩的说法是:在IP以太⽹中,当⼀个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。
2为什么要有ARP?
OSI 模式把⽹络⼯作分为七层,彼此不直接打交道,只通过接⼝(layre interface). IP地址在第三层, MAC地址在第⼆层。
协议在发⽣数据包时,⾸先要封装第三层(IP地址)和第⼆层(MAC地址)的报头, 但协议只知道⽬的节点的IP地址,不知道其物理地址,⼜不能跨第⼆、三层,所以得⽤ARP的服务。
详细说明:
Ø 在⽹络通讯时,源主机的应⽤程序知道⽬的主机的IP地址和端⼝号,却不知道⽬的主机的硬件地址,⽽
数据包⾸先是被⽹卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得⽬的主机的硬件地址。ARP协议就起到这个作⽤
Ø 当⼀台主机把以太⽹数据帧发送到位于同⼀局域⽹上的另⼀台主机时,是根据 48位的以太⽹地址来确定⽬的接⼝的,设备驱动程序从不检查 IP数据报中的⽬的IP地址。ARP(地址解析)模块的功能为这两种不同的地址形式提供映射:32位的 IP地址和 48位的以太⽹地址⼀.ARP报⽂各字段含义:
ARP报⽂字段总共有28个字节
1.硬件类型:占2个字节,表明ARP实现在何种类型的⽹络上。
Ø 值为1:表⽰以太⽹。
2.协议类型:占2个字节表⽰要映射的协议地址类型。
Ø IP:0800
3.硬件地址长度:占1个字节,表⽰ MAC地址长度,其值为6个字节。
4.协议地址长度:占1个字节,表⽰IP地址长度,此处值4个字节
5.操作类型:占2个字节,表⽰ARP数据包类型。
Ø 值为1表⽰ARP请求。
Ø 值2表⽰ARP应答。
6.源MAC地址:占6个字节,表⽰发送端MAC地址
7.源IP地址:占4个字节,表⽰发送端IP地址
8.⽬的以太⽹地址:占6个字节,表⽰⽬标设备的MAC物理地址
9.⽬的IP地址:占4个字节,表⽰⽬标设备的IP地址.
注意:在ARP操作中,有效数据的长度为28个字节,不⾜以太⽹的最⼩长度46字节长度,需要填充字节,填充字节最⼩长度为18个字节⼆.ARP请求分组或应答分组
以太⽹⾸部总共有14字节数据,arp请求报⽂总共有28字节。所以⼀个ARP请求分组或应答分组总共有46字节数据。
⽽以太⽹数据包的最⼩数据为60字节。所以,要对其进⾏填充。
这⾥有⼀些重复信息
1. 在以太⽹的数据帧报头中和ARP请求数据帧中都有发送端的MAC物理地址。
2. 在发送ARP请求时,以太⽹帧头中的⽬的MAC物理地址为FF-FF-FF-FF-FF-FF,⽽在ARP帧中的⽬的MAC处此时为空。
3. 对⼀个ARP请求来说,除ARP中⽬的端MAC硬件地址外的所有其他的字段都有填充值。当系统收到⼀份⽬的端为本地的ARP请求报⽂后,它就把硬件地址填进去,然后⽤两个⽬的端地址分别替换两个发送端地址,并把操作字段置为2,最后发送出去。
三.ARP协议⼯作过程:
1. 原理:(ARP协议只使⽤于局域⽹中)
1> 在局域⽹中,⽹络中实际传输的是“帧”,帧⾥⾯是有⽬标主机的MAC地址的。
2> 在以太⽹中,⼀个主机要和另⼀个主机进⾏直接通信,必须要知道⽬标主机的MAC地址。但这个⽬标MAC地址是如何获得呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将⽬标IP地址转换成⽬标MAC地址的过程。
3> ARP协议的基本功能就是通过⽬标设备的IP地址,查询⽬标设备的MAC地址,以保证通信的顺利进⾏。
4> 点对点的连接是不需要ARP协议的
2. ⼯作过程:
1> 当主机A向本局域⽹上的某个主机B发送IP数据报时,就先在⾃⼰的ARP缓冲表中查看有⽆主机B的IP地址。
2> 如果有,就可以查出其对应的硬件地址,再将此硬件地址写⼊MAC帧,然后通过以太⽹将数据包发送到⽬的主机中。
3> 如果查不到主机B的IP地址的表项。可能是主机B才⼊⽹,也可能是主机A刚刚加电。其⾼速缓冲表还是空的。在这中情况下,主机A就⾃动运⾏ARP。
(1)ARP进程在本局域⽹上⼴播⼀个ARP请求分组。ARP请求分组的主要内容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址为192.168.0.4的主机的硬件地址。
(2)在本局域⽹上的所有主机上运⾏的ARP进⾏都收到此ARP请求分组。
(3)主机B在ARP请求分组中见到⾃⼰的IP地址,就向主机A发送ARP响应分组,并写⼊⾃⼰的硬件地址。其余的所有主机都不理睬这个ARP 请求分组。ARP响应分组的主要内容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,请注意:虽然ARP请求分组是⼴播发送的,但ARP响应分组是普通的单播,即从⼀个源地址发送到⼀个⽬的地址。
(4)主机A收到主机B的ARP响应分组后,就在其ARP⾼速缓冲表中写⼊主机B的IP地址到硬件地址的映射。
3. 事例说明:⽤ping说明ARP⼯作的原理
假设我们的计算机IP地址是192.168.1.1,要执⾏这个命令:ping192.168.1.2。该命令会通过ICMP协议发送ICMP(以太⽹控制报⽂协议)数据包
该过程需要经过下⾯的步骤:
1> 应⽤程序构造数据包,该⽰例是产⽣ICMP包,被提交给内核(⽹络驱动程序);
2> 内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;
3> 如果存在该IP-MAC对应关系,那么跳到步骤<7;
如果不存在该IP-MAC对应关系,那么接续下⾯的步骤;
4> 内核进⾏ARP⼴播,⽬的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令类型为REQUEST(1),其中包含有⾃⼰的MAC地址;
5> 当192.168.1.2主机接收到该ARP请求后,就发送⼀个ARP的REPLY(2)命令,其中包含⾃⼰的MAC地址;
6> 本地获得192.168.1.2主机的IP-MAC地址对应关系,并保存到ARP缓存中;
7> 内核将把IP转化为MAC地址,然后封装在以太⽹头结构中,再把数据发送出去;
4. 特殊情况:
ARP是解决同⼀个局域⽹上的主机或路由器的IP地址和硬件地址的映射问题。如果所要的⽬标设备和源主机不在同⼀个局域⽹上。
1>此时主机A就⽆法解析出主机B的硬件地址(实际上主机A也不需要知道远程主机B的硬件地址);
2>此时主机A需要的是将路由器R1的IP地址解析出来,然后将该IP数据报发送给路由器R1.
3>R1从路由表中出下⼀跳路由器R2,同时使⽤ARP解析出R2的硬件地址。于是IP数据报按照路由器R2的硬件地址转发到路由器R2。
4>路由器R2在转发这个IP数据报时⽤类似⽅法解析出⽬的主机B的硬件地址,使IP数据报最终交付给主机B.
说明:
Ø 如果你的数据包是发送到不同⽹段的⽬的地,那么就⼀定存在⼀条⽹关的IP-MAC地址对应的记录。
Ø 知道了ARP协议的作⽤,就能够很清楚地知道,数据包的向外传输很依靠ARP协议,当然,也就是依赖ARP缓存。要知道,ARP协议的所有操作都是内核⾃动完成的,同其他的应⽤程序没有任何关系。同时需要注意的是,ARP协议只使⽤于本⽹络。
四.ARP缓冲表和TTL
1. ARP缓冲表
1> ARP协议的本质是完成⽹络地址到物理地址的映射。从概念上将就是到⼀个映射⽅法f,使得“物理地址 = f(⽹络地址)“。物理地址有两种基本类型:以太⽹类型和令牌环⽹类型。⽹络地址特指IP地址,对
映射⽅法的要求就是⾼效。具体到以太⽹,它使⽤的是动态绑定转换的⽅法。⼀般是设置ARP⾼速缓存,通过学习,⽼化,更新,溢出处理ARP映射表来解决这些问题。
Ø 学习指ARP收到任何指向本结点IP地址的ARP/IP包,从中提取出地址对,当ARP缓冲表中⽆对应项时,由ARP接收部分添加;
Ø ⽼化指为每项设置寿命域,以便代谢掉陈旧的地址映射项;
Ø 更新指ARP提取到对时,⽤其更新缓存⾥已有的对应项;
Ø 溢出算法指当缓存慢时,采取何种⽅法替代旧有的地址对。
2> ARP缓存表由状态,寿命,IP地址,MAC地址4个字段组成。状态字段指⽰地址对是否有效;寿命字段⽤于⽼化操作,初始存⼊最⼤值,以后由OS时间函数调⽤,每秒减1,直⾄为0清除;IP地址和MAC地址字段保存⽹络地址和物理地址的映射。围绕ARP缓存表,完成了4种操作:学习,⽼化,更新,表满处理。
3> 当ARP被询问⼀个已只IP地址节点的MAC地址时,先在ARPcache 查看
l 若存在,就直接返回MAC地址,
l 若不存在,才发送ARP request向局域⽹查询。
4> 当主机A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因⽽主机B可能要向A发送ARP请求分组。
所以,为了减少⽹络上的通信量,主机A在发送其ARP请求分组时,就将⾃⼰的IP地址到硬件地址的写⼊主机B⾃⼰的ARP⾼速缓冲表中。这对主机B以后向A发送数据报时就更⽅便了。
Tiger 说明:
任何事物都有两⾯性,如果掌握的好它就是天使,如果掌握的不好它就是Satan,ARP中的缓冲表为计算机之间的通信效率和减少⽹络通信量之间作出了巨⼤的贡献,但是它同时为我们上⽹时留下了安全隐患;例如交换机嗅探(在下⾯会有介绍)
2. ARP中的TTL(即上⾯所说的寿命域)
ARP将保存在⾼速缓冲表中的每⼀个映射地址表项都设置了TTL(⽣存时间),只要TTL⼩于0的项⽬就从⾼速缓冲表中删除掉。
(ARP的超时值⼀般为20分钟,对不完整的表项设置为20分钟,⽽对不完整的表项设置为2分钟《不完整
的表项:即在以太⽹上对⼀个不存在的主机发出ARP请求》,当这些表项再次使⽤时,这些实现⼀般都把超时值重新设为20分钟。)
好处:主机A和B通信。A的ARP⾼速缓冲表⾥保存有B的物理地址。但B的⽹卡突然坏了,B⽴即就更换了⼀块,因此B的硬件地址就改变了。A还要和B继续通信。A在其ARP缓冲表中查到B原先的硬件地址,并使⽤该硬件地址向B发送数据帧。但B原先的硬件地址已经失效了。因此A⽆法到主机B。但是过了⼀段时间,A的ARP⾼速缓冲表中已经删除了B原先的硬件地址(因为它的⽣存时间到了),于是A重新光播发送ARP请求分组,⼜到了B。
五.ARP命令:
1. 使⽤arp-a命令就可以查看本地的ARP缓存内容,所以,执⾏⼀个本地的PING命令后,ARP缓存就会存在⼀个⽬的IP的记录了。
2. 使⽤arp –d来删除ARP⾼速缓存中的某⼀项内容
3. 使⽤arp –s来增加⾼速缓冲表中的内容,这个命令需要主机名和以太⽹地址。新增加的内容是永久性的,除⾮在命令⾏的末尾加上关键字temp。
arp –s 157.55.85.212 00-aa-aa-562-c6-09
增加⼀个静态的ARP表项。
4. arppub –s:使系统起着主机ARP代理功能。系统将回答与主机名对应的IP地址的ARP请求。
六ARP其他⽅⾯
1.交换⽹络的嗅探
1>1.ARP协议并不只在发送了ARP请求才接收ARP应答
当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进⾏更新,将应答中的IP和MAC地址存储在ARP缓存中。
因此,在上⾯的假设⽹络中,B向A发送⼀个⾃⼰伪造的ARP应答,⽽这个应答中的数据为发送⽅IP地址是192.168.10.3(C的IP地
址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这⾥被伪造了)。当A接收到B伪造的ARP 应答,就会更新本地的ARP缓存,将本地的IP-MAC对应表更换为接收到的数据格式,由于这⼀切都是A的系统内核⾃动完成的,A可不知道被伪造了。ARP欺骗的主要⽤途就是进⾏在交换⽹络中的嗅探。
2.IP地址冲突
1>如果⽹络中存在相同IP地址的主机时候,就会报告出IP地址冲突的警告。
2>如何产⽣?
Ø ⽐如某主机B规定IP地址为192.168.0.1,如果它处于开机状态,那么其他机器A更该IP地址为192.168.0.1就会造成IP地址冲突。
Ø 其原理是:主机A在连接⽹路(或更改IP地址)的时候就会向⽹络发送ARP包⼴播⾃⼰的IP地址,也就是free arp(免费ARP).如果⽹络中存在相同IP地址的主机B,那么B就会通过ARP来reply该地址,当A接收到这个reply后,A就会跳出IP地址冲突的警告,当然B也会有警告。因此⽤ARP欺骗可以来伪造这个ARPreply,从⽽使⽬标⼀直遭受IP地址冲突警告的困扰。怎么查自己的ip
3.阻⽌⽬标的数据包通过⽹关
1>⽐如在⼀个局域⽹内通过⽹管上⽹,那么连接外部的计算机上的ARP缓存中就存在⽹管IP-MAC对应记录
2>如果,该记录被更改,那么该计算机向外发送的数据包总是发送到了错误的⽹关硬件地址上,这样,该计算机就不能上⽹了。
3>这⾥也主要是通过ARP欺骗进⾏的。有两种⽅法达到这样的⽬的:
Ø 向⽬标发送伪造的ARP应答数据包,其中发送⽅的IP地址为⽹管的地址,⽽MAC地址则为⼀个伪造的地址。当⽬标接收到ARP包,那么就更新⾃⾝的ARP缓存。如果该欺骗⼀直持续下去,那么⽬标的⽹管缓存⼀直是⼀个被伪造的错误记录。不过,如果使⽤arp –a,就知道问题所在了。
Ø 第⼆种⽅法是欺骗⽹管。向⽹管发送伪造的ARP应答数据包,其中发送⽅的IP地址为⽬标的IP地址,⽽MAC地址则为⼀个伪造的地址。这样,⽹管上的⽬标ARP记录就是⼀个错误的,⽹管发送给⽬标的数据报都是使⽤了错误的MAC地址。这种情况下,⽬标能够发送数据到⽹管,却不能接收到⽹管的任何数据。同时,⽬标⾃⼰查看arp –a却看不出任何问题来。
4.通过检测混杂模式节点
1>在混杂模式中,⽹卡进⾏包过滤不同于普通模式。本来在普通模式下,只有本地地址的数据包或者⼴播(多播等)才会被⽹卡提交给系统核⼼,否则的话,这些数据包就直接被⽹卡抛弃。现在,混合模式让所有经过的数据包都传递给系统核⼼,然后被sniffer等程序利⽤。
2>通过特殊设计的ARP请求可以⽤来在⼀定程度上检测处于混杂模式的节点,⽐如对⽹络中的每个节点都发送MAC地址为FF-FF-FF-FF-FF-FE的ARP请求。对于⽹卡来说这不是⼀个⼴播地址(FF-FF-FF-FF-
FF-FF),所以处于普通模式的节点就会直接抛弃该数据包,但是多数核⼼都认为这是⼀个⼴播地址,如果有⼀般的sniffer程序存在,并设置⽹卡为混杂模式,那么系统核⼼就会作出应答,这样就可以判断这些节点是否存在嗅探器了。
3>可以查看,很多基于ARP的攻击都是通过ARP欺骗实现的。⾄于ARP欺骗的防范,还是尽可能使⽤静态的ARP。对于WIN,使⽤arp-s来进⾏静态ARP的设置。
当然,如果能够完全使⽤静态的IP+MAC对应,就更好了,因为静态的ARP缓存只是相对的。当然,可以有⼀些⽅法来实现ARP欺骗的检测。设置⼀个ARP的嗅探器,其中维护着⼀个本地⽹络的IP-MAC地址的静态对应表,查看所有经过的ARP数据,并检查其中的IP-MAC对应关系,如果捕获的IP-MAC对应关系和维护的静态对应关系对应不上,那么就表明是⼀个欺骗的ARP数据包了。
获取MAC的地址代码:
#!/bin/bash
2
3
4 i=1
5 count=0
6
7 while [ $i -le 254 ]
8 do
9 if [ $count -gt 20 ];then
10 count=0
11 sleep 2
12 fi
13 ping -cl "192.168.0.$i" &
14 let i++
15 let count++
16 done
17
~ ~ ~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论