当前位置: 首页 > 科技观察

ARP,极网背后的男人

时间:2023-03-15 00:37:21 科技观察

本文转载自微信公众号《程序员cxuan》,作者cxuan。转载本文请联系程序员cxuan公众号。只要确定了IP地址,就可以向IP地址所在的主机发送数据报,这是我们都很熟悉的事情。但是再往下想想,IP地址只是标识网络层的地址,那么网络层下面的数据链路层有没有地址可以告诉对方主机自己的地址呢?是的,这个地址就是MAC地址。理解MAC地址MAC地址的全称是MediaAccessControlAddress,译为媒体访问控制地址,是以太网或网络适配器在网络上的唯一标识。MAC地址区分不同的网络接口并用于许多网络技术,最著名的是IEEE802网络。MAC地址也称为物理地址、硬件地址和老化地址。MAC地址主要用于标识数据链路中互连的节点,如下图:MAC地址为48位长,在使用网卡(NIC)的情况下,一般烧录MAC地址进入ROM。因此,任何一张网卡的MAC地址都是唯一的。MAC地址的结构如下:MAC地址中的3-24位代表制造商标识号,每个网卡制造商都有一个特定且唯一的标识号。制造商在内部使用第25-48位来标识每个网卡。所以保证世界上不会出现MAC地址相同的网卡。MAC地址也有例外,就是MAC地址可能重复,但问题并不严重,只要两个MAC地址属于不同的数据链路层,就没有问题。什么是ARPARP协议的全称是AddressResolutionProtocol(地址解析协议),是用来实现IP地址到MAC地址映射的协议,即查询目标IP对应的MAC地址.ARP协议在IPv4中极其重要。注:ARP只用在IPv4协议中,IPv6协议使用NeighborDiscoveryProtocol,译为邻居发现协议,包含在ICMPv6中。简而言之,ARP是一种解决地址问题的协议。它使用IP地址作为线索来定位下一个应该接收数据包的主机的MAC地址。如果目标主机不在同一链路上,则查找下一跳路由器的MAC地址。ARP的工作机制下面我们来讨论一下ARP的工作机制。假设A和B位于同一条链路上,不需要经过路由器转换,主机A向主机B发送一个IP包,主机A的地址为192.168.1.2,主机B的地址为192.168.1.3.他们不知道对方的MAC地址是多少?主机C和主机D是同一链路上的其他主机。主机A要获取主机B的MAC地址,主机A会通过广播的方式向以太网上的所有主机发送一个ARP请求包。这个ARP请求包中包含主机A想知道的主机B的IP地址。MAC地址。主机A发送的ARP请求报文会被同一链路上的所有主机/路由器接收并解析。每个主机/路由器都会检查ARP请求包中的信息。如果ARP请求报文中的目标IP地址与自己相同,则将自己主机的MAC地址写入响应报文返回给主机A,这样就可以通过ARP从IP地址中获取MAC地址,使同一链路内的通信。如果是不同的链接怎么办?这需要使用代理ARP。通常ARP被路由器隔离,但是使用代理ARP(ARPProxy)的路由器可以将ARP请求转发到相邻的网段。使多个网段中的节点像在同一网段中一样进行通信。ARP缓存现在您知道可以通过在发送IP数据包之前发送ARP请求来确定MAC地址。那么是不是每次发送都要经过广播->封装ARP响应->返回给主机一系列过程呢?想一想,浏览器是怎么做到的?浏览器内置缓存,可以缓存你最近经常使用的地址,那么ARP也是一样的。高效ARP操作的关键是在每个主机和路由器上维护一个ARP缓存(或表)。此缓存维护每个IP到MAC地址的映射。通过ARP第一次获取的MAC地址作为IP和MAC的映射关系存入ARP缓存表,下次向该地址发送数据报时,不再需要重新发送ARP请求,直接使用这个缓存表中的MAC地址用于发送数据报。每发送一次ARP请求,缓存表中对应的映射关系就会被清空。通过ARP缓存,减少了网络流量的使用,一定程度上防止了大量的ARP广播。一般来说,发送ARP请求后,再次发送同一个请求的概率比较高,所以使用ARP缓存可以减少ARP包的发送。另外,不仅ARP请求的发送方可以缓存ARP接收方的MAC地址Address,接收方也可以缓存ARP请求方的IP和MAC地址,如下图:但是MAC地址的缓存有一定时间,超过该时间缓存内容将被清除。我们可以在Linux或Windows中使用arp命令查看ARP缓存。选项-a用于显示两个系统缓存中的所有缓存条目。arp查询缓存在linux中主要包括五项:主机名---对应一个IP地址硬件地址类型硬件地址标志Localnetworkinterfaceflags主要分为三类:C、M或P,C代表ARP协议Dynamic学习。可以通过arp-s添加M类。P类表示发布,对于任何P类条目,主机都会对传入的ARP请求返回ARP响应。该选项用于配置代理ARP。例如,我们在Windows中执行ARP缓存查询。Windows中的ARP程序显示的是IPv4地址,它的接口是一个十六进制数。Windows版本还指示地址是手动输入的还是ARP动态学习的。在上面的例子中,既有静态的,也有动态的。48位MAC地址显示为6个十六进制数字,在Linux中以:分隔,在Windows中以-分隔。ARP结构我们上面提到ARP首先会向目标主机发送一个ARP请求,想要知道MAC地址,那么这个请求携带了哪些信息呢?接下来cxuan就来和大家聊聊。以下是以太网中转换IPv4地址的常见ARP请求或响应报文格式。前14个字节构成标准以太网的标头。前两个字段DST和SRC分别代表以太网的目的地址和以太网的源地址。如果以太网的目的地址为ff:ff:ff:ff:ff:ff全为1表示广播地址,同一广播域内的所有以太网接口都可以接收到这些帧。其后是ARP请求的长度/类型,ARP请求和ARP回复的值为0x0806。硬件类型表示硬件地址的类型。常见的硬件地址是MAC物理地址或以太网地址。对于以太网,该值为1。ProtocolType表示映射的协议地址类型,对于IPv4地址,该值为0x0800。HardwareSize和ProtocolSize分别表示硬件地址和协议地址中的字节数。对于以太网上使用IPv4的ARP请求或回复,它们的值分别为6和4。Op字段表示如果是ARP请求,Op=1,ARP回复,Op=2,RARP请求,Op=3,RARP回复,Op=4。紧跟在Op之后的是发送者硬件地址(MAC地址)、发送方的协议地址(IPv4地址)、目标硬件地址和目标协议地址。ARP抓包实战我们演示了在Mac和Linux下拦截ARP数据包。在Mac环境下,我使用WireShark进行抓包。您可以从官方网站下载它。地址如下:https://www.wireshark.org/download.html下载完成后阅读安装说明手册。看完你会发现需要安装两个插件,根据提示安装即可。然后我们打开WireShark,开始消息拦截。下面是我解决的ARP包。这个软件的一个好处就是不同的数据包会用不同的颜色来标记,这点非常好。然后我们查看ARP请求,可以看到这是一个完整的ARP请求包。我们使用的硬件类型为Ethernet,协议类型为IPv4,默认值为0x0800,硬件大小为6字节,协议大小占2Op全称Opcode,Op=1表示这是一个ARPrequest,后面是发送方的硬件地址和协议地址,以及接收方的硬件地址和协议地址。ARP响应如下,可以看到Op=2,说明这是一个ARP响应。在Linux环境下,可以使用tcpdump拦截ARP包,如果找不到tcpdump,可以使用yuminstall-ytcpdump安装。使用tcpdump-iens33打印出ens33地址下的包,下面是我截获的ARP包。关于tcpdump的更多用法可以参考这篇博客https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html老大写的很详细,就不说了在这里解释一下。ARP缓存超时缓存超时通常与ARP缓存中的项目有关,arp命令可以让管理员设置永不超时。ARP为存储在缓存中的每个映射地址设置了生存期,通常为20分钟。不完整的映射有3分钟的缓存超时,这通常会强制对不存在的主机发出ARP请求。RARP与ARP相反。RARP(ReverseAddressResolutionProtocol)是一种逆向ARP,从MAC地址定位IP地址的协议。它将打印机服务器等小型嵌入式设备连接到网络时使用。通常我们设置IP地址有两种方式,手动设置和DHCP动态获取,但是对于嵌入式设备来说,它没有任何输入接口,无法通过DHCP获取动态地址。在这种情况下,您需要使用RARP。需要准备一个RARP服务器,在这个服务器上注册设备的MAC地址和IP地址,然后将设备接入网络,设备会向服务器发送查询IP和MAC地址的请求,服务器会告诉设备它的IP地址和MAC地址。ARP攻击ARP是一种非常不安全的协议。目前,涉及ARP的攻击事件很多。最主要的是利用代理ARP功能伪装成主机,响应ARP请求,通过伪造ARP包窃取合法用户通信数据,造成影响网络传输速率、窃取用户隐私信息等严重危害。ARP攻击的分类ARP攻击方式主要分为以下几种:ARP泛洪攻击:向网关发送大量的ARP报文,使网关无法正常响应。先发送大量的ARP请求报文,再发送大量虚假的ARP响应报文,会导致网关部分的CPU利用率上升,难以响应正常的服务请求,网关也会充满错误的ARP缓存表,无法更新和维护正常的ARP缓存表消耗网络带宽资源。ARP欺骗主机攻击:ARP欺骗主机攻击也是一种非常常见的ARP攻击类型。攻击者利用ARP欺骗,使局域网内被攻击主机发送给网关的流量信息真正发送给攻击者。主机刷新自己的ARP,使其ARP缓存表中对应的MAC就是攻击者的MAC,这样其他用户要通过网关发送的数据流就会被发送到主机,从而导致用户的数据被出问题了。发泄。欺骗网关攻击:欺骗网关就是将其他主机发送给网关的数据以欺骗网关的形式发送,使数据通过网关发送给攻击者。这种攻击的目标不是个人主机而是局域网的网关,这样攻击者就会不断获取局域网内其他用户的数据,造成数据泄露,用户电脑中病毒的概率也会增加.中间人攻击:中间人攻击就是同时欺骗局域网中的主机和网关。局域网内用户的数据和网关的数据会被发送给同一个攻击者,这样用户和网关的数据就会泄露。IP地址冲突攻击:通过扫描局域网中的物理主机,扫描出局域网中物理主机的MAC地址,然后根据物理主机的MAC地址进行攻击,导致IP地址冲突局域网内的主机,影响用户网络使用的正常运行。总结ARP是TCP/IP实现中的一个基本协议,通常在应用程序或用户不知情的情况下运行。ARP可用于将IP地址映射到MAC地址。在这篇文章中,我们主要讲了ARP的基本原理,ARP的帧结构,ARP的工作机制,ARP代理,ARP攻击,RARP和ARP的区别等等。