54 关于 arp 的处理

news2024/12/1 0:47:13

前言

arp 协议是一个相当基础的协议 

局域网内部 无处不在, 用于根据 ip 地址获取对应的主机的 mac 地址, 进而 发送数据包 

相当基础 且重要, 也相对来说比较简单 

 

 

创建 neighbor

这里指定了 ops 为 arp_hh_ops

162efc376d0345fca4fc7489314a3743.png

 

初始化设备接收到包的处理函数  

9f74a5bb6b4842679d6fe60d4d85b24f.png

 

 

arp_solicit

创建 arp 请求, 广播出去 

0ce3848d0eb14a42a76f93b99bd8cef8.png

 

 

arp_send_dst 参数依次是 type, pType, destIp, dev, srcIp, destMac, srcMac, targetMac, dest

这里是封装 arp 包中的各个属性 

hardwareType, protocolType, hardwareSize, protocolSize, opcodeRequest

senderMac, senderIp, targetMac, targetIp

hardwareType 为 1, 表示 Ethernet

protocolType 为 0x0800, 表示 网络层 

hardwareSize 是 mac 地址的长度, 为 6

protocolSize 固定为 4, 表示 IP 地址的长度 

opcodeRequest 表示的是 ARPOP_REQUEST 为 1

1dad4ef88cfc4beabe44419536acda4d.png

 

 

抓包解析信息如下 

73dbf425441f467097ad532a03dd0cee.png

 

 

 

arp_rcv

处理 arp 请求 

真实处理请求的函数是 arp_process

23ba51d2508148dba6db92467ea930b5.png

 

 

arp_process 处理如下 

当前设备 mac 是根据 dev->dev_addr 获取的, 其他的信息来自于 源包

arp_send_dst 参数依次是 type, pType, destIp, dev, srcIp, destMac, srcMac, targetMac, dest

hardwareType, protocolType, hardwareSize, protocolSize, opcodeRequest

senderMac, senderIp, targetMac, targetIp

hardwareType 为 1, 表示 Ethernet

protocolType 为 0x0800, 表示 网络层 

hardwareSize 是 mac 地址的长度, 为 6

protocolSize 固定为 4, 表示 IP 地址的长度 

opcodeRequest 表示的是 ARPOP_REPLY 为 2

4f57a3968bfe482aaba3789bb6c846d0.png

9f8c77e1a30849fc9f30a830d8ec8e23.png

 

 

抓包解析信息如下 

c6d7654a71ca489698e2859ed0334737.png

 

 

arp –a

读取的是 /proc/net/arp 的信息 

然后 再加工一次, 具体的输出 这里就不演示了

39f006b1733348948e706140c71776fc.png

 

vfs 读取 /net/arp 的相关具体的实现  

167d791ace8d4aa89af2d96b707fd85d.png

 

遍历 arp_tbl, 然后输出 arp 表项的相关信息

bd4758fa15ed4a2ca726920e87dc65dd.png 

遍历 arp 表, 输出表头, 输出每一个表项的 ip, hwType, flags, hwAddr, mask, deviceName

5b0ed9274114483c96f1cd6bc4dda945.png

 

 

arp -s 192.168.1.2 00:50:56:c0:00:08

arp –s 基于 ioctl 的系统调用, 由内核提供支持 

e619c7f95792457083b31bdb5dc6b91d.png

 

arp_req_set 这边实现如下 

获取 ip, 设备 对应的 arp 表项, 然后进行更新 

我们这里传入的 ip 存在问题, 类型匹配不上, 报了非法的参数 

de58491d169e468bb03090ac8bb5b7d8.png

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1555682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RN在android/ios手机剪切图片的操作

之前写过一个React Native调用摄像头画面及拍照和保存图片到相册全流程但是这个仅限于调用摄像头拍照并保存图片,今天再写一个版本的操作,这个博客目前实现的有三点操作: 调用摄像头拍照对照片进行剪切从相册选取图片 功能上面来说有两点: 点击按钮可以对摄像头进行拍照,拍完照…

什么样的人适合学习网络安全?怎么学?_

有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题:什么样的人适合学习网络安全?我适不适合学习网络安全? 会产生这样的疑惑并不奇怪,毕竟网络安全这个专业在2017年才调整为国家一级学科,…

实时语音识别(Python+HTML实战)

项目下载地址:FunASR 1 安装库文件 项目提示所需要下载的库文件:pip install -U funasr 和 pip install modelscope 运行过程中,我发现还需要下载以下库文件才能正常运行: 下载:pip install websockets,pi…

C++进阶,手把手带你学继承

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在闪烁 【本节目标】 1.继…

2024年春季思维100线上比赛怎么考?来看几道官方样题(附答案)

根据思维100活动的官方通告,2024年春季的思维100活动从前天(2024年3月28日)就正式启动了,整个活动从3月底启动,5月底结束。整个过程共有三场比赛: 第一轮4月20日线上比赛:在家里或自己选择地方…

多模态大模型:解析未来智能汽车的新引擎

