网络安全·第二天·ARP协议安全分析
今天我们来考虑考虑计算机网络中的一类很重要的协议-------ARP协议,介绍他用途的同时,分析分析ARP协议存在的一些漏洞及其相关的协议问题。
一、物理地址与IP地址
1、举例
在计算机网络中,有两类地址十分关键,一类称为物理地址,而另一类则被称为IP地址,那既然都是地址,这两种地址又有什么不同呢?这么设计的话是不是多此一举呢?
举个小小的例子,不知道大家有没有了解自己身份证号的规律,例如小明的身份证号是"32010120 0001015678",身份证号码是由18位数字组成的,前6数字表示所在省份、城市和区县的代码,例如320101标识江苏省南京市玄武区;第7~14位数字表示:出生年、月、日;第15、16位数字表示所在地的派出所的代码;第17位数字表示性别,奇数表示男性,偶数表示女性,第18位数字是校检码:校检码可以是0~9的数字,有时也用x表示。

所以,我们既可以用身份证号来表示一个人,当然也可以用一个人的名字来定义一个人。利用身份证号我们可以大致推算出一个人生活的区域,而利用好他的姓名,我们则能更为准确的找到他。毕竟,你不可能在玄武区大喊“32010120 0001015678,你在哪儿?回答我!嗯?"而是会问“李小明,你在哪儿?”
这就相当于IP地址和物理地址(也叫MAC地址)的关系,通过IP地址我们能找到主机所在的区域,而通过MAC地址我们能找到具体的主机。
大家如果想查询自己主机的MAC地址,可以看这篇文章:
查看电脑MAC地址(物理地址),以Win10为例 - 知乎
2、IPV4地址
IP地址:全称互联网协议地址(Internet Protocol Address),是网络设备在网络通信中的逻辑地址。它分为IPv4和IPv6两种类型,其中IPv4地址由32位二进制数组成,通常用点分十进制表示,如192.168.1.1;而IPv6地址则由128位二进制数组成,表示为更长的十六进制字符串。IP地址在网络层(第三层)的通信中起着至关重要的作用。它允许数据包在互联网上跨越不同的网络进行传输。当数据包从源设备发送到目的设备时,它会经过多个路由器和交换机,这些设备会根据数据包中的目的IP地址来决定其传输路径。因此,IP地址实现了全球范围内的设备互联和通信。IP分为IPv4与IPv6两大类,这里介绍一下最出名的IPv4协议。
IPv4地址被分为五类,主要用于区分不同规模的网络和标识网络中的设备。这五类地址分别是A类、B类、C类、D类和E类。下面是这些地址类别的基本特征和用途:
①A类地址
范围:1.0.0.0 到 126.255.255.255
第一个字节的最高位为0,剩下7位用于表示网络部分,后三个字节(24位)用于表示主机部分,通常分配给拥有大量主机的大型网络。
127.0.0.0/8这个范围内的地址主要用于环回测试,其中最常见的127.0.0.1是本机回环地址,发送到这个地址的数据包会被送到本地计算机的网络栈而不离开主机。
有一个私有地址范围:10.0.0.0 到 10.255.255.255,仅限内部网络使用,这个要了解NAT技术。
②B类地址
范围:128.0.0.0 到 191.255.255.255
前两个字节的最高两位为10,接下来14位用于网络部分,最后两个字节(16位)用于主机部分,适用于中型网络。
私有地址NAT范围为:172.16.0.0 到 172.31.255.255。
③C类地址
范围:192.0.0.0 到 223.255.255.255
前三个字节的最高三位为110,21位用于网络部分,最后一个字节(8位)用于主机部分,适合小型网络,是最常见的地址类型。
私有地址范围为:192.168.0.0 到 192.168.255.255。
④D类地址
范围:224.0.0.0 到 239.255.255.255
前四个字节的最高四位为1110,用于多播通信,即一对多的通信方式,不用于单个主机地址分配。
⑤E类地址
范围:240.0.0.0 到 255.255.255.255
前四个字节的最高四位为1111,保留作研究和未来使用,实际上不分配给任何网络或主机。
3、MAC地址
MAC地址:全称媒体访问控制地址(Media Access Control Address),是网络设备在网络通信中的物理地址。它通常由48位(6个字节)的二进制数组成,以十六进制形式表示,并由冒号(:)或连字符(-)分隔,如00:1A:2B:3C:4D:5E。MAC地址是网络设备在出厂时由制造商烧录到硬件中的,虽然他在功能上与我们每个人的大名相似,但是每个网络设备的MAC地址都是独一无二的,这一点却与身份证号一样。MAC地址在数据链路层(第二层)的通信中起着至关重要的作用。当数据包在局域网内传输时,源设备会根据目的设备的MAC地址将其封装在数据帧中,并通过物理媒介(如以太网电缆)发送给目的设备。因此,MAC地址确保了数据包能够在局域网内准确、高效地传输。
二、ARP协议的作用与过程
1、ARP的作用
无论网络层需要什么协议,在实际的网络的链路上传输数据帧时,最终必须使用MAC地址,所以需要一种协议来完成IP地址到MAC地址的映射,也可以解释为由IP地址找MAC地址的协议,这就是本篇博客介绍的主题:ARP协议。
2、APR映射流程
首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中读出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。源主机收到ARP响应包后,将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
注意1:广播(FFFF FFFF FFFF)发送ARP请求,单播发送ARP响应。
注意2:如果所要找的主机和源主机不在一个局域网上,那么就需要ARP协议找到一个位于本局域网的某个路由器的硬件地址,然后把分组发送给这个路由器,由这个路由器把分组转发给下一个网络。
光看上面这段文字会觉得很枯燥,但是如果你把这个流程想象成点名的过程,你又会觉得很好理解广播与单播的原因。假设,今天是武汉大学第一天新生报到,学生与辅导员第一次见面,彼此之间都不了解。计算机1班的学生李小萌编号为2025101想知道学生编号为2025250的同学叫什么,于是他首先会大喊一句:“谁的学生编号为2025250,你叫啥?”如果恰巧这个2025250在本班,那这个人会回复:“我叫刘昊!我是250!”,而其他在本班的人,听到这人要找的编号不是自己的编号,于是不去理会。

