抓包分析ARP协议工作原理

news2024/9/26 1:27:29

目录

1. ARP 协议

2. 工作原理

3. ARP 协议报文格式

4. ARP 缓存的查看和修改

5. tcpdump 抓包分析 ARP 协议工作原理

5.1 搭建 2 台虚拟机

5.2 在主机 192.168.0.155 打开一个shell命令行开启抓包监听

5.3 在主机 192.168.0.155 打开另一个shell命令行 telnet 192.168.0.154

5.4 在主机 192.168.0.155 抓包监听的窗口可即可抓到头两帧数据即是 ARP 请求 和 ARP 应答包如下

5.4.1 ARP 请求帧分析

(1)站在数据链路层对以太网帧进行数据分析

(2)站在网络层对ARP请求包进行数据分析

5.4.2 ARP 应答帧分析

(1)站在数据链路层对以太网帧进行数据分析

(2)站在网络层对ARP请求包进行数据分析


1. ARP 协议

        ARP(Address Resolution Protocol,地址解析协议)协议属于网络层协议,它实现了将目的主机的 IP 地址转换为 MAC 地址(物理地址)。

2. 工作原理

        主机向自己所在的网络(比如家用路由器)广播一个 ARP 请求(request),该请求包含目的主机的IP地址,此网络上的其它主机都将收到这个请求,但只有被请求的目的主机会回应一个 arp 应答(reply)。

3. ARP 协议报文格式

字段字节数说明
硬件类型2表示物理地址的类型,对于以太网 MAC 地址,值为:0x0001
协议类型2发送方要映射的协议地址类型,对于 IP 地址,值为:0x0800
硬件地址长度1以太网 MAC 地址,占用 6 个字节,所以值为:0x06
协议地址长度1IPv4,占用 4 字节,所以值为:0x04
操作24种操作类型:ARP 请求,值为:0x0001;ARP 应答,值为:0x0002;RARP 请求,值为:0x0003;RARP 应答,值为:0x0004
源MAC地址6发送方的 MAC 地址
源IP地址4发送方的 IP 地址
目的MAC地址6接收方的 MAC 地址,对于 ARP 请求,不知道接收方的 MAC 地址,该值用 0 填充,即 0x0000 0000 0000
目的IP地址4接收方的 IP 地址

        上面表格的说明不能完全搞懂也不要紧,往下看,会有抓取 ARP 请求和 ARP 应答的帧数据,我们根据帧数据分析来理解,对于 ARP 请求协议的理解就容易多了。

4. ARP 缓存的查看和修改

        在抓取 ARP 请求、应答包进行数据分析前,还有要讲明白 ARP 缓存。因为假如 ARP 请求的目的 IP 地址的 MAC 地址在本主机已经有缓存的话,就可能不会向自己所在的网络广播一个 ARP 请求(request),从而抓取不到 ARP 请求、应答包。

        ARP 维护了一个缓存,包含了经常访问或最近访问的主机 IP 地址到 MAC 地址的映射,这样做的好处是避免了重复的 ARP 请求,从而提高发送数据包的速度。

        linux 操作系统下可以使用 arp 命令来查看和修改 arp 缓存。

例如:

arp -a        // 查看 arp 缓存信息

从上图可知:

网关 192.168.0.1 映射的 MAC 地址:3c:6a:48:e2:d5:67

主机 192.168.0.154 映射的 MAC 地址:00:0c:29:ba:f0:0d

主机 192.168.0.101 映射的 MAC 地址:b0:a4:60:28:96:f5

ens33 是网卡名

arp -d 192.168.0.154        // 删除目的主机 192.168.0.154 的缓存信息

5. tcpdump 抓包分析 ARP 协议工作原理

        tcpdump 是一个运行在命令行下的网络抓包工具,给使用者提供了大量的选项,用以过滤数据包或定制格式输出。

5.1 搭建 2 台虚拟机

 环境搭建链接:搭建多台能够互相 telnet 的 centos 虚拟机-CSDN博客

主机 192.168.0.154 的 MAC 地址为:00:0c:29:ba:f0:0d,网卡名为:ens33

主机 192.168.0.155 的 MAC 地址为:00:0c:29:83:72:68,网卡名为:ens33

