网络协议 -- ARP和RARP协议

一、ARP协议

1.1 ARP协议介绍

ARP(Address Resolution Protocol)地址解析协议,位于TCP/IP协议栈中的链路层。当局域网内主机间(或者是主机与网关间)需要通信时,通过使用ARP协议获取目标IP地址对应的硬件MAC地址,然后主机间通过该硬件MAC地址完成数据包发送和接收。
具体过程如下:

  1. 本地主机在局域网中广播ARP请求,ARP请求数据帧中包含目的主机的IP地址。意思是“如果你是这个IP地址的拥有者,请回答你的硬件MAC地址”。
  2. 目的主机的ARP层解析这份广播报文,识别出是询问其硬件地址。于是发送(单播)ARP应答包,里面包含IP地址及其对应的硬件地址。
  3. 本地主机收到ARP应答后,知道了目的地址的硬件地址,之后的数据报就可以传送了。

网络协议 -- ARP和RARP协议_第1张图片

1.2 ARP缓存

如果像上面说的那样,每次发包之前都要发送ARP请求硬件地址会不会太慢,但是实际上ARP的运行是非常高效的。那是因为每一个主机上都有一个ARP高速缓存,我们可以通过命令arp -a获取本机ARP高速缓存的所有内容:

λ arp -a

接口: 192.168.42.26 --- 0xb
  Internet 地址         物理地址              类型
  192.168.1.1           00-00-00-00-00-ff     静态
  192.168.40.1          f8-75-88-c2-df-c1     动态
  192.168.40.74         c8-5b-76-86-c6-06     动态
  192.168.40.245        38-d5-47-e1-8a-2f     动态
  192.168.42.131        60-a4-4c-65-9f-68     动态
  224.14.51.28          01-00-5e-0e-33-1c     静态
  224.19.133.150        01-00-5e-13-85-96     静态
  224.49.6.212          01-00-5e-31-06-d4     静态
  224.50.134.225        01-00-5e-32-86-e1     静态
  224.68.111.100        01-00-5e-44-6f-64     静态
  224.80.154.130        01-00-5e-50-9a-82     静态
  224.88.174.75         01-00-5e-58-ae-4b     静态

通过命令arp -d清除arp缓存内容。

1.3 ARP缓存生存周期

在默认情况下,Windows Server 2003家族和Windows XP中,ARP缓存中的表项仅存储2分钟。如果一个ARP缓存表项在2分钟内被用到,则其期限再延长2分钟,直到最大生命期限10分钟为止。超过10分钟的最大期限后,ARP缓存表项将被移出,并且通过另外一个ARP请求来获得新的对应关系。

ARP缓存表项的存放时间可以通过改变ArpCacheLifeArpCacheMinReferencedLife的注册表值来重新设置。

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters

键值:
ArpCacheLife,设置未被使用的ARP缓存表项可以被保持的时间,类型为Dword,单位为秒,默认值为120。
ArpCacheMinReferencedLife,设置被重复使用的表项可以在ARP缓存中存放的时间,类型为Dword,单位为秒,默认值为600。

ArpCacheMinReferencedLife和ArpCacheLife的值的使用方法如下:
如果ArpCacheLife >= ArpCacheMinReferencedLife,则被使用和未被使用的ARP缓存表项可存储的时间都是ArpCacheLife。
如果ArpCacheLife < ArpCacheMinReferencedLife,则未被使用的ARP缓存表项在ArpCacheLife秒的时间后就过期了,被使用的表项的生存期为ArpCacheMinReferencedLife秒。

注意:这些键值默认是不存在的,如果你想修改,必须自行创建;修改后重启计算机后生效

1.3 ARP帧格式

网络协议 -- ARP和RARP协议_第2张图片

以太网目的地址:目的主机的硬件地址。目的地址全为1的特殊地址是广播地址。
以太网源地址:源主机的硬件地址。
帧类型:对于ARP协议,该字段为0x0806。对于RARP协议,该字段为0x8035。

硬件类型:表示硬件地址的类型。值为1时表示以太网地址。ARP协议不仅仅应用于以太网协议,还可以支持别的链路层协议。
协议类型:表示要映射的协议地址类型。值为0x0800时表示IP协议。
硬件地址长度:与硬件类型对应的硬件地址的长度,以字节为单位。如果是以太网,则是6字节(MAC长度)。
协议地址长度:与协议类型对应的协议地址长度,以字节为单位。如果是IP协议,则是4字节(IP地址长度)。
操作类型(op):四种操作类型。ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。
发送端硬件地址:如果是以太网,则是源主机以太网地址,此处和以太网头中的源地址对应。
发送端协议地址:如果是IP协议,则表示源主机的IP地址。
目的端硬件地址:如果是以太网,则是目的以太网地址,和以太网头中的目的地址对应。
目的端协议地址:如果是IP协议,则表示源主机要请求硬件地址的IP地址。

