• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

ARP协议 地址解析协议 详解


Recommended Posts

[title-plane title=”前言”]

如果要在TCP/IP协议栈中选择一个“最不安全的协议”,那么我会毫不犹豫把票投给ARP协议。我们经常听到的这些术语,包括”网络扫描”、”内网渗透”、”中间人拦截”、”局域网流控”、”流量欺骗”,基本都跟ARP脱不了干系。大量的安全工具,例如大名鼎鼎的Cain、功能完备的Ettercap、操作傻瓜式的P2P终结者,底层都要基于ARP实现。

听上去这么”逆天”的协议,其实技术原理又简单的难以置信,例如ARP整个完整交互过程仅需要两个包,一问一答即可搞定!但是ARP协议也有它令初学者迷惑的地方,例如由它本身延伸出来的”代理ARP”、”免费ARP”、”翻转ARP”、”逆向ARP”,而这些不同种类的ARP,又应用于不同的场景。

[/title-plane]

ARP协议概述

       ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。

       简单来说,ARP协议将IP地址解析为以太网MAC地址(或称物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另—个主机或设备时,必须知道对方的IP地址和MAC地址。

ARP出现原因

  • 在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
  • 一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。

ARP工作实例

[c-alert type=”info”]ARP地址解析协议是如何把目的地址的IP地址转化为MAC地址的?[/c-alert]

  1. 首先,主机A向主机B发送消息,但它不知道主机B的MAC地址,只知道主机B的IP地址。此时,主机A会在当前局域网下以广播的形式发送ARP请求数据报,表示主机A想知道主机B的MAC地址。https://z3.ax1x.com/2021/07/11/WCrOcq.png
  2. 局域网中的毎一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,除了主机B外,在这个局域网内的其他主机都会丢弃数据报。
  3. 验证成功的主机会返回—个ARP响应报文这个响应报文包含接收方的IP地址和物理地址。这个报文以单播的方式直接发送给ARP请求报文的请求方。https://z3.ax1x.com/2021/07/11/WCssK0.png

[c-alert type=”success”]小结:ARP协议通过”一问一答”实现交互,但是”问”和”答”都有讲究,”问”是通过广播形式实现,”答”是通过单播形式。[/c-alert]

ARP缓存表

  • 为了实现IP地址与MAC地址的查询与转换,ARP协议引入了ARP缓存表的概念。
  • 这个表包含IP地址到MAC地址的映射关系,表中记录了<P地址,MAC地址>对,称之为ARP表项。
  • 当需要发送数据时,主机会根据数据报中的目标I地址信息,然后在ARP缓存表中查找对应的MAC地址,最后通过网卡将数据发送出去。

[c-alert type=”warning”]注意:arp缓存表中每—项都被设置了生存时间,一般是20分钟,从被创建时开始计时,到时则清除。[/c-alert]

[c-alert type=”success”]在我们的windows/macos系统下,可以通过命令行”arp -a“查看具体信息=>[/c-alert]

https://z3.ax1x.com/2021/07/11/WCgULq.png

ARP报文格式

ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为如下图

https://z3.ax1x.com/2021/07/11/WCgWex.png

字段的说明:

  1. 硬件类型:占2字节,表示ARP报文可以在哪种类型的网络上传输,值为1时表示为以太网地址。
  2. 上层协议类型:占2字节,表示硬件地址要映射的协议地址类型。其中,0x0800表示IP协议
  3. MAC地址长度:占1字节,标识MAC地址长度。
  4. IP地址长度:占1字节,标识IP地址长度。
  5. 操作类型:占2字节,指定本次ARP报文类型。1表示ARP请求报文,2表示ARP应答报。
  6. 源MAC地址:占6字节,表示发送方设备的硬件地址。
  7. 源IP地址:占4字节,表示发送方设备的IP地址。
  8. 目的MAC地址:占6字节,表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00 表示任意地址,因为现在不知道这个MAC地址。
  9. 目的IP地址:占4字节,表示接收方设备的IP地址。

ARP数据包解读

为了让大家更好的理解ARP协议以及广播和单播的概念,我们来看一下用Wireshark抓取到的真实网络中的ARP过程,通过数据包的方式来呈现,地址信息如下,部分MAC信息隐去。(建议初学者用GNS3配合Wireshark来抓取协议包进行分析,相比真实网络更加干净,方便分析)

[c-alert type=”success”]主机1 <———-> 主机2

主机1: IP1:10.1.20.64       MAC1:00:08:ca:xx:xx:xx

主机2: IP2:10.1.20.109     MAC2:44:6d:57:xx:xx:xx

[/c-alert]

https://z3.ax1x.com/2021/07/11/WCRDxJ.png

[title-plane title=”分析”]

我是主机1<IP1:10.1.20.64,MAC1:00:08:ca:xx:xx:xx>
请问主机2<IP2:10.1.20.109,你的MAC是多少?>
000000空位(留坑),表示询问者不知道,等待接收方回应(填坑)[/title-plane]

https://z3.ax1x.com/2021/07/11/WCRbZt.png

[title-plane title=”分析”]

我是主机2<IP2:10.1.20.109,MAC2:44:6d:57:xx:xx:xx>
你好主机1<IP1:10.1.20.64,MAC1:00:08:ca:xx:xx:xx>

[/title-plane]

【ARP协议字段解读】

Hardware type :硬件类型,标识链路层协议

Protocol type: 协议类型,标识网络层协议

Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)

Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit)

Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应

Sender MAC address :发送者MAC

Sender IP address :发送者IP

Target MAC address :目标MAC,此处全0表示在请求

Target IP address: 目标IP

参考博文:

https://zhuanlan.zhihu.com/p/28771785

Link to comment
Share on other sites