5.2 在主机 192.168.0.155 打开一个shell命令行开启抓包监听

tcpdump -i ens33 -en -XX '(dst 192.168.0.154 and src 192.168.0.155) or (dst 192.168.0.155 and src 192.168.0.154)'

-i: 是 interface 的意思,指定要监听的网卡接口。"-i any"表示抓取所有网卡接口的数据包。

ens33:网卡接口名

-e: 是 ethernet (以太网) 的意思,显示以太网帧头部信息。

-n: 是 number 的意思,显示 IP 地址表示主机,而不是主机名;显示数字表示端口号,而不是服务名称。

-XX: X是 hex 的意思,以十六进制显示数据包的内容,并打印每个十六进制字节对应的 ASCII 字符,XX表示还打印以太网帧头部信息

'(dst 192.168.0.154 and src 192.168.0.155) or (dst 192.168.0.155 and src 192.168.0.154)':抓取目的IP地址是 192.168.0.154 并且 源IP地址是 192.168.0.155 或者 目的IP地址是 192.168.0.155 并且源IP地址是 192.168.0.154 的数据包

5.3 在主机 192.168.0.155 打开另一个shell命令行 telnet 192.168.0.154

telnet 192.168.0.154

5.4 在主机 192.168.0.155 抓包监听的窗口抓到头两帧数据即是 ARP 请求 和 ARP 应答包如下

5.4.1 ARP 请求帧分析
20:36:28.520790 00:0c:29:83:72:68 > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 192.168.0.154 tell 192.168.0.155, length 28
        0x0000:  ffff ffff ffff 000c 2983 7268 0806 0001  ........).rh....
        0x0010:  0800 0604 0001 000c 2983 7268 c0a8 009b  ........).rh....
        0x0020:  0000 0000 0000 c0a8 009a                 ..........

20:36:28.520790:抓包时的时间戳

(1)站在数据链路层对以太网帧进行数据分析

说明:对于以太网帧来说,携带的数据报字节数范围:46 ~ 1500字节。所以对于ARP数据报,前28字节是ARP协议报文,还需填充18字节(PAD,填充),才能组成最低46字节的数据报,填充的每个字节数据都为:0x00

00:0c:29:83:72:68 > Broadcast, ethertype ARP (0x0806), length 42

00:0c:29:83:72:68 > Broadcast: MAC地址为 00:0c:29:83:72:68 的主机发送给 MAC地址为 Broadcast 的主机,00:0c:29:83:72:68:主机 192.168.0.155 的MAC地址;Broadcast:表示这是一个网络广播地址,即向自己所在的网络广播,此网络上的其它主机都将收到这个包

ethertype ARP (0x0806):以太网帧类型,2个字节,ARP请求的值为:0x0806

length 42: 表示以太网帧的长度为 42 字节,实际上是 64 字节,tcpdump没有统计ARP请求数据报中填充的18字节(PAD)和以太网帧尾部4字节的CRC字段。42字节的组成:以太网头部14字节(目的MAC地址 6 字节 + 源MAC地址 6 字节 + 帧类型 2字节)+ ARP 请求协议报文28字节

(2)站在网络层对ARP请求包进行数据分析

Request who-has 192.168.0.154 tell 192.168.0.155, length 28

Request: 表示这是一个 ARP 请求包

who-has 192.168.0.154 tell 192.168.0.155: 请求 IP 地址 192.168.0.154 的主机告诉IP地址 192.168.0.155 的主机

length 28: 表示ARP请求包在网络层是 28 字节(也就是上面说的ARP 协议报文格式的28字节)实际组包时应该是:28字节ARP协议报文+18字节PAD。

(3)分析ARP请求以太网帧
        0x0000:  ffff ffff ffff 000c 2983 7268 0806 0001  ........).rh....
        0x0010:  0800 0604 0001 000c 2983 7268 c0a8 009b  ........).rh....
        0x0020:  0000 0000 0000 c0a8 009a                 ..........

现在我们用 ARP请求数据帧与ARP请求以太网帧报文格式进行对号入座分析:

以太网首部

0xffff ffff ffff: 对应的是以太网目的MAC地址的6字节,因为是网络广播,所以目的MAC地址为:0xffff ffff ffff

