ARP协议与ARP欺骗

news2025/1/11 17:08:10

一、ARP协议(地址解析协议)

所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程,ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

  • 将一个已知的IP地址解析为MAC地址,从而进行二层数据交互
  • ARP协议是一个三层协议,但是工作在二层,是一个2.5层协议

二、ARP映射

1.静态映射:手动创建ARP表,把逻辑(IP)地址和物理地址关联起来.

当知道目标网络的IP地址但不知道其物理地址时就可以通过查ARP表找出对应的物理地址,静态映射有一定的局限性,因为物理地址时可以发生变化的,以下是物理地址发生变化的几种情况:

01.机器更换NIC(网络适配器)

02.在局域网中,重启计算机时,物理地址会改变

03.笔记本电脑从一个局域网转移到另一个局域网时,IP地址会改变

2.动态映射:机器知道另一台机器的IP地址,就能通过协议找出向对应的物理地址.

01.ARP协议实现了逻辑地址到物理地址的动态映射

02.RARP协议实现了物理地址到逻辑地址的动态映射

3.ARP通信包含ARP请求和ARP响应两个阶段:

  • ARP请求:源主机向目标网络发出ARP请求,请求得到目标网络的MAC地址

任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。

  • ARP响应:目标主机收到源主机的请求后做出应答,将带有自己IP和MAC地址的报文返回给主机

局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。

三、ARP缓存与ARP报文格式

1.ARP缓存

ARP缓存的主要目的是为了避免重复去发送ARP请求,在Windows中可以通过命令对ARP进行管理.

#显示ARP缓存
C:\Users\Admin>arp -a
#清除ARP缓存
C:\Users\Admin>arp -d
#ARP绑定
C:\Users\Admin>arp -s IP地址 MAC地址
示例:
  > arp -s 157.55.85.212   00-aa-00-62-c6-09.... 添加静态项。

2.ARP报文格式

  •  硬件类型:16位字段,用来定义运行ARP的网络类型。每个局域网基于其类型被指派一个整数。例如:以太网的类型为1。ARP可用在任何物理网络上。
  • 协议类型:16位字段,用来定义使用的协议。例如:对IPv4协议这个字段是0800。ARP可用于任何高层协议
  • 硬件长度:8位字段,用来定义物理地址的长度,以字节为单位。例如:对于以太网的值为6。
  • 协议长度:8位字段,用来定义逻辑地址的长度,以字节为单位。例如:对于IPv4协议的值为4。
  • 操作码:16位字段,用来定义报文的类型。已定义的分组类型有两种:ARP请求(1),ARP响应(2)。
  • 源硬件地址:这是一个可变长度字段,用来定义发送方的物理地址。例如:对于以太网这个字段的长度是6字节。
  • 源逻辑地址:这是一个可变长度字段,用来定义发送方的逻辑(IP)地址。例如:对于IP协议这个字段的长度是4字节。
  • 目的硬件地址:这是一个可变长度字段,用来定义目标的物理地址,例如,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址。
  • 目的逻辑地址:这是一个可变长度字段,用来定义目标的逻辑(IP)地址,对于IPv4协议这个字段的长度为4个字节。
     

四、ARP攻击

当主机A 、主机B、主机C位于同一局域网中,主机A想要访问公网就必须先将数据发送到自己的网关,再由网关和公网进行通信.

  • 伪造ARP应答报文,向被攻击主机响应虚假的MAC地址
  • 当被攻击主机进行网络通信 时,会将数据交给虚假的MAC地址进行转发,由于虚假的MAc地址不存在,所以造成被攻击主机无法访问网络.

五、ARP欺骗

1.欺骗网关

主机A想要访问互联网网就必须先将数据交给自己的出口路由器,

  • 主机A发送ARP请求,攻击主机C 向主机A发送ARP应答,携带的是自己的MAC地址,主机A收到响应报文认为IP地址1.254对应的 MAC地址是33-33,
  • 与此同时,攻击机C向路由器发送arp响应,携带主机A的IP地址和自己真实的MAC地址,路由器收到主机C的应答后认为IP地址1.1对应的MAC地址是33-33,
  • 主机A在访问互联网时误以为主机C时自己的网关,就会将数据发送到主机C ,在主机C上开启IP转发功能,主机C收到数据向路由器转发,从而实现数据监听的效果.

