GARP(Gratuitous ARP)

2023-12-19 09:38
文章标签 arp garp gratuitous

本文主要是介绍GARP(Gratuitous ARP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内核函数arp_is_garp判断ARP报文是否为GARP,先决条件是发送者IP和目标IP地址相同,另外,对于ARP回复(REPLAY)报文,要求如果目标硬件地址存在,需要与发送者硬件地址相等。最后,要求ARP报文的发送者IP为单播地址,否则,判定报文不是garp。

static bool arp_is_garp(struct net *net, struct net_device *dev,int *addr_type, __be16 ar_op,__be32 sip, __be32 tip,unsigned char *sha, unsigned char *tha)
{bool is_garp = tip == sip;/* Gratuitous ARP _replies_ also require target hwaddr to be* the same as source.*/if (is_garp && ar_op == htons(ARPOP_REPLY))is_garp =/* IPv4 over IEEE 1394 doesn't provide target* hardware address field in its ARP payload.*/tha &&!memcmp(tha, sha, dev->addr_len);if (is_garp) {*addr_type = inet_addr_type_dev_table(net, dev, sip);if (*addr_type != RTN_UNICAST)is_garp = false;}return is_garp;

如下PROC文件控制对GARP报文的接收,default目录的文件仅在初始化时使用,是否接收GARP,由另外all和网络设备ens33目录下文件确定。

# cat /proc/sys/net/ipv4/conf/all/drop_gratuitous_arp
0
# cat /proc/sys/net/ipv4/conf/default/drop_gratuitous_arp
0
# cat /proc/sys/net/ipv4/conf/ens33/drop_gratuitous_arp
0

在ARP报文处理函数arp_process中,宏IN_DEV_ORCONF对all和网络设备(ens33)设置的drop_gratuitous_arp值进行或操作,如果结果为真,对其此报文。特别是在802.11无线网络环境中,如果存在一个恶意的ARP代理,发送GARP攻击报文,需要开启drop_gratuitous_arp选项。

static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
{bool is_garp = false;/** For some 802.11 wireless deployments (and possibly other networks),* there will be an ARP proxy and gratuitous ARP frames are attacks* and thus should not be accepted.*/if (sip == tip && IN_DEV_ORCONF(in_dev, DROP_GRATUITOUS_ARP))goto out_free_skb;...

如下PROC文件控制对于GARP报文,是否创建邻居表项。如果arp_accept为真,创建新的表项,否则,仅对已有表项进行更新。

# cat /proc/sys/net/ipv4/conf/all/arp_accept 
0
# cat /proc/sys/net/ipv4/conf/default/arp_accept      
0
# cat /proc/sys/net/ipv4/conf/ens33/arp_accept    
0

如果邻居系统已经存在此报文发送者IP对应的邻居信息,或者arp_accept为真,调用函数arp_is_garp判断是否为GARP报文。

    /* Update our ARP tables */n = __neigh_lookup(&arp_tbl, &sip, dev, 0);addr_type = -1;if (n || IN_DEV_ARP_ACCEPT(in_dev)) {is_garp = arp_is_garp(net, dev, &addr_type, arp->ar_op,sip, tip, sha, tha);}

如果arp_accept为真,并且确定为GARP报文(is_garp为真),将邻居查找函数__neigh_lookup的最后一个参数设置为1,找不到的情况下创建新的邻居表项。另外,对于非garp报文,如果其为回复(REPLY)报文,并且发送者IP为单播地址,而且发送者IP和目标IP不相等(addr_type<0),也创建新的邻居表项。

    if (IN_DEV_ARP_ACCEPT(in_dev)) {/* Unsolicited ARP is not accepted by default.It is possible, that this option should be enabled for somedevices (strip is candidate)*/if (!n &&(is_garp ||(arp->ar_op == htons(ARPOP_REPLY) &&(addr_type == RTN_UNICAST ||(addr_type < 0 &&/* postpone calculation to as late as possible */inet_addr_type_dev_table(net, dev, sip) == RTN_UNICAST)))))n = __neigh_lookup(&arp_tbl, &sip, dev, 1);}

如果邻居表项已经存在,不在进行arp_accept的判断,将邻居表项更新为NUD_REACHABLE状态,但是对于ARP请求报文或者广播回复报文,表项状态设置为NUD_STALE。

    if (n) {int state = NUD_REACHABLE;int override;/* If several different ARP replies follows back-to-back,use the FIRST one. It is possible, if several proxyagents are active. Taking the first reply preventsarp trashing and chooses the fastest router.*/override = time_after(jiffies,n->updated + NEIGH_VAR(n->parms, LOCKTIME)) ||is_garp;/* Broadcast replies and request packets do not assert neighbour reachability.*/if (arp->ar_op != htons(ARPOP_REPLY) ||skb->pkt_type != PACKET_HOST)state = NUD_STALE;neigh_update(n, sha, state, override ? NEIGH_UPDATE_F_OVERRIDE : 0, 0);

内核版本 5.0

这篇关于GARP(Gratuitous ARP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511718

相关文章

以太网通信之ARP

免责声明: 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。 读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证

ARP协议和DNS的工作原理

ARP协议 ARP协议的工作原理: 首先主机向自己的网络广播发送一个arp请求,请求报文包括目的端的ip地址和目的端的以太网地址。网络上的其他机器收到这个请求,但只有被请求的才会回应一个应答报文,报文中有自己的物理地址。 arp维护了高速缓存包括最近访问的ip地址到物理地址的映射。提高了发送数据包的速度。可以防止多次发起arp请求。 arp报文格式: 这是arp通信过程两台机器的的通

【网络基础】解析ARP协议:概念、工作原理、安全风险、相关指令

文章目录 1. 引入2. 概念3. ARP协议工作过程4. 通过指令 获取当前主机所处局域网的所有IP和MAC地址?5. arp欺骗5.1 防护措施 1. 引入 我们知道,在局域网通信中,一台主机想向另一台主机发送数据,自然需要得到目标网络 以及 目标主机,但发送方只知道目标IP,而不知道对方的MAC地址,自然就无法封装MAC帧; 此时就有一个概念:在同一个网段,通过目

常见协议工作原理 https ARP ICMP DHCP PING

1. HTTPS(HyperText Transfer Protocol Secure) HTTPS是HTTP的安全版本,它在HTTP和TCP之间加入了SSL/TLS协议层,用于加密数据传输,确保数据的安全性和完整性。 工作原理: 握手:客户端和服务器通过SSL/TLS握手协商加密算法和交换密钥。证书验证:服务器向客户端提供证书,客户端验证证书的有效性。加密通信:使用协商的密钥对数据进行加密

网络层 IV(ARP、DHCP、ICMP)【★★★★★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。 一、地址解析协议(ARP)(★★) 在局域网中,由于硬件地址已固化在网卡上的 ROM 中,因此常常将硬件地址称为物理地址。因为在局域网的 MAC 帧中的源地址和目的地址都是硬件地址,因此硬件地址又称为 MAC 地址。即物理地址、硬件地址和 MAC 地址常常作为同义词出现。 1. IP 地址与 MAC 地址 从层次的角度看,

【网络】数据链路层协议——以太网,ARP协议

目录 1.局域网转发 2.MAC地址 2.1.什么是MAC地址 2.2.Mac地址的作用 2.3.MAC地址和IP地址的区别和联系 3.以太网协议 4.MTU,IP MTU,MSS 4.1.MTU 4.2. IP MTU 4.3. MSS 4.4. 区别及联系 5.局域网的数据碰撞 5.1.局域网内通信过程  5.2.数据碰撞问题 5.3.令牌环网和以太网解决数据碰撞

ARP协议分析

目录 实验设备和环境 实验记录 1、ARP报文分析 (1)建立实验拓扑 (2)设置抓包接口 (3)启动设备,开始抓包 (4)协议分析 ARP代理 (1)建立实验拓扑 (2)设置抓包接口 (3)ARP代理未设置情况下抓包 (4)设置ARP代理情况下抓包 (5)协议分析 地址冲突检测 (1)建立实验拓扑 (2)设置抓包接口 (3)启动设备,开始抓包 总结地址冲突

静态路由与默认路由和实验以及ARP工作原理

目录 1.静态路由和默认路由 1.1 静态路由 1.2 默认路由 1.3 主要区别总结 2.实验 2.1 实验 2.1.1 实验top 2.1.2 实验要求 2.2 实验配置 2.2.1 ip信息配置 2.2.2 配置静态 2.2.3配置默认 2.3 实验结果查看 3.为什么第一个ping会显示丢包? 3.1 ARP 工作机制 3.2 丢包原因 3.3 解决办法

用户态协议栈04-定时arp-table的实现

之前有写过arp reply的实现,其中有写道,我们的系统内核中会维护一张ARP表,可以通过终端arp -a查看: 其中的dynamic和static是动态arp的类型,之前的udp实验就是添加了一条静态arp达到了发送的目的。在我们需要发送一个数据包的时候。指定好ip,内核会在arp表中寻找对应的ip,然后向他发送。在用户太协议栈中,DPDK同样需要维护一张arp表,实现类似的功能。 链

数据链路层知识分享【计算机网络】【以太网帧 | MTU的影响 | ARP技术】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 前文 一, 以太网帧格式 (1).理解局域网通信原理 第一种:在同一网段中 第二种:在不同网段中 二,MTU对上层的影响 mtu对IP协议的影响 MTU对UDP协议的影响 MTU对T