网络安全·第三天·ICMP协议安全分析

news2025/4/16 21:38:57

一、ICMP功能介绍

ICMP(Internet Control Message Protocal)是一种差错和控制报文协议,不仅用于传输差错报文, 还传输控制报文,但是ICMP只是尽可能交付,提供的服务是无连接、不可靠的,并不能保证数据包可以成功的抵达目的地,同样的ICMP也没有验证机制,这也给了攻击者可乘之机。

ICMP的信息是通过IP协议进行传输,它是一种网络层协议,它对网络信息进行一种反馈,主要功能可以概括为①确认数据包可以送往目的IP地址 ②报告IP数据包无法送往的原因

ICMP有两个非常重要的工具—ping和traceroute,下面小编将介绍这两种工具的具体用法以及工作流程。

二、ping命令及其相关问题

1、工作流程

        ping 命令会发送一份ICMP回显请求报文(ICMP Echo Request)给目标主机,并等待目标主机返回ICMP回显应答(ICMP Echo Reply)。ICMP协议要求目标主机在收到请求消息之后,必须返回ICMP应答消息给源主机,基于这一点,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。但是这也同样使得黑客能发动Dos攻击,这一点我们在后面会讲述其过程。

        总而言之,ping是用来探测网络中两台主机之间是否可达的工具,ping工具的运行流程如下:

①.源主机ICMP协议工作

假设有两台主机,小李的主机IP地址为192.168.4.1,小伍的主机IP地址为192.168.4.2,小李想知道网络是否可达小伍的主机,于是他在自己windows主机的cmd上输入命令:ping 192.168.4.2。输入该命令后,主机A会构建一个 ICMP的请求数据包(ICMP Echo Request),然后 ICMP协议会将这个数据包以及目标IP192.168.4.2等信息一同交给IP层协议;

②.IP层工作

IP层协议得到这些信息后,将源地址192.168.4.1、目标地址192.168.4.2、再加上一些其它的控制信息,构建成一个IP数据包;

③.数据链路层工作

IP数据包构建完成后,还需要通过ARP协议找到相应的MAC地址,并且把目标地址与源地址的MAC地址一并交给数据链路层,组装成一个数据帧,将它们传送出出去;

④.目标主机ICMP协议工作

当小伍的主机收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,否则直接丢弃。接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP数据包取出来交给ICMP协议处理,当这一步也处理完成之后,就会构建一个ICMP应答数据包ICMP Echo Reply,回发给小李的主机;

⑤.计算时间并显示结果

在一定的时间内,如果小李的主机收到了应答包,则说明它与小伍的主机之间网络可达,如果没有收到,则说明网络不可达。除了监测是否可达以外,还可以利用应答时间和发起时间之间的差值,计算出数据包的延迟耗时,如下图“时间=xxx”所示。

2、几种常见的ICMP报文类型

        通过上述ping工具的介绍,我们知道了两类ICMP报文,ICMP Echo Request报文以及ICMP Echo Reply报文,其中ICMP Echo Request的类型值为8,ICMP Echo Reply的类型值为0。但其实ICMP不仅仅只有这两种报文,这两种报文都是属于ICMP中的询问报文,其余的ICMP报文类型小编总结如下:

①.差错报告报文

类型值为3时:表示终点不可达,顾名思义也就是说IP数据包送不到对方手上。

类型值为4时:表示源点抑制,意思是说,送的太快了,希望对方能慢点送过来。

类型值为11时:表示超时,与源点抑制相反,这个是嫌弃对方送的太慢了。

类型值为5时:表示路由重定向,告知对方下次应将数据报发送给另外的路由器

类型值为12时:表示参数问题,路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文

②.询问报文

类型值为8或者0时:表示回送(Echo)请求或应答。

类型值为13或14时:表示时间戳(Timestamp)请求或应答。

注意:以下情况下,并不会产生差错报告报文!

1.ICMP差错报文,例如ICMP源点抑制报文超时了,此时不会再额外发送一条ICMP报文告知超时的差错。但是ICMP查询报文可能会产生ICMP差错报文!

2.目的地址是广播地址或多播地址的IP数据报

3.作为链路层广播的数据报,这两条都是说的广播

4.不是IP分片的第一片,只有第一片出错才会产生差错报告报文

5.源地址不是单个主机的数据报。即源地址不能为零地址、环回地址、广播地址或多播地址。

3、ICMP Dos攻击

A.第一类ICMP Dos攻击针对带宽,是利用无用的数据来耗尽网络带宽 ,如ICMP Smurf,Smurf在IP协议安全协议的那篇文章中讲解过,都是伪造受害主机的源地址,向网络的广播地址发送大量的ping包,目标系统都很快就会被大量的echo reply信息淹没。

ICMP Dos的工作原理是ICMP协议要求目标主机在收到请求消息之后,必须返回ICMP应答消息给源主机,不理解的同学可以看看小编的这篇文章:

网络安全·第一天·IP协议安全分析-CSDN博客

