简介

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行

Linux的arp命令:
1、在linux 使用man arp查看;
2、arp命令用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的IP地址与MAC地址对应关系

arp(选项)(参数)
选项:
-a<主机>:显示arp缓冲区的所有条目;
-H<地址类型>:指定arp指令使用的地址类型;
-d<主机>:从arp缓冲区中删除指定主机的arp条目;
-D:使用指定接口的硬件地址;
-e:以Linux的显示风格显示arp缓冲区中的条目;
-i<接口>:指定要操作arp缓冲区的网络接口;
-s<主机>:设置指定的主机的IP地址与MAC地址的静态映射;
-n:以数字方式显示arp缓冲区中的条目;
-v:显示详细的arp缓冲区条目,包括缓冲区条目的统计信息;
-f<文件>:设置主机的IP地址与MAC地址的静态映射。

参数 : 主机

Linux上使用arp命令

arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个IP地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。
arping(选项) 主机

选项:
-b:用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。
-q:quiet output不显示任何信息;
-f:表示在收到第一个响应报文后就退出;
-w timeout:设定一个超时时间,单位是秒。如果到了指定时间,arping还没到完全收到响应则退出;
-c count:表示发送指定数量的ARP请求数据包后就停止。如果指定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止;
-s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratutious ARP)则设置为目标地址,否则从路由表得出;
-I interface:设置ping使用的网络接口。

ARP安全

1、arp欺骗:
ARP大多时候都会发起广播请求,而处于同一局域网内的所有主机都可以收到某主机发出的ARP广播请求,利用这个工作原理我们可以接收到网络上与自己无关的ARP请求包,然后回复一个带有假的MAC地址的reply包以达到ARP欺骗的目的。

ARP实现相关

以太网数据包类型
ARP学习

1、使用SOCK_RAW即原始套接字进行ARP数据包的抓取,然后使用recvfrom()函数获取数据包中的数据;并将请求包中的源MAC、源IP、目的IP等信息提取出来:

2、自定义一个以太网ARP协议数据帧结构体然后将相关数据填充进去,其中需要使用socket和struct ifreq结构体获取本地主机的IP。

3、发送应答包。这里主要是使用原始套接字在二层网络进行相关的操作,所以需要用到的是struct sockaddr_ll结构体而不是我们常用的struct sockaddr_in结构体 (涉及到关于二层网络套接字操作与三层网络套接字的区别)
SOCK_RAW(原始套接字):原始套接字又分为链路层原始套接字和网络层套接字。链路层原始套接字调用socket()函数创建。
第一个参数指定协议族类型为PF_PACKET;
第二个参数type可以设置为SOCK_RAW或SOCK_DGRAM;
第三个参数是协议类型(该参数只对报文接收有意义)。参数type设置为SOCK_RAW时,套接字接收和发送的数据都是从MAC首部开始的。在发送时需要由调用者从MAC首部开始构造和封装报文数据。

原始套接字(SOCK_RAW)与标准套接字(SOCK_STREAM、SOCK_DGRAM)的区别在于原始套接字直接与操作系统网络核心(Network Core),而 SOCK_STREAM、SOCK_DGRAM 则“悬浮”于 TCP 和 UDP 协议的外围。

除了使用原始套接字外,还使用了PF_PACKET协议族,用于在链路层收发原始(raw )分组。所以,地址也不再是 sockaddr_in 而是采用 sockaddr_ll 地址。
ARP学习
报文的发送流程图:

ARP学习
报文接收图:

ARP学习

参考链接:
https://blog.csdn.net/weixin_41983681/article/details/85813498
https://blog.csdn.net/ieczw/article/details/40779285
https://blog.csdn.net/qy532846454/article/details/6806197

相关文章:

  • 2021-12-21
  • 2022-02-06
  • 2021-06-15
  • 2021-08-19
  • 2022-02-02
  • 2021-05-12
  • 2021-07-20
  • 2021-10-24
猜你喜欢
  • 2022-12-23
  • 2022-01-13
  • 2022-01-14
  • 2021-07-29
  • 2021-12-15
  • 2021-05-01
  • 2021-06-29
相关资源
相似解决方案