0x000c 2983 7268: 对应的是以太网源MAC地址的6字节,发送方是主机192.168.0.155,它的MAC地址就是 00:0c:29:83:72:68

0x0806: 对应的是帧类型的2字节,因为是ARP请求帧,它的值是 0x0806

ARP协议报文

0x0001: 对应的是硬件类型的2字节,表示物理地址的类型,对于以太网 MAC 地址,值为:0x0001

0x0800: 对应的是协议类型的2字节,表示发送方要映射的协议地址类型,对于 IP 地址,值为:0x0800

0x0604: 高8位对应的是硬件地址长度1字节,以太网 MAC 地址,占用 6 个字节,所以值为:0x06

              低8位对应的是协议地址长度1字节,IPv4,占用 4 字节,所以值为:0x04

0x0001: 对应的是操作2字节,4种操作类型:ARP 请求,值为:0x0001;ARP 应答,值为:0x0002;RARP 请求,值为:0x0003;RARP 应答,值为:0x0004。我们这个是ARP请求包,所以,值为:0x0001

0x000c 2983 7268: 对应的是源MAC地址6字节,即发送方MAC地址,我们的发送方是主机 192.168.0.155,它的MAC地址就是:00:0c:29:83:72:68

0xc0a8 009b:对应的是源IP地址4字节,即发送方的IP地址,我们发送方是主机 192.168.0.155,点分十进制转换成点分十六进制表示就是:0xc0.a8.0.9b

0x0000 0000 0000: 对应的是目的MAC地址6字节,即接收方MAC地址,我们的接收方是主机 192.168.0.154,在 ARP请求中,不知道接收方的 MAC 地址,该值用 0 填充,即 0x0000 0000 0000

0xc0a8 009a: 对应的是目的IP地址4字节,即接收方IP地址,我们的接收方是主机 192.168.0.154,点分十进制转换成点分十六进制表示就是:0xc0.a8.0.9a 

至此,ARP 请求数据包与ARP协议报文进行对号入座都一一对应上了

5.4.2 ARP 应答帧分析
20:36:28.521017 00:0c:29:ba:f0:0d > 00:0c:29:83:72:68, ethertype ARP (0x0806), length 60: Reply 192.168.0.154 is-at 00:0c:29:ba:f0:0d, length 46
        0x0000:  000c 2983 7268 000c 29ba f00d 0806 0001  ..).rh..).......
        0x0010:  0800 0604 0002 000c 29ba f00d c0a8 009a  ........).......
        0x0020:  000c 2983 7268 c0a8 009b 0000 0000 0000  ..).rh..........
        0x0030:  0000 0000 0000 0000 0000 0000            ............

20:36:28.521017:抓包时的时间戳

(1)站在数据链路层对以太网帧进行数据分析

00:0c:29:ba:f0:0d > 00:0c:29:83:72:68, ethertype ARP (0x0806), length 60

00:0c:29:ba:f0:0d > 00:0c:29:83:72:68: MAC地址为 00:0c:29:ba:f0:0d 的主机发送给 MAC地址为 00:0c:29:83:72:68 主机的帧,00:0c:29:ba:f0:0d:以太网源MAC地址(即主机 192.168.0.154 的MAC地址);00:0c:29:83:72:68:以太网目的MAC地址(即主机 192.168.0.155 的MAC地址)

ethertype ARP (0x0806):以太网帧类型,2个字节,ARP应答的值为:0x0806

length 60: 表示以太网帧的长度为 60 字节,实际上是 64 字节,tcpdump没有统计以太网帧尾部4字节的CRC字段。60字节的组成:以太网头部14字节(目的MAC地址 6 字节 + 源MAC地址 6 字节 + 帧类型 2字节)+ ARP 请求协议报文28字节+18字节PAD

(2)站在网络层对ARP请求包进行数据分析

Reply 192.168.0.154 is-at 00:0c:29:ba:f0:0d, length 46

Reply: 表示这是一个 ARP 应答包

192.168.0.154 is-at 00:0c:29:ba:f0:0d: IP 地址 192.168.0.154 的MAC地址为:00:0c:29:ba:f0:0d

length 46: 表示ARP应答分用到网络层有 46 字节(ARP 协议报文格式的28字节+ 18字节PAD)