但是如果编号为2025250的学生不在计算机1班呢?这个时候就要体现出每个班上辅导员的作用了,这个李小萌会先问:“谁是辅导员?”找到辅导员之后,再把想找学生号为2025250的请求告诉辅导员,由辅导员去问隔壁班的辅导员:“你们班有没有编号为2025250的学生?他叫什么?”
三、ARP中毒及其解决方法
1、ARP中毒
由于ARP协议是无状态的,所以高速缓存可能会被恶意制作的ARP消息中毒(篡改)。这种攻击称为ARP缓存中毒攻击。在这种攻击中,攻击者使用欺骗ARP消息欺骗受害者接受无效的MAC-IP映射,并将映射存储在其缓存中。
具体来说,我们知道在局域网中的主机如果想访问互联网,那么他需要把报文交由路由器,通过路由器发给互联网上。例如下图中,如果左边这个戴眼镜的程序员想访问互联网,他就得先找到本网络路由器的MAC地址,但如果右边这个黑客伪造自己的IP地址是192.168.2.1,欺骗本网络其余的主机,路由器的MAC地址就是黑客的MAC地址,本网络的其余主机则会更新自己的ARP缓存表。那么,本网络所有的数据包都会流向这个黑客,这个黑客不论是进行中间人攻击还是去窃听,都会对本网络剩余的主机造成损失。

ARP攻击是根据ARP的特性以及IP地址的特性发起的,黑客是如何让其余主机相信自己的MAC地址就是路由器的MAC地址呢?主要有下面两种方式,其一每个主机的IP地址是可以变化的,所以需要及时的发出ARP免费包,让其余主机更新ARP表,使对方下次发送消息时不要发错位置了。黑客可以向网络中发出ARP免费包来骗取信任,让其余主机以为路由器接口的IP地址已经更改了。其二,黑客也可以通过ARP请求与响应的方式,来欺骗其余的主机,具体来说黑客伪造路由器想要查询IP地址为192.168.2.10的主机的MAC地址,按照正常的ARP报文,他会在本网络广播,源IP地址为192.168.2.1,源MAC地址为黑客的MAC地址,目标IP地址与目标MAC地址为全1广播。这样,在本网络的所有主机都收到了该广播报文,并且会去ARP缓存表中更新映射关系。这是利用了节点收到了ARP请求后无论要不要响应,该节点都会更新ARP表的原理,这也是ARP缓存表动态更新的特点。
2、防范措施
①在关键系统之间要设置静态的ARP项。比如在防火墙和边界路由器上设置静态的ARP项。这一点挺好理解的,针对的是ARP缓存表动态更新的特性,虽然好用但也破坏了动态性。
②更好的方法是在交换机上配置802.1x协议,这是基于端口的访问控制协议,它对连接到交换机的用户进行认证和授权。攻击者连接交换机时,需要验证身份,只有通过认证后才能向网络发送数据,这从根源上阻断了黑客攻击的可能。
好啦,如果你觉得本篇文章写的还算可以,请帮小编点一个免费的赞与收藏吧!