多模态大模型:解析未来智能汽车的新引擎 1. 多模态大模型简介2. 多模态大模型在智能汽车中的应用2.1 感知与认知2.2 智能驾驶辅助2.3 智能交互 随着人工智能技术的不断进步,智能汽车已经从概念变成了现实,成为了当今科技领域的焦点之一。而在…

通俗易懂Redis缓存穿透,缓存击穿,缓存雪崩

1.1 缓存穿透 原因:当我们查询一个数据的时候,缓存中没有,就会去查询我们的关系型数据库,而且查询不到的数据是不会放到我们的缓存中,就会导致我们每次的请求都会来到我们的关系型数据库中,从而导致关系型…

Windows安装tomcat,以服务的方式管理,如何设置虚拟内存

之前工作中,部署tomcat都是使用Linux服务器,最近遇到个客户,提供的服务器是Windows server,并且需要通过服务的方式管理tomcat;以自己多年的码农经验,感觉应该没有问题,结果啪啪打脸了&#xf…

RWKV_Pytorch:支持多硬件适配的开源大语言模型推理框架

亲爱的技术探索者们,今天我要向大家隆重推荐一个在开源社区中崭露头角的项目——RWKV_Pytorch。这是一个基于Pytorch的RWKV大语言模型推理框架,它不仅具备高效的原生Pytorch实现,而且还扩展了对多种硬件的适配支持,让模型的部署和…

新数字时代的启示:揭开Web3的秘密之路

在当今数字时代,随着区块链技术的不断发展,Web3作为下一代互联网的概念正逐渐引起人们的关注和探索。本文将深入探讨新数字时代的启示,揭开Web3的神秘之路,并探讨其在未来的发展前景。 1. Web3的定义与特点 Web3是对互联网未来发…

卷积神经网络(CNN)——基础知识整理

文章目录 1、卷积神经网络 2、图片格式 3、图片卷积运算 4、Kernel 与 Feature Map 5、padding/边缘填充 6、Stride/步长 7、pooling/池化 8、shape 9、epoch、batch、Batch Size、step 10、神经网络 11、激活函数 1、卷积神经网络 既然叫卷积神经网络,这里面首先是…

【数据结构】树tree

树的遍历 广度遍历Breadth-first traversal Breadth-first traversal is the traversal strategy used in the binary tree.Breadth first traversal, also known as level order traversal is the traversal strategy used in a binary tree. It involves visiting all the …

JUC:park/unpark的用法与原理

park / unpark 用法 // 暂停当前线程 LockSupport.park(); // 恢复某个线程的运行 LockSupport.unpark(暂停线程对象)**先说结论:**无论unpark在park前还是后,都可以解除暂停状态。 先park在unpark可以成功运行: Thread t1 new Thread((…

郭林保大夫——帕金森病明明很早就诊疗了,还是见不到好效果?

郭林保大夫:帕金森是一种常见的神经系统退行性疾病,如果不及时治疗,病情会逐渐加重,导致患者的生活质量严重下降。可能会出现肌肉僵硬、震颤、运动障碍等症状,使患者行动不便,甚至丧失自理能力。此外&#…

羊大师羊奶:每一滴都是自然与健康的馈赠

在忙碌的都市生活中,保持健康和活力显得尤为重要。对于追求品质生活的您,羊大师羊奶不仅是一款饮品,更是一种健康的生活态度。源自深山中的纯净环境,每一头羊都接受了精心的饲养与呵护,确保了羊奶的天然纯粹和营养价值…

农村集中式生活污水分质处理及循环利用技术指南

立项单位:生态环境部土壤与农业农村生态环境监管技术中心、山东文远环保科技股份有限公司、北京易境创联环保有限公司、中国环境科学研究院、广东省环境科学研究院、中铁第五勘察设计院集团有限公司、中华环保联合会水环境治理专业委员会 本文件规定了集中式村镇生活…

GT收发器第四篇_QPLL和CPLL工作原理

文章目录 前言一、CPLL工作原理二、QPLL工作原理 前言 每个channel的时钟结构如图: Transceiver内部时钟来源可以是QPLL也可以是自己的CPLL。其内部TX 和 RX 时钟分频器可以单独从 QPLL 或 CPLL 中选择时钟,允许 TX和 RX 数据通道使用不同的参考时钟输入…

python-判断列表字典循环

比较运算符 不等于 ! if 布尔值: [执行语句-真实执行] else: [执行语句] mood_index int(input("对象今天的心情指数的是:")) if mood_index > 60:print("恭喜,今晚应该可以带游戏,去吧")…

第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯

【问题描述】 小蓝要上一个楼梯,楼梯共有 n 级台阶(即小蓝总共要走 n 级)。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端?【输入格式】 输入的第一行包含一个整数 n 。 第二行包含三个整…

MySQL开窗函数

测试环境:mysql8.0.18 官方文档:https://dev.mysql.com/doc/refman/8.0/en/window-functions.html 一、窗口函数介绍二、语法结构三、自定义窗口1.rows(重点)2.range3.默认窗口 四、常用窗口函数示例1.row_number & rank &…