(3)分析ARP应答以太网帧
        0x0000:  000c 2983 7268 000c 29ba f00d 0806 0001  ..).rh..).......
        0x0010:  0800 0604 0002 000c 29ba f00d c0a8 009a  ........).......
        0x0020:  000c 2983 7268 c0a8 009b 0000 0000 0000  ..).rh..........
        0x0030:  0000 0000 0000 0000 0000 0000            ............

现在我们用 ARP应答数据帧与ARP请求以太网帧报文格式进行对号入座分析:

以太网首部

0x000c 2983 7268: 对应的是以太网目的MAC地址的6字节,目的主机是 192.168.0.155,它的MAC地址就是 00:0c:29:83:72:68

0x000c 29ba f00d: 对应的是以太网源MAC地址的6字节,发送方是主机192.168.0.154,它的MAC地址就是 00:0c:29:ba:f0:0d

0x0806: 对应的是帧类型的2字节,因为是ARP应答帧,它的值是 0x0806

ARP协议报文

0x0001: 对应的是硬件类型的2字节,表示物理地址的类型,对于以太网 MAC 地址,值为:0x0001

0x0800: 对应的是协议类型的2字节,表示发送方要映射的协议地址类型,对于 IP 地址,值为:0x0800

0x0604: 高8位对应的是硬件地址长度1字节,以太网 MAC 地址,占用 6 个字节,所以值为:0x06

              低8位对应的是协议地址长度1字节,IPv4,占用 4 字节,所以值为:0x04

0x0002: 对应的是操作2字节,4种操作类型:ARP 请求,值为:0x0001;ARP 应答,值为:0x0002;RARP 请求,值为:0x0003;RARP 应答,值为:0x0004。我们这个是ARP请求包,所以,值为:0x0002

0x000c 29ba f00d: 对应的是源MAC地址6字节,即发送方MAC地址,应答数据报的发送方是主机 192.168.0.154,它的MAC地址就是:00:0c:29:ba:f0:0d

0xc0a8 009a:对应的是源IP地址4字节,即发送方的IP地址,应答数据报的发送方是主机 192.168.0.154,点分十进制转换成点分十六进制表示就是:0xc0.a8.0.9a

0x000c 2983 7268: 对应的是目的MAC地址6字节,即接收方MAC地址,我们的接收方是主机 192.168.0.155,它的MAC地址就是:00:0c:29:83:72:68

0xc0a8 009b: 对应的是目的IP地址4字节,即接收方IP地址,我们的接收方是主机 192.168.0.155,点分十进制转换成点分十六进制表示就是:0xc0.a8.0.9b 

0x0000 0000 0000 0000 0000 0000 0000 0000 0000: 18字节PAD

至此,ARP 应答数据包与ARP协议报文进行对号入座都一一对应上了

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

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

相关文章

恢复二叉搜索树

题目 给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。 进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗? 示例 1: 输入&…

超声眼镜波清洗机有用吗?真正好用的超声波清洗机推荐

随着时代的进步,人们对家居生活质量的追求也日益提高。尤其是对于珠宝、饰品、眼镜等小物件,长时间不使用后往往会积累灰尘和细菌,这些细菌隐藏在肉眼看不到的地方,它们对健康的影响不容忽视。幸运的是,超声波清洗机能…

Nginx怎么重新编译添加模块

转自 https://www.php.cn/faq/547300.html

【机器人建模和控制】读书笔记

机器人建模和控制——马克斯庞 A. x 1 0 x 1 ∙ x 0 x^0_1x_1\bullet x_0 x10​x1​∙x0​,其实就是: 1) x 1 x_1 x1​轴向量在 O 0 O_0 O0​系下的坐标 2)在 x 0 x_0 x0​轴上的投影 3)坐标变换矩阵的 R 1 0 R_1…