B.第二类ICMP Dos攻击针对连接,这类方法可以终止现有的连接,如Nuke,通过发送一个伪造的类型为3的ICMP终点不可达的差错报告报文来终止合法的连接。

4、ICMP重定向攻击

        这个攻击与IP源路由欺骗很相似,黑客利用类型值为5的ICMP路由重定向差错报告报文来改变主机的路由表。自己伪装成路由器,向目标机器发送重定向消息,使目标机器的数据报发送至自己的主机上,从而实现监听、会话劫持或拒绝服务攻击。

5、死亡之ping

        这类攻击像极了小朋友耍赖的方式,给大家讲一个我小时候的经历,小编在初中时,同学们都有自己的小帮派,我当时想融入其中一个小帮派,并且被这个小帮派拉入了qq群中。但是后来,这个小帮派里面的人对我都不大友好,总是拉偏架,我在qq上争不过他们,于是就开始了“刷屏”,来恶心他们。当时qq的一条消息最长大概是四千多个字,小编长按句号键,直到抵达字数上限后发出。就这么发了几条长信息之后,群里的那些人崩溃了,他们的手机也变得一卡一卡的,小编也成功的被移除了群聊。

        死亡之ping的原理同样是刷屏,不断的给目标主机发送长度为65500字节的ping报文,对方阅读这条消息时带宽会有所损耗,当多条很长的ping报文发过去时,会将目标主机的带宽消耗殆尽,从而崩溃。

6、ICMP类攻击的防范

        首先,Nuke与重定向攻击都是利用的ICMP差错报告报文,我们可以阻止其它类型的ICMP通信,这可以在一定程度上防范ICMP出错。同时,还可以设置允许向外(目标为单台主机)发送 ICMP 响应请求,并允许向内发送响应答复消息(目标为预先定义的主机)。说白了就是,只允许本主机ping别人,而不允许别人ping自己,颇有种宁教我负天下人,休教天下人负我的意思。

三、traceroute命令

        traceroute是常用的网络排错工具,用于定位数据包在转发的过程中,经过了哪些路由器,并告知主机每一跳路由器的ip地址。在windows的环境下,如果我们想追踪ip地址为192.168.4.2的主机,则相应的命令的格式为:tracert  192.168.4.2

        traceroute的原理是:主机首先发出 TTL=1 的3个UDP数据包,抵达第一个路由器后,将 TTL 减1,此时TTL的值为0,不再继续转发此数据包,而是返回一个ICMP超时差错报文,主机可以从超时报文中提取出数据包所经过的第一个网关地址。然后又发出一个TTL=2的3个UDP数据包,可利用ICMP超时报文获得第二个网关地址,依次递类推,逐渐增加TTL的值,主机便可以获取沿途所有网关的地址。

好的,本期的博客到这里就结束啦,如果觉得小编写的还不错,麻烦给小编一个免费的点赞和收藏可以吗?

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

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

相关文章

SpringBoot对接火山引擎大模型api实现图片识别与分析

文章目录 一、前言二、创建应用三、后端1.SDK集成2.调用Rest API 四、前端 一、前言 Spring AI实战初体验——实现可切换模型AI聊天助手-CSDN博客 如上,在上一篇博客,我们已经实现了spring ai对接本地大模型实现了聊天机器人,但是目前有个新…

单片机方案开发 代写程序/烧录芯片 九齐/应广等 电动玩具 小家电 语音开发

在电子产品设计中,单片机(MCU)无疑是最重要的组成部分之一。无论是消费电子、智能家居、工业控制,还是可穿戴设备,小家电等,单片机的应用无处不在。 单片机,简而言之,就是将计算机…

ARCGIS PRO 在已建工程地图中添加在线地图

一、手工添加 如图所示: 1、在上方的菜单栏中点击“插入”,选择“连接” 2、新建ArcGIS Server 3、在弹出框中输入在线图集的URL,点击“确定” https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer 4、查看在…

ScholarCopilot:“学术副驾驶“

这里写目录标题 引言:学术写作的痛点与 AI 的曙光ScholarCopilot 的核心武器库:智能生成与精准引用智能文本生成:不止于“下一句”智能引用管理:让引用恰到好处 揭秘背后机制:检索与生成的动态协同快速上手&#xff1a…

MATLAB仿真多相滤波抽取与插值的频谱变化(可视化混叠和镜像)

MATLAB画图仿真多相滤波抽取与插值的频谱变化 可视化多速率信号处理抽取与插值的频谱变化 实信号/复信号 可视化混叠和镜像 目录 前言 一、抽取的基本原理 二、MATLAB仿真抽取运算 三、内插的基本原理 四、MATLAB仿真内插运算 总结 前言 在多速率系统中增加信号采样率的运…

MySQL-存储引擎索引

存储引擎 MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念,为通过认证安…

图像处理有哪些核心技术?技术发展现状如何?

在数字化信息爆炸的时代,文档图像预处理技术正悄然改变着我们处理文字信息的方式。无论是手持拍摄的收据、扫描仪中的身份证,还是工业机器人采集的复杂文档,预处理技术都在背后默默提升着OCR(光学字符识别)系统的性能。…

