TCP/IP详解——ARP 协议

news2024/11/16 20:23:41

文章目录

  • 一、ARP 协议
    • 1. ARP 数据包格式
    • 2. ARP 工作过程
    • 3. ARP 缓存
    • 4. ARP 请求
    • 5. ARP 响应
    • 6. ARP 代理
    • 7. ARP 探测IP冲突
    • 8. ARP 协议抓包分析
    • 9. ARP 断网攻击
    • 10. 总结

一、ARP 协议

ARP(Address Resolution Protocol)协议工作在网络层和数据链路层之间,通常被认为是一个跨两层的协议。

当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的

image-20230719110609039

1. ARP 数据包格式

image-20230719110733692

说明

  • Hardware Type:表示硬件地址类型,一般为MAC地址。它的值为1表示以太网地址
  • Protocol Type:表示三层协议地址类型,一般为IP。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
  • Hardware LengthProtocol Length:表示MAC地址和IP地址的长度,单位是字节。值分别是6和4。(6 * 8=48,4 * 8 = 32)
  • Operation Code指定了ARP报文的类型,包括ARP RequestARP Reply。(1为ARP请求,2为ARP应答)
  • Source Hardware Address:指的是发送ARP报文的设备MAC地址(源MAC地址)
  • Source Protocol Address:指的是发送ARP报文的设备IP地址(源IP地址)。
  • Destination Hardware Address:指的是接收者MAC地址,在ARP Request报文中,该字段值为0(目的MAC地址)。
  • Destination Protocol Address:指的是接收者的IP地址(目的MAC地址)。

ARP Request 请求包

image-20231118151145102

ARP请求是广播包,并且数据包长度不够的话会补齐,最小长度是46,但是正常的ARP只有28,所以会使用PAD字段进行补齐。

image-20231118211440760

image-20231118154420384

ARP Reply 响应包

image-20231118151252217

ARP响应是单播

image-20231118153922513

2. ARP 工作过程

image-20230719111056258

通过ARP协议,建立目的IP地址和MAC地址的映射。通过网络层获取目的IP地址还要判断目的MAC地址是否已知。如在主机A发送数据给主机C时,首先获取主机C的MAC地址。同时主机B是看不到主机A和主机C之间的单播包的。

3. ARP 缓存

image-20230719111127528

image-20230719112616449

存放IP地址和MAC地址关联信息

  • 发送信息前,查找ARP缓存表,存在对方MAC地址,直接封装成帧。如果不存在,通过发送 ARP Request报文获取对方MAC地址。如果目标在其他网络,源设备会先查找网关MAC地址,将数据发给网关,再转发。
  • IP和MAC关系映射关系会放入ARP缓存表一段时间,有效期内都可查到,过了这个有效期会自动删除

Windows查看ARP缓存表

arp -a

image-20231118151940222

清空ARP表

arp -d

4. ARP 请求

image-20230719111427578

主机A 的 ARP 缓存表中不存在主机C 的 MAC 地址,所以主机A 会发送 ARP Request 来获取目的 MAC 地址。

ARP Request 报文封装在以太帧里。帧头中的源MAC地址为发送端主机A 的 MAC 地址。

此时,由于主机A不知道主机C 的 MAC 地址,所以目的 MAC 地址为广播地址 FF-FF-FF-FF-FF-FF。(注意:目的 MAC 地址FF-FF…是帧头部中的,目的 MAC 地址00-00…是 ARP 请求包中里的内容。)

ARP Request 报文中包含源 IP 地址、目的 IP 地址、源 MAC 地址、目的 MAC 地址,其中目的 MAC 地址的值为0。

ARP Request 报文会在整个网络上传播(广播),该网络中所有主机包括网关都会接收到此 ARP Request 报文。所有设备收到 ARP 请求后,主机C 检查请求中的目标 IP 地址是否与自己的 IP 地址匹配。如果匹配,主机C 会发送一个ARP 响应给主机 A(单播)。主机A 接收到主机C 的 ARP 响应后,会将主机C 的 IP 地址和 MAC 地址的映射关系存储在自己的 ARP 缓存表中,以便将来的通信中使用。

网关将会阻止该报文发送到其他网络上

5. ARP 响应

image-20230719111919845

image-20230719112158710

主机C会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为Reply(Operation Code:指定了ARP报文的类型,包括ARP Request和ARP Reply。)。ARP Reply报文通过单播传送。

这样主机A就可以拿到主机C的mac地址,从而封装报文进行数据发送。

