ARP 结构
我们上面说到,ARP 对想要知道 MAC 地址的目标主机会首先发送 ARP 请求,那么这个请求中都携带哪些信息呢?下面 cxuan 就来和你聊一下。下面是在以太网中转换一个 IPv4 的地址常用的 ARP 请求或响应的报文格式。
前面 14 个字节构成标准以太网的首部,前两个字段 DST 和 SRC 分别表示 以太网的目的地址
和 以太网的源地址
,以太网的目的地址如果是 ff:ff:ff:ff:ff:ff
全部为 1 表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是 ARP 请求的长度/类型,ARP 请求 和 ARP 应答这个值为 0x0806
。
硬件类型
表示硬件地址的类型,硬件地址常见的有 MAC 物理或者以太网地址,对于以太网来说,此值为 1。协议类型
指出映射的协议地址类型,对于 IPv4 地址,这个值是0x0800
。硬件大小
和协议大小
分别指出硬件地址和协议地址的字节数。对于以太网中使用 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 请求包,我们使用的硬件类型是以太网,协议类型是 IPv4 ,默认值是 0x0800,然后硬件大小是 6 个字节,协议大小占用 2 个字节,Op 的全称是 Opcode ,Op = 1 表示这是一个 ARP 请求,然后是发送方的硬件地址和协议地址,接收方的硬件地址和协议地址。
ARP 响应如下
可以看到 Op = 2,表示这是 ARP 响应。
在 Linux 环境下,你可以使用 tcpdump
截获 ARP 数据包,如果 tcpdump not found 的话,你可以使用 yum install -y tcpdump
安装。
使用 tcpdump -i ens33
可以打印出在 ens33 地址下的数据包,下面是我截取的 ARP 数据包。
更多关于 tcpdump 的用法,你可以参考这篇博客
https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
大佬写的很详细,这里就不再说明了。