【小沐学GIS】基于C++绘制三维数字地球Earth(QT5、OpenGL、GIS、卫星)第五期

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GIS】…

spring cloud OpenFeign 详解:安装配置、客户端负载均衡、声明式调用原理及代码示例

OpenFeign 详解&#xff1a;安装配置、客户端负载均衡、声明式调用原理及代码示例 1. OpenFeign 安装与配置 (1) 依赖管理 <!-- pom.xml 添加以下依赖 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud…

用 Deepseek 写的uniapp血型遗传查询工具

引言 在现代社会中&#xff0c;了解血型遗传规律对于优生优育、医疗健康等方面都有重要意义。本文将介绍如何使用Uniapp开发一个跨平台的血型遗传查询工具&#xff0c;帮助用户预测孩子可能的血型。 一、血型遗传基础知识 人类的ABO血型系统由三个等位基因决定&#xff1a;I…

【眼底辅助诊断开放平台】项目笔记

这是一个标题 任务一前端页面开发&#xff1a;后端接口配置&#xff1a; 任务二自行部署接入服务 日志修改样式和解析MD文档接入服务 Note前端登陆不进去/更改后端api接口304 Not Modifiedlogin.cache.jsonERR_CONNECTION_TIMED_OUT跨域一般提交格式proxy.ts src/coponents 目录…

Java笔记5——面向对象(下)

目录 一、抽象类和接口 1-1、抽象类&#xff08;包含抽象方法的类&#xff09; 1-2、接口 ​编辑​编辑 二、多态 ​编辑 1. 自动类型转换&#xff08;向上转型&#xff09; 示例&#xff1a; 注意&#xff1a; 2. 强制类型转换&#xff08;向下转型&#xff09; 示…

NI的LABVIEW工具安装及卸载步骤说明

一.介绍 最近接到个转交的项目&#xff0c;项目主要作为上位机工具开发&#xff0c;在对接下位机时&#xff0c;有用到NI的labview工具。labview软件是由美国国家仪器&#xff08;NI&#xff09;公司研制开发的一种程序开发环境&#xff0c;主要用于汽车测试、数据采集、芯片测…

[reinforcement learning] 是什么 | 应用场景 | Andrew Barto and Richard Sutton

目录 什么是强化学习&#xff1f; 强化学习的应用场景 广告和推荐 对话系统 强化学习的主流算法 纽约时报&#xff1a;Turing Award Goes to 2 Pioneers of Artificial Intelligence wiki 资料混合&#xff1a;youtube, wiki, github 今天下午上课刷到了不少&#xff0…

[从零开始学数据库] 基本SQL

注意我们的主机就是我们的Mysql数据库服务器 这里我们可以用多个库 SQL分类(核心是字段的CRUD)![](https://i-blog.csdnimg.cn/img_convert/0432d8db050082a49258ba8a606056c7.png) ![](https://i-blog.csdnimg.cn/img_convert/bdf5421c2b83e22beca12da8ca89b654.png) 重点是我…

git 提交标签

Git 提交标签 提交消息格式&#xff1a; <type>: <description> &#xff08;示例&#xff1a;git commit -m "feat: add user login API"&#xff09; 标签适用场景feat新增功能&#xff08;Feature&#xff09;。fix修复 Bug&#xff08;Bug fix&…

关于 Spring Batch 的详细解析及其同类框架的对比分析,以及如何自己设计一个java批处理框架(类似spring batch)的步骤

以下是关于 Spring Batch 的详细解析及其同类框架的对比分析&#xff1a; 一、Spring Batch 核心详解 1. 核心概念 作业&#xff08;Job&#xff09;&#xff1a;批处理任务的顶层容器&#xff0c;由多个步骤&#xff08;Step&#xff09;组成。 步骤&#xff08;Step&#…

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【论文篇+改进】A题解题全流程(持续更新)

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【论文篇改进】A题解题全流程&#xff08;持续更新&#xff09; 写在前面&#xff1a; 我是一个人&#xff0c;没有团队&#xff0c;所以出的比较慢&#xff0c;每年只做一次赛题&#xff0c;泰迪杯&#xff0c;我会认真对…

数据结构——哈希详解

数据结构——哈希详解 目录 一、哈希的定义 二、六种哈希函数的构造方法 2.1 除留取余法 2.2 平方取中法 2.3 随机数法 2.4 折叠法 2.5 数字分析法 2.6 直接定值法 三、四种解决哈希冲突的方法 3.1 开放地址法 3.1.1 线性探测法 3.1.2 二次探测法 3.2 链地址法 3…

Spark-SQL核心编程

简介 Hadoop与Spark-SQL的对比 Hadoop在处理结构化数据方面存在局限性&#xff0c;无法有效处理某些类型的数据。 Spark应运而生&#xff0c;特别设计了处理结构化数据的模块&#xff0c;称为Spark SQL&#xff08;原称Shark&#xff09;。 SparkSQL的发展历程&#xff1a; Sp…