ARP请求

  • 帧头的目的MAC用广播形式进行发送,ARP请求包中的目的MAC值为0,操作类型为Request。同时,网关会阻止该报文发送到其他网络。
  • 所有主机收到后,会检查IP地址是否匹配,不匹配则不响应,匹配后主机C把源MCA和IP地址将记录到自己ARP缓存表中。发送ARP Reply进行响应。

ARP响应

  • 向主机A发送的ARP Reply报文,源地址和源MAC都是主机C的地址,操作类型为Reply,以单播形式传送。
  • 主机A收到Reply报文后,检查MAC地址是否匹配,然后将源MAC和源IP地址记录主机A的ARP缓存表中。

6. ARP 代理

在某些情况下,网络中可能会存在ARP代理。ARP代理是一种允许一个设备(代理)代表其他设备进行ARP请求和响应的网络配置模式。当一个设备需要发送数据到另一个子网或者在本地网络上没有直接连接的目标主机时,它可以将ARP请求发送给代理设备。

image-20230719112546644

说明

  • 同一网段,不同物理网络上的计算机之间,通过ARP代理进行相互通信,默认所有的路由器是不开起ARP代理的。因为路由器无法转发广播报文,主机B收不到ARP Request报文,也无法进行应答。

  • 路由开启代理ARP功能后,路由器收到ARP Request报文后会先去查找路由表,如果存在主机B的路由表,那么路由器会把自己的G0/0/0接口作为MAC地址回应主机A。主机A通过该MAC地址进行数据转发。

  • 主机A 在子网A 中发送一个ARP请求,用来寻找子网B 中的主机B 。路由器R 作为ARP代理收到了ARP请求,这个时候路由器R 会先去查找路由表,发现没有主机B 路由表。然后会在子网B中发送一个ARP请求,寻找主机B的MAC地址。主机B在收到ARP请求后,发送ARP响应,其中响应包中包含了主机B的MAC地址。而路由器收到主机B的ARP响应后,会把自己的G0/0/0接口MAC地址信息返回给主机A,完成ARP代理的全部过程。

ARP协议的一个特性是“后到优先

  • 在某些网络环境中,使用ARP代理可以允许多个设备对同一个IP地址进行ARP请求和响应。当多个设备同时发送ARP请求时,代理设备会收到多个ARP请求,并根据其自身的优先级规则进行处理。具体而言,在ARP代理中,后到的ARP请求会覆盖先前的ARP请求,从而实现"后到优先"的特性。
  • 这意味着,如果有多个设备对同一个IP地址发送ARP请求,只有最后一个到达的设备的ARP响应会被接受并记录在ARP缓存中。其他先前的ARP响应将被忽略。因此,后到的设备将成为该IP地址的代理,并负责处理与该IP地址相关的数据包。

image-20231127151816523

在配置路由的时候,如果只写出接口的话就会存在ARP代理的“后到优先”。

上图中R2先进行了ARP回复,那么路由器R1作为ARP代理会记录的是R2路由器的MAC地址。如果路由器R3在之后回复路由器R1,那么后到的会覆盖先前回复的。

7. ARP 探测IP冲突

当局域网中的某台主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。

如下:主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

image-20230719113036351

8. ARP 协议抓包分析

开启虚拟机,该虚拟机的网卡设置为桥接。

image-20231118150855033

真实机开始 ping 虚拟机的 IP 地址。

image-20231118150907277

同时Wireshark抓包

image-20231118150952386

9. ARP 断网攻击

ARP欺骗原理

在局域网中,主机通信前必须通过ARP协议把IP地址转换为MAC地址,ARP欺骗就是通过伪造IP地址与MAC地址的映射关系实现的一种欺骗攻击。因为局域网内的主机根据MAC地址进行通信,发送方检查其ARP缓存中是否已存储目标IP的MAC地址,否则它会广播发送ARP请求报文,只有目标IP的主机才会响应一个包含其MAC地址的ARP应答报文,发送方收到该应答后,立即更新自身的ARP缓存。攻击者可以发送虚假的ARP请求或应答报文,使得目标主机接收错误的IP和MAC绑定关系。

image-20230707203119205

流程:pc1想与pc2通信时,先在arp缓存表(arp -a)中查看pc2(10.9.136.55)的mac地址,若没有,则会发送广播包:”谁是10.9.136.55“给交换机,交换机给每个端口都会广播发送一个请求包:”谁是10.9.136.55“,正常来说只有pc2会收到这个请求包然后会发送一个应答包:“我是10.9.136.55,我的mac地址是mac2”发送给交换机,交换机会发送给pc1,因为是pc2应答pc1的应答包,pc1接收到应答包后会更新自己的arp缓存表。