基于vue框架的城市智慧地铁管理系统73c2d(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,站点查询,车次线路,站点周边 开题报告内容 基于Vue框架的城市智慧地铁管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速和人口的不断增长,城市交通压力日益增大。地铁作为城市公共交通的重要…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(一)

项目简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产…

设置广告活动目标和数字广告关键绩效指标的3个步骤

在微调广告预算、优化广告、分析数字广告关键绩效指标(KPI)和个性化着陆页面的同时,有一件事是在启动广告活动之前必须做的:确定哪些因素能使广告活动有效。 广告商很容易迷失在构成成功活动的各种指标中,但事实是&am…

20240912 每日AI必读资讯

OpenAI计划在接下来的两周内发布Strawberry - 独立产品:尽管草莓是ChatGPT的一部分,但它将作为一个独立的产品发布,具体如何提供尚不清楚。它可能会出现在用户选择的AI模型下拉菜单中,与现有服务有所不同。 - 推理功能&#xff…

红帽RHCE认证值不值得考?RHCE认证有什么用?

在IT行业,红帽认证作为一项衡量Linux技能水平的重要标准,受到了广泛的关注和认可。 拥有一张权威认证证书无疑是提升自身竞争力、实现职业发展的重要途径。 RHCE认证作为Linux领域的顶级认证之一,其价值和意义不言而喻。 那么,…

软件设计之JavaWeb(2)

软件设计之JavaWeb(2) 此篇应在MySQL之后进行学习: 路线图推荐: 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷全新JavaWeb教程,企业主流javaweb技术栈 资料可以去尚硅谷官网免费领取 此章节最好学完JDBC观看 学习内容: HTTP简介…

《Learning to Prompt for Vision-Language Models》CoOp论文中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要1 简介2 相关工作2.1视觉语言模型2.2 NLP中的提示学习 3 方法论3.1视觉语言预训练3.2上下文优化3.3讨论 4 实验4.1少数学习4.2领域泛化4.3进一步分析 5 结论、局限性和未来的工作 摘要 像CLIP这样的大型预训练视觉语言模型在学…

MM-PhyQA——一个专门处理高中物理选择题的 LLM 聊天机器人

概述 论文地址:https://arxiv.org/abs/2404.12926 人工智能的发展正在改变我们的学习方式。特别是使用大规模语言模型(LLM)的聊天机器人,通过提供个性化指导和即时反馈,极大地拓展了教育的可能性。 然而&#xff0c…

基于SpringBoot+Vue的二手物品交易系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的二手物品…

【网络安全】-文件包含漏洞-pikachu

文件操作漏洞包括文件上传漏洞,文件包含漏洞,文件下载漏洞。 文章目录 前言 : 什么是文件包含漏洞? 1.文件包含漏洞的分类: 本地文件包含漏洞: 远程文件包含漏洞: 2.两种文件包含漏洞的区别: 3.…

docker mysql 容器导入数据 .sql文件导入容器

docker mysql 容器导入数据 前言准备工作1、按需准备sql文件2、将文件上传服务器(宿主机)3、将sql文件复制进容器中 操作步骤1、进入容器内部2、进入数据库3、创建数据库4、切换数据库5、导入sql文件 前言 本文所涉及应用场景:远程部署环境…

某仿soul欲音社交系统存在任意文件读取漏洞

1 阅读须知 技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直…

【网络协议】了解一下HTTP 与 HTTPS 的区别

介绍: HTTP是超文本传输协议。规定了客户端(通常是浏览器)和服务器之间如何传输超文本,也就是包含链接的文本。通常使用TCP【1】/IP协议来传输数据,默认端口为80。 HTTPS是超文本传输安全协议,具有CA证书。…

面试必问的7大测试分类!一文说清楚!

在日常测试工作中,我们经常会听到“单元测试,集成测试,系统测试”之类的词汇,大家都知道这是按照开发阶段进行测试活动的划分。 这种划分完整的分类,其实是分为四种“单元测试,集成测试,系统测…

linux下使用cmake和libpng来对png图像进行读写

目标 在进行图像处理操作之前,首要任务是确保能够正确地读取图像。编写纯 C 语言代码进行图像处理时,不太适宜使用 OpenCV2。因此,为了遵循标准且便于操作,我们采用 libpng 的代码库来实现对 PNG 图像的读写。之所以选择在 Linux…

CentOS系统上Node.js安装与配置最佳实践

由于nvm下载node需要翻墙速度非常慢(试过很多次都不行),所以推荐手动安装,步骤也很简单 1、官网下载 打开官网 Node.js官网下载 选择自己系统合适的版本下载,我这里下载的是Linux x64的v18.20版本 2.上传服务器 将…