ARP与RARP协议ARP与RARP协议1、ARP原理与实例地址解析协议(AddressResolutionProtocol,ARP),通过遵循该协议,只要我们知道了某台机器的IP地址,即可以知道其物理地址。在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在物理链路上传送,必须知道对方目的主机的物理地址。这样就存在把IP地址变换成物理地址的地址转换问题。以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。这就需要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00:11:22:33:44:55”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。2、ARP分组格式以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。两个字节长的以太网帧类型表示后面数据的类型。arp请求或应答字段的值为0x0806;rarp请求或应答字段的值为0x8035。硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示ip地址。它的值与包含ip数据报的以太网数据帧中的类型字段的值相同。硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上ip地址的arp请求或应答来说,它们的值分别为6和4。操作字段指出四种操作类型,它们是arp请求(值为1)、arp应答(值为2)、rarp请求(值为3)和rarp应答(值为4)。这个字段必需的,因为arp请求和arp应答的帧类型字段值是相同的。接下来的四个字段是发送端的硬件地址(以太网地址)、发送端的协议地址(ip地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和arp请求数据帧中都有发送端的硬件地址。对于一个arp请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的arp请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。ARP协议的数据结构:typedefstructarphdr{unsignedshortarp_hrd;/*硬件类型*/unsignedshortarp_pro;/*协议类型*/unsignedchararp_hln;/*硬件地址长度*/unsignedchararp_pln;/*协议地址长度*/unsignedshortarp_op;/*ARP操作类型*/unsignedchararp_sha[6];/*发送者的硬件地址*/unsignedlongarp_spa;/*发送者的协议地址*/unsignedchararp_tha[6];/*目标的硬件地址*/unsignedlongarp_tpa;/*目标的协议地址*/}ARPHDR,*PARPHDR;3、ARP高速缓存每个主机上都有一个arp高速缓存,这个高速缓存存放了最近IP地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,而对不完整的表项设置超时值为3分钟。(windowsxp、linux一般为20分钟,windows7未知),起始时间从被创建时开始算起。Arp–a显示高速缓存中的所有条目Arp–d删除调整缓存中的所有或单一条目Arp–s可以手动在ARP表中指定IP地址与MAC地址的对应,类型为static(静态),此项存在硬盘中,而不是缓存表,计算机重新启动后仍然存在,且遵循静态优于动态的原则,所以这个设置不对,可能导致无法上网。4、对不存在主机的ARP请求如果查询的主机已关机或不存在会发生什么情况呢?为此我们指定一个并不存在的Internet地址—根据网络号和子网号所对应的网络确实存在,但是并不存在所指定的主机号。这里,我们用主机号36来举例。令人感兴趣的是看到多次进行ARP请求:第1次请求发生后5.5秒进行第2次请求,在24秒之后又进行第3次请求(在第21章我们将看到TCP的超时和重发算法的细节)。tcpdump命令输出的超时限制为29.5秒。但是,在telnet命令使用前后分别用date命令检查时间,可以发现Telnet客户端的连接请求似乎在大约75秒后才放弃。事实上,我们在后面将看到,大多数的BSD实现把完成TCP连接请求的时间限制设置为75秒。当我们看到建立连接的TCP报文段序列时,会发现ARP请求对应于TCP试图发送的初始TCPSYN(同步)段。注意,在线路上始终看不到TCP的报文段。我们能看到的是ARP请求。直到ARP回答返回时,TCP报文段才可以被发送,因为硬件地址到这时才可能知道。如果我们用过滤模式运行tcpdump命令,只查看TCP数据,那么将没有任何输出。5、ARP代理proxyARP就是通过使用一个主机(通常为router),来作为指定的设备对另一设备的ARP请求作出应答。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。如A设备连接了两个以太网,B和C各处于不同以太网的同网段里,当B要经过A设备访问C时,B发现C与自己处于同一个IP段里,于是发现ARP请求广播帧:IP地址为C的MAC号是多少,当A设备收到这个帧时(这里默认开户ARP代理),直接把本设备接口上的MAC应答给B(C也做同样的处理),A设备以一个中间人的身份把两个不同以太网的主机虚拟在一个网络中。思科路由器默认开启接口接收和应答proxyARP,修改命令如下:(在接口模式下)Router(config-if)#noipproxy-arp//关闭ARP代理Router(config-if)#ipproxy-arp//开启ARP代理6、免费ARP免费ARP(gratuitousARP):ARP的另一个特性,它是指主机发送ARP查找自己的IP地址。通常它发生在系统引导期间进行接口配置的时候。例如:请求主机的MAC为:00:11:22:33:44:55,IP为:192.168.0.168,请求主机发送以太网广播,请求192.168.0.168的MAC地址。它有两个方面的作用:1、“请求主机”可以通过它来确定另一个主机是否设置了相同的ip地址。“请求主机”并不希望对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息“以太网地址:a:b:c:d:e:f发送来重复的ip地址”。这样就可以警告系统管理员,某个系统有不正确的设置。2、如果发送免费arp的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。一个比较著名的arp协议事实是,如果主机收到某个ip地址的arp请求,而且它已经在接收者的高速缓存中,那么就要用arp请求中的发送端硬件地址(如以太网地址)对高速缓存中相应的内容进行更新。主机接收到任何arp请求都要完成这个操作(arp请求是在网上广播的,因此每次发送arp请求时网络上的所有主机都要这样做)。通过发送含有备份硬件地址和故障服务器的ip地址的免费arp请求,使得备份文件服务器可以顺利地接替故障服务器进行工作。这使得所有目的地为故障服务器的报文都被送到备份服务器那里,客户程序不用关心原来的服务器是否出了故障。7、ARP攻击原理ARP在正常情况下的通讯模式应该是:请求-应答-请求-应答,也就是应该一问一答。常见的ARP攻击为两种类型:ARP扫描和ARP欺骗。ARP扫描(ARP请求风暴)请求-请求-请求-请求-请求-请求-应答-请求-请求-请求...网络中出现大量ARP请求广播包,几乎都是对网段内的所有主机进行扫描。大量的ARP请求广播可能会占用网络带宽资源;ARP扫描一般为ARP攻击的前奏。出现原因(可能):1、病毒程序,侦听程序,扫描程序。2、如果网络分析软件部署正确,可能是我们只镜像了交换机上的部分端口,所以大量ARP请求是来自与非镜像口连接的其它主机发出的。3、如果部署不正确,这些ARP请求广播包是来自和交换机相连的其它主机。ARP欺骗ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。所以在网络中,有人发送一个自己伪造的ARP应答,网络可能就会出现问题。这可能就是协议设计者当初没考虑到的!假设一个网络环境中,网内有三台主机,分别为主机A、B、C。主机详细信息如下描述:A的地址为:IP:192.168.10.1MAC:AA-AA-AA-AA-AA-AAB的地址为:IP:192.168.10.2MAC:BB-BB-BB-BB-BB-BBC的地址为:IP:192.168.10.3MAC:CC-CC-CC-CC-CC-CC正常情况下A和C之间进行通讯,但是此时B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.10.3(C的IP地址),MAC地址是BB-BB-BB-BB-BB-BB(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存(A被欺骗了),这时B就伪装成C了。同时,B同样向C发送一个ARP应答,应答包中发送方IP地址四192.168.10.1(A的IP地址),MAC地址是BB-BB-BB-BB-BB-BB(A的MAC地址本来应该是AA-AA-AA-AA-AA-AA),当C收到B伪造的ARP应答,也会更新本地ARP缓存(C也被欺骗了),这时B就伪装成了A。这样主机A和C都被主机B欺骗,A和C之间通讯的数据都经过了B。主机B完全可以知道他们之间说的什么:)。这就是典型的ARP欺骗过程。类似于ARP代理过程。注意:一般情况下,ARP欺骗的某一方应该是网关。ARP欺骗存在两种情况:一种是欺骗主机作为“中间人”,被欺骗主机的数据都经过它中转一次,这样欺骗主机可以窃取到被它欺骗的主机之间的通讯数据;另一种让被欺骗主机直接断网。第一种:窃取数据(嗅探)应答-应答-应答-应答-应答-请求-应答-应答-请求-应答...这种情况就属于我们上面所说的典型的ARP欺骗,欺骗主机向被欺骗主机发送大量伪造的ARP应答包进行欺骗,当通讯双方被欺骗成功后,自己作为了一个“中间人“的身份。此时被欺骗的主机双方还能正常通讯,只不过在通讯过程中被欺骗者“窃听”了。出现原因(可能):1、木马病毒2、嗅探3、人为欺骗第二种:导致断网应答-应答-应答-应答-应答-应答-请求…这类情