2.欺骗主机

主机A要和主机B通信,主机A以广播方式发送ARP请求报文,携带自己的IP地址,MAC地址以及主机B的IP地址,主机C收到ARP请求后向主机A发送ARP应答,携带主机B的IP地址和 自己的MAC地址,再向主机B发送ARP应答,携带主机A的IP地址和自己的地址MAC,这样主机A向主机B发送数据时就会被主机C监听.

  • 伪造ARP应答报文,向被攻击主机响应真实的MAC地址
  • 当被攻击主机向通信主机发送数据时,会将数据交给真实的MAC地址进行转发,从而截获被攻击主机的数据,这是被攻击主机是可以进行网络通信的.

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

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

相关文章

169. 基于Django-RESTFramework的节流的使用

1.节流概述 节流又称限流,限制访问。 就是一个用户多次发送一个请求(页面或者链接)的时候,单位时间允许访问次数限制,超过限制就会出现访问受限,提示譬如:离下一场访问还有多久之类等的字样。 …

基于SSM的学生考勤管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【学习笔记】顺序容器的表格方式总结 C++

目录顺序容器及其特点顺序容器操作向顺序容器添加元素insertemplace参考更新中… 顺序容器及其特点 名字访问元素插入,删除元素vector(可变大小数组)支持快速随机访问在尾部之外的位置插入或删除元素可能很慢deque(双端队列&…

SpringBoot实战:整合MapStruct实现数据类型转化

MapStruct 是一个代码生成器,它基于约定优于配置方法极大地简化了 Java bean 类型之间映射的实现。自动生成的映射转换代码只使用简单的方法调用,因此速度快、类型安全而且易于理解阅读;本篇就是实现 SpringBoot 整合 MapStruct 实现数据类型…

[附源码]JAVA毕业设计小区物业管理系统演示录像2020(系统+LW)

[附源码]JAVA毕业设计小区物业管理系统演示录像2020(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09…

ffmpeg库安装及入门指南(Windows篇)- 2022年底钜献

最近项目需要,使用了 ffmpeg 做摄像头视频采集和串流。这几天有点时间,打算把相关的一些知识记录分享一下。 在撰写本文时,我又在另外一台电脑上把 ffmpeg 重新安装了一遍,所以绝对真实靠谱!如果你觉得文章写得还不错…

代码效果测试

ROBUST TEXT DETECTION IN NATURAL IMAGES WITH EDGE ENHANCED MAXIMALLY STABLE EXTREMAL REGIONS 代码地址:https://github.com/akab/TextDetection 基本步骤: 1)将原图转为灰度图; 2)使用OpenCV的canny函数进行边…

HTML -- 常用标签及示例总结

文章目录HTML常用标签1 标签语义1.1 标签属性2 标题标签 h1 - h63 段落和换行标签3.1 段落标签3.2 换行标签4 文本格式化标签5 div和span6 图像标签7 超链接标签7.1 链接的语法格式7.2 链接分类8 表格标签8.1 表格的主要作用8.2 表格的基本语法8.3 表头单元格标签8.4 表格属性8…

C语言随机数的产生(rand、srand、time函数细节讲解)

✨C语言随机数的产生随机数生成代码&#xff1a;rand函数&#xff1a;srand函数&#xff1a;time函数&#xff1a;time函数补充:time_t类型讨论time_t指针传入的讨论&#xff1a;随机数生成代码&#xff1a; 先上代码&#xff0c;再详细解释&#xff1a; #include<stdio.h…

Python数组数据处理办法清单

import numpy as np import pandas as pd import matplotlib.pyplot as plt#matplotlib 的字体&#xff08;font&#xff09;为黑体&#xff08;SimHei&#xff09; plt.rcParams[font.sans-serif] [SimHei, ] # matplotlib正确显示正负号 plt.rcParams[axes.unicode_minus] …

dfs序(树形结构线性化)

dfs序是将树形结构转换为线性结构的一种方式。 dfs序 dfs序&#xff1a; 指每个节点在dfs深度优先遍历中的进出栈的时间序列。 定义三个数组&#xff1a; in[x]&#xff1a;表示结点x 入栈的时间戳。 out[x]&#xff1a;表示结点x出栈的时间戳&#xff0c;特殊的&#xff0c;出…

Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)

目录 三次握手 四次挥手 我们来重点说说两个状态&#xff1a;CLOSE_WAIT和TIME_WAIT 【CLOSE_WAIT】 【TIME_WAIT】 各位好&#xff0c;博主新建了个公众号《自学编程村》&#xff0c;拉到底部即可看到&#xff0c;有情趣可以关注看看哈哈&#xff0c;关注后还可以加博主w…

Linux CENTOS安装mysql8 64位

1. 查看系统中是否已经安装了mariadb 执行&#xff1a;yum list installed | grep mariadb 若已经存在&#xff0c;则删除 执行&#xff1a; yum remove mariadb 2.下载需要安装的压缩文件&#xff0c;从官网下载&#xff0c;文件为名字为 mysql-8.0.31-linux-glibc2.12-x86_6…

S7-1200和1500PLC与条码枪建立TCP_IP通信的具体方法示例

S7-1200和1500PLC与条码枪建立TCP_IP通信的具体方法示例 今天和大家分享西门子S7-1200和1500PLC如何获取条码枪的扫描数据,这种案例中一般PLC作为TCP/IP的客户端(只接收数据,不发送数据),条码枪作为TCP/IP的服务器。 如下图所示,在指令—通信—开放式用户通信中可以找到相关…

洞察 | 软件定义汽车时代下,汽车制造产业的应对策略

汽车产业作为先进制造行业&#xff0c;伴随着数字化技术&#xff0c;电气化技术的迭代正快速的成长&#xff0c;而随着智能汽车、自动驾驶概念的提出&#xff0c;整车制造的软硬件复杂度也在持续提升&#xff0c;软件定义汽车转型已成整体汽车制造产业的共识。 据中国软件行业…

成长任务| 挑战代码画颗圣诞树

&#x1f384;立即投稿&#x1f384; &#x1f4cc;活动规则 圣诞将至&#xff0c;这次来试试用代码过圣诞吧~挑战圣诞树的一万种画法! √ 使用代码画一颗#圣诞树#&#xff0c;将你的代码文件通过本页面投稿&#xff0c;审核通过即可参与活动 √ 可使用任意编程语言&#xff…

【解纠缠表示:图像增强】

DRLIE: Flexible Low-Light Image Enhancement via Disentangled Representations &#xff08;DRLIE&#xff1a;基于解纠缠表示的柔性弱光图像增强&#xff09; 解纠缠表示 弱光图像增强&#xff08;Low-light image enhancement (LIME)&#xff09;是将亮度不理想的图像转化…

为了彻底弄懂CSS中的1px究竟有多长,我翻出了家里的卷尺

CSS是描述HTML文档如何显示的&#xff0c;在显示的过程中&#xff0c;HTML元素的长宽、间距、字体大小等等&#xff0c;都需要通过长度尺寸单位来表示。我们常常会说&#xff1a;字体大小16像素&#xff0c; 间距10个像素。这里的像素&#xff0c;就是CSS中的长度尺寸单位。一个…

软件测试行业真的不行了吗?那出路到底在哪?

下面这张图片&#xff0c;想必大家应该都知道~~~ 其实每个人都在金字塔里面&#xff0c;只不过大家的高低位置不同&#xff0c;当然&#xff0c;越在底层的人越多&#xff0c;越在高层的人越少~ 这也符合“二八定律”&#xff0c;“优胜劣汰”&#xff0c;“适者生存”~ 当你的…

c++中的this指针

1.this指针的引入 首先我们看下面这一段代码 class Date { public:void DateSet(int year, int month, int day){_year year;_month month;_day day;}void print(){cout << _year << "-" << _month << "-" << _day <…