arp缓存表中存入了大量的IP地址与MAC地址的映射。

image-20230707192649623

ipconfig /all # 查看网关接口

image-20230707194134274

arp -a #mac地址缓存表(ip地址与mac地址映射表)

找到网关的MAC地址。

image-20230707194335154

现在通过网关访问百度,必然要和路由器进行通信。局域网里面的通信会先去arp缓存表中查找有没有网关对应的MAC地址。

本来和网关是不能通信的,现在通过ARP广播找到了网关的IP地址和MAC地址映射到ARP缓存表中。

攻击者可以发送虚假的ARP请求或应答报文,使得目标主机接收错误的IP和MAC绑定关系。那么发送给百度的数据就不再走网关了,而是到攻击者那里。如果攻击者拦截数据包不进行转发的话,本机就会断网。

攻击实验

win7中的网关是192.168.188.2

image-20230707200209873

对应网关的MAC地址

image-20230707200328724

然后开始ping百度,这个时候可以一直ping

image-20230707200429890

通过kali发起ARP断网攻击,开启终端输入命令如下:

arpspoof -i etho -t 192.168.188.130 -r 192.168.188.2

说明

  • arpspoof:是一款进行arp欺骗的工具,攻击者可以通过它来毒化受害者arp缓存,将网关mac替换为攻击者mac,然后攻击者可截获受害者发送和收到的数据包,可获取受害者账户、密码等相关敏感信息。

  • -i:指定要使用的接口(即指定一块网卡)。

  • etho:这个网卡和网关属于同一网段的。

  • -t:是要攻击的IP地址(这里是Win7的IP地址)。

  • -r:是网关的IP地址。

image-20230707200809771

发起攻击

image-20230707201227394

发起攻击后Win7已经不能和百度进行通信了

image-20230707201240007

检查Win7的ARP缓存表

image-20230707201451792

之前网关对应的MAC地址是00-5a-56-ee-91-e6,而现在对应的是00-0c-29-70-2e-59。而这个00-0c-29-70-2e-59MAC地址正是Kali的MAC地址。

预防措施

  1. 客户端静态绑定网关的真实MAC地址。
  2. 在交换机和路由器上设置端口与MAC地址的静态绑定。
  3. 定期检测自身的ARP缓存,检测是否有MAC地址相同的不同表项,即可发现异常。
  4. 使用防火墙持续监控ARP缓存,检测异常变化。

10. 总结

  • 网络设备在什么情况下发送ARP Request

    • 源设备在发送数据给目的设备前,会首先查看自身的ARP缓存,查找ARP缓存中是否存在目的设备的IP地址和MAC地址的映射。如果存在则直接使用,如果不存在则会发送ARP Request。
  • 网络设备什么时候产生免费ARP

    • 当网络上的一个设备被分配了IP地址或者IP地址发生变更后,可以通过免费ARP来检查IP地址是否冲突。

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

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

相关文章

RLC防孤岛负载测试的操作和维护

孤岛现象是指当电网因故障或停电而与主电网断开连接时,某些部分仍然保持供电的现象。这种情况下,如果电力系统的保护设备不能及时检测到孤岛并切断供电,可能会导致严重的安全事故。因此,进行RLC防孤岛负载测试对于确保电力系统的安…

【MySQL】安装和配置mysql

环境:Centos 7 删除不需要的环境 查看是否有正在运行的服务: ps ajx |grep mysqlps ajx |grep mariadb切换为root用户, 如果存在有服务 systemctl stop mariadb.service 或者 systemctl stop mysqld查看系统下的mysql安装包并删除&#xf…

linux文本处理sed

sed常用命令详解 sed (Stream EDitor) a append,对文本追加,在指定行后面添加一行/多行文本c 取代,替换d Delete,删除匹配行i insert,表示插入文本,在指定行前添加一行/多行文本p …

工业磷酸行业分析:中国市场产能及消费发展研究

工业磷酸主要用于电镀工业、医药工业、磷酸盐工业及冶金工业等。磷酸蒸汽对皮肤有较强的腐蚀作用,工作人员应注意保护呼吸器官和皮肤。预计工业级磷酸一铵将在一定时期内保持供应趋紧的市场格局,其市场价格有望保持相对高位运行。 业磷酸纯品为无色透…

蛋白质的上位性效应及突变影响的范式

直接性上位效应 在这张图片中 : 1)相互作用的氨基酸形成有利接触(H和T具有H键相互作用) 2)H和P的空间叠加,属于不利的上位姓效应 3)V和P具有更高的自由度,因此需要的能量更低&#…