相关文章:
网络安全·第二天·ARP协议安全分析
今天我们来考虑考虑计算机网络中的一类很重要的协议-------ARP协议,介绍他用途的同时,分析分析ARP协议存在的一些漏洞及其相关的协议问题。 一、物理地址与IP地址 1、举例 在计算机网络中,有两类地址十分关键,一类称为物理地址&a…...
Python设计模式:命令模式
1. 什么是命令模式? 命令模式是一种行为设计模式,它将请求封装为一个对象,从而使您能够使用不同的请求、队列或日志请求,以及支持可撤销操作。 命令模式的核心思想是将请求的发送者与请求的接收者解耦,使得两者之间的…...
华为手机或平板与电脑实现文件共享
1.手机或平板与电脑在同一个网络 2.打开手机或平板端,设置---更多连接----快分享或华为分享打开此功能-----开启共享至电脑 3.打开电脑,网络中就可看到手机端分享的用户名称 4. 登陆就可访问手机 5.常见问题 5.1 电脑未发现本机 5.2 修改了访问密码后再…...
幻兽帕鲁(Palworld)在线工具集:让游戏体验更轻松!
幻兽帕鲁(Palworld)在线工具集:让游戏体验更轻松! 🎮 工具介绍 为了帮助广大幻兽帕鲁玩家更好地享受游戏,我开发了这个全面的在线工具集。无需下载安装,打开网页即可使用,完全免费! …...
学习51单片机Day02---实验:点亮一个LED灯
目录 1.先看原理图 2.思考一下(sbit的使用): 3.给0是要让这个LED亮(LED端口设置为低电平) 4.完成的代码 1.先看原理图 比如我们要让LED3亮起来,对应的是P2^2。 2.思考一下(sbit的使用&…...
【Kubernetes】Kubernetes 如何进行日志管理?Fluentd / Loki / ELK 适用于什么场景?
由于 Kubernetes 运行在容器化的环境中,应用程序和系统日志通常分布在多个容器和节点上,传统的日志管理方法(例如直接访问每个节点的日志文件)在 Kubernetes 中不适用。 因此,Kubernetes 引入了集中式日志管理方案&am…...
如何使用通义灵码学习JavaScript和DOM
如果你看到了本手册的页面数量,你就会发现JavaScript的API真的非常丰富,在MDN上专门有一大分类用于介绍JavaScript的API,但软件工程行业有一个著名法则叫2-8法则,意思是只有20%的内容会经常使用到,而80%的内容只在一些…...
Elasticsearch8.x集成SpringBoot3.x
Elasticsearch8.x集成SpringBoot3.x 配置项目引入依赖添加配置文件导入ca证书到项目中添加配置 实战操作创建mapping创建文档查询更新全量更新删除数据批量操作(bulk)基本搜索复杂布尔搜索嵌套(nested)搜索分页查询滚动分页查询After分页查询词条(terms)聚合日期聚合 配置项目 …...
基于labview的多功能数据采集系统
基于labview的多功能数据采集系统(可定制功能) 包含基于NI温度采集卡。电流采集卡。电压采集卡的数据采集功能 数据存储 报表存储 数据处理与分析 生产者消费者架构 有需要可联系...
250410异常记事
今天遇到一件极坑的事情,关于uni.setStorageSync: Invalid args: type check failed for args “key”. Expected String, got Boolean with value true. 项目是网上下的一个element-plus、uniapp 混搭的框架https://ext.dcloud.net.cn/plugin?id16396 异常代码如…...
小程序租赁系统源码功能分享
系统架构图解:技术栈与业务流程 设备租赁系统的架构可以分为三个主要部分:后台服务(SpringBoot MyBatisPlus MySQL)、用户端与师傅端(UniApp)、以及管理后台(Vue ElementUI)。下…...
30天学Java第八天——设计模式
装饰器模式 Decorator Pattern 装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许通过动态地添加功能来扩展对象的行为,而不需要修改原有的类。 这种模式通常用于增强对象的功能,与继承相比,使用…...
Linux 调试代码工具:gdb
文章目录 一、debug vs release:两种程序形态的本质差异1. 什么是 debug 与 release?2. 核心差异对比 二、为什么需要 debug:从项目生命周期看调试价值1. 项目开发流程中的调试闭环(流程图示意)2. Debug 的核心意义与目…...
SpringMVC基础一(SpringMVC运行原理)
先了解MVC,在JavaWeb基础五中。 回忆servlet,在javaweb基础二中。 创建一个web项目: 1、新建maven项目,导入依赖。(junit、springmvc、spring-webmvc、servlet-api、jsp-api、jstl) <groupId>org…...
Java权限修饰符深度解析
Java权限修饰符深度解析与最佳实践 一、权限修饰符总览 Java提供四种访问控制修饰符,按访问范围从宽到窄排序如下: 修饰符类内部同包类不同包子类全局范围public✔️✔️✔️✔️protected✔️✔️✔️❌默认(无)✔️✔️❌❌pr…...
Springboot JPA ShardingSphere 根据年分表
Spring Boot集成JPA与ShardingSphere实现按年分表,需重点关注分片算法选择、时间字段映射及动态表管理。以下是实现方案: 一、依赖配置 1. 核心依赖引入 <!-- ShardingSphere JDBC --> <dependency><groupId>org.apache.shardi…...
uniapp小程序生成海报/图片并保存分享
调研结果: 方法一:canvasuni.canvasToTempFilePath耗时太长,现在卡在canvas的绘制有问题,canvas绘制的部分东西不生效但是找不到原因 方法二:使用wxml-to-canvas其实也差不多是用canvas手动绘制,可能会卡在…...
蓝桥杯刷题--宝石组合
在一个神秘的森林里,住着一个小精灵名叫小蓝。有一天,他偶然发现了一个隐藏在树洞里的宝藏,里面装满了闪烁着美丽光芒的宝石。这些宝石都有着不同的颜色和形状,但最引人注目的是它们各自独特的 “闪亮度” 属性。每颗宝石都有一个…...
红宝书第三十一讲:通俗易懂的包管理器指南:npm 与 Yarn
红宝书第三十一讲:通俗易懂的包管理器指南:npm 与 Yarn 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、基础概念 包管理器:帮你自动下载和管理第三方代码库(如…...
进程状态的转换
进程处于运行态时,它必须已获得所需的资源,在运行结束后就撤销。只有在时间片到或出现了比现在进程优先级更高的进程时才转变成就绪态。 就绪 → 运行 触发条件:进程被调度器选中(如时间片轮转或优先级调度&…...
SpringAOP新链浅析
前言 在复现CCSSSC软件攻防赛的时候发现需要打SpringAOP链子,于是跟着前人的文章自己动手调试了一下 参考了大佬的文章 https://gsbp0.github.io/post/springaop/#%E6%B5%81%E7%A8%8B https://mp.weixin.qq.com/s/oQ1mFohc332v8U1yA7RaMQ 正文 依赖于Spring-AO…...
【动手学深度学习】现代卷积神经网络:ALexNet
【动手学深度学习】现代卷积神经网络:ALexNet 1,ALexNet简介2,AlexNet和LeNet的对比3, AlexNet模型详细设计4,AlexNet采用ReLU激活函数4.1,ReLU激活函数4.2,sigmoid激活函数4.3,为什…...
PyTorch深度学习框架60天进阶学习计划 - 第37天:元学习框架
PyTorch深度学习框架60天进阶学习计划 - 第37天:元学习框架 嘿,朋友们!欢迎来到我们PyTorch进阶之旅的第37天。今天我们将深入探索一个非常有趣且强大的领域——元学习(Meta-Learning),也被称为"学会学习"(Learning to…...
【中检在线-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
UE5 运行时动态将玩家手部模型设置为相机的子物体
在编辑器里,我们虽然可以手动添加相机,但是无法将网格体设置为相机的子物体,只能将相机设置为网格体的子物体 但是为了使用方便,我们希望将网格体设置为相机的子物体,这样我们直接旋转相机就可以旋转网格体࿰…...
EasyExcel-一款好用的excel生成工具
EasyExcel是一款处理excel的工具类,主要特点如下(官方): 特点 高性能读写:FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据。相比一些传统的 Excel 处理库,它能显著降低内存占用。…...
WEB攻防-Java安全JNDIRMILDAP五大不安全组件RCE执行不出网不回显
目录 1. RCE执行-5大类函数调用 1.1 Runtime方式 1.2 Groovy执行命令 1.3 脚本引擎代码注入 1.4 ProcessImpl 1.5 ProcessBuilder 2. JNDI注入(RCE)-RMI&LDAP&高版本 2.1 RMI服务中的JNDI注入场景 2.2 LDAP服务中的JNDI注入场景 攻击路径示例&#…...
UML组件图
一、UML 组件图 组件图(Component Diagram)主要用于描述系统的物理结构,用于展示可独立部署的软件模块(如微服务、动态链接库、API网关)及其交互关系。组件图中的主要元素包括: 组件(Component…...
DrissionPage移动端自动化:从H5到原生App的跨界测试
一、移动端自动化测试的挑战与机遇 移动端测试面临多维度挑战: 设备碎片化:Android/iOS版本、屏幕分辨率差异 混合应用架构:H5页面与原生组件的深度耦合 交互复杂性:多点触控、手势操作、传感器模拟 性能监控:内存…...
从 Excel 到你的表格应用:条件格式功能的嵌入实践指南
一、引言 在日常工作中,面对海量数据时,如何快速识别关键信息、发现数据趋势或异常值,是每个数据分析师面临的挑战。Excel的条件格式功能通过自动化的视觉标记,帮助用户轻松应对这一难题。 本文将详细介绍条件格式的应用场景&am…...