对应ARP请求包来说,目的端的硬件地址字段无须填充,其他字段都需要填充。对于ARP回复包来说,所有字段都需要填充。

1.4 ARP欺骗

ARP欺骗一般目的是通过某种方式把自己伪装成网关,从而欺骗目标机器,使本应发送到真实网关的数据包发送到欺骗者的机器。

现有如下网络:
网络协议 -- ARP和RARP协议_第3张图片

1.4.1 如何伪装成网关?

我们以主机A请求www.csdn.net网站为例,涉及到ARP的主要流程如下:

  1. 主机A通过浏览器打开www.csdn.net(假设通过DNS得到的IP是47.95.163.175),然后组装需要发送http请求包。

  2. 主机A准备根据默认路由(网关)将数据包发送给192.168.0.1, 但是最开始的时候主机A不知道 192.168.0.1 的MAC地址, 所以主机A广播一条ARP请求, 询问 192.168.0.1 的 MAC地址。

  3. 路由器(网关)收到该 ARP 请求, 发现自己是 192.168.0.1 于是向主机 A 回复一条 ARP应答包, 告诉主机 A 192.168.0.1 的 MAC 地址是 xxxGW.

  4. 主机 A 收到该ARP响应包, 并向该响应包中的 MAC 地址发送一个Http请求包。

  5. 路由器(网关)收到该 Http请求包, 发现目标 IP 是公网 IP, 便将该包放送到公网, 公网返回Http应答包给路由器(网关)。

  6. 路由器(网关)准备将Http响应包发送给192.168.0.100, 但是同第2步, 路由器最开始的时候也不知道 192.168.0.100 的MAC地址是多少, 所以路由器会广播一条ARP请求, 询问 192.168.0.100 的MAC地址是多少。

  7. 主机A收到ARP请求, 发现自己是192.168.0.100, 于是向路由器回复一个ARP应答包, 告诉路由器192.168.0.100 的 MAC地址是 xxxA.

  8. 路由器(网关)收到ARP应答包, 并使用该APR应答包中的MAC地址将第5步收到Http响应包发送出去。

试想,如果现在主机B做了如下2件事情会有什么后果:

  1. 主机B不停的向主机A发送ARP应答包, 告诉路由器(网关)192.168.0.1 的MAC地址是 xxxB, 会发生什么?
  2. 主机B不停的向路由器(网关)发送 ARP应答包, 告诉主机A 192.168.0.100的MAC是 xxxB, 会发生什么?

如果主机B做了上面说的两件事的, 那么主机A访问网络的所有数据都会先经过主机 B, 并且从网关发送到主机A的数据也都会经过B, 至此, 整个ARP欺骗完成。

但是,如果欺骗者机器不对这些数据包作处理,当被欺骗数据包到达后就会被本机丢弃(因为自己到底不是网关,还不知道如何处理这类数据包),这当然是不允许的。这时开启IP转发功能可以解决该问题,IP转发负责把该类数据包再转发给真正的网关处理,开启IP转发的方法:

sysctl net.ipv4.ip_forward=1

1.4.2 arpspoof使用

在Ubuntu或Kali等系统上有arpspoof工具可以轻松实现ARP欺骗的整个流程。

arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host

参数:
-i 指定用攻击机的哪个网络接口,可以使用ifconfig命令查看攻击机接口列表。

-c own|host|both

-t 指定arp攻击的目标。如果不指定,则目标为该局域网内的所有机器。可以指定多个目标,如:
arpspoof -i etho -t 192.168.32.100 -t 192.168.32.101

-r host 
希望拦截攻击机和哪个host之间的通信,一般都是网关。

二、RARP协议

RARP协议(Reverse Address Resolution Protocol),反向地址转换协议,也叫逆地址解析协议,主要被那些没有磁盘驱动器的系统使用,如无盘工作站等。

具有本地磁盘的系统引导时,一般是从磁盘中的配置文件读取IP地址。但是无盘机,如无盘工作站,则需要采用其他方法获取ip地址。
网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家配置的。无盘系统的RARP实现过程是从网卡上读取唯一的硬件地址,然后发送RARP请求到RARP服务器,请求该主机在无盘系统的IP地址。

网络协议 -- ARP和RARP协议_第4张图片

文章参考:https://segmentfault.com/a/1190000009562333

你可能感兴趣的:(网络协议)