fastapi-amis-admin快速创建一个后台管理系统增加音乐管理功能(3)

fastapi_amis_admin 是一个功能强大的框架,旨在帮助开发者在使用 FastAPI 进行 web 开发时,能够快速创建一个高效且易于管理的后台界面。通过结合 FastAPI 和 amis 的优势,fastapi_amis_admin 提供了一种简洁而高效的方式来构建和管理 web 应…

03进程基础-学习笔记

Process 进程 进程为操作系统的基本调度单位,占用系统资源(cpu,内存)完成特定任务,所有说进程是操作系统的标准执行单元 进程与程序的差别 程序是静态资源,存储与电脑磁盘中(disk磁盘资源)程序执行后会创建进程,负责完成功能&a…

软件测试(接口测试业务场景测试)

软件测试 手动测试 测试用例8大要素 编号用例名称(标题)模块优先级预制条件测试数据操作步骤预期结果 接口测试(模拟http请求) 接口用例设计 防止漏测方便分配工具,评估工作量和时间接口测试测试点 功能 单接口业…

计算机网络安全原理习题参考答案

1.9习题 一、单项选择题 1. ISO 7498-2从体系结构的角度描述了5种可选的安全服务,以下不属于这5种安全服务的是(  D  ) A. 数据完整性   B. 身份鉴别   C. 授权控制   D. 数据报过滤 2. ISO 7498-2描述了8种特定的安全机制&…

漏洞复现-iDocview某接口存在任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

QT 入门

目录 QT 概述 QT5安装 QT环境介绍 编写第一个QT的程序 QT项目文件介绍 QT 概述 QT简介 QT是一个跨平台的C图形用户界面应用程序框架。它为程序开发者提供图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正地组件编程。 QT的发…

JVM虚拟机:如何查看JVM的XX参数?

本文重点 在学习XX参数之前,我们先来学习一下,如何查看当前程序所配置的xx参数。 查询JVM的xx参数的命令 jps -l (查询正在运行的java进程) jinfo -flag 参数名 进程号 (查看该进程程序的参数的值) jinfo -flags 进程号 (查看该进程程序中所有参数的值) 举例 查看所有的…

华为交换机——配置策略路由(基于IP地址)示例

一、组网需求: 汇聚层Switch做三层转发设备,接入层设备LSW做用户网关,接入层LSW和汇聚层Switch之间路由可达。汇聚层Switch通过两条链路连接到两个核心路由器上,一条是高速链路,网关为10.1.20.1/24;另外一…

pytorch:to()、device()、cuda()将Tensor或模型移动到指定的设备上

将Tensor或模型移动到指定的设备上:tensor.to(‘cuda:0’) 最开始读取数据时的tensor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上进行在做高维特征运算的时候,采用GPU无疑是比用CPU效率更高,如果两个数据中一个加了…

Vue3安装使用Mock.js--解决跨域

首先使用axios发送请求到模拟服务器上,再将mock.js模拟服务器数据返回给客户端。打包工具使用的是vite。 1.安装 npm i axios -S npm i mockjs --save-dev npm i vite-plugin-mock --save-dev 2.在vite.config.js文件中配置vite-plugin-mock等消息 import { viteMo…

数据库——存储过程及游标

智能2112杨阳 一、目的与要求: 1、掌握存储过程的工作原理、定义及操作方法 2、掌握函数的工作原理、定义及操作方法 3、掌握游标的工作原理、定义及操作方法 二、内容: 1. 创建存储过程,用来自动统计给定订单号的订单总金额 源码&…

.NET 反射优化的经验分享

比如针对 GetCustomAttributes 通过反射获取属性的优化,以下例子 // dotnet run -c Release -f net7.0 --filter "*" --runtimes net7.0 net8.0public class Tests{public object[] GetCustomAttributes() => typeof(C).GetCustomAttributes(typeof(MyAttribute…

Windows server 2016 如何禁止系统自动更新

1.打开“运行”,输入cmd,点击“确定”。 2.输入sconfig,然后按回车键。 3.输入5,然后按回车键。 4.示例需要设置为手动更新,即输入M,然后按回车键。 5.出现提示信息,点击“确定”即可。

第四十一篇:移动端调试工具

1.下载工具 npm install vconsole 2.在main.js里全局引用 > import Vconsole from vconsole > new Vconsole()

Python面向对象三大特征(python系列20)

1.封装 定义: 数据角度:将基本数据类型复合成一个自定义类型。 作用:可读性更高,将数据与对数据的操作相关联。 行为角度:对类外提供必要的功能,隐藏实现的细节 作用:让调用者不必了解实现代码&…