网络协议:ICMP协议及实用工具介绍
目 录
一、ICMP介绍
1、概述
2、功能
3、特点
二、ICMP的数据报文
三、ICMP相关工具
四、主要ICMP工具应用
1、Ping
2、Traceroute
(1) 方法1:
(2)方法2:
3、Nmap
一、ICMP介绍
1、概述
ICMP(Internet Control Message Protocol)协议是TCP/IP协议簇中的一个子协议,用于在IP主机和路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息用于诊断和故障排除,或者用于管理和控制网络设备。
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 它属于网络层协议,
ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
2、功能
ICMP协议的主要功能包括:
(1)错误报告:当数据包无法到达目的地时,ICMP可以报告错误信息,例如“目标不可达”或“路由不可用”。这对于诊断和解决网络问题非常重要。
(2)ping:这是最常用的ICMP应用。ping命令通过发送ICMP回应请求消息到目标主机,然后等待回应,来测试与目标主机的连接状态。这对于网络诊断和故障排除非常有用。
(3)路由跟踪:通过发送ICMP的“traceroute”请求消息,可以跟踪数据包从源主机到目标主机经过的路由路径。这对于了解数据包的传输路径和诊断路由问题非常有用。
(4)控制消息:ICMP允许主机和路由器之间传递控制消息,如请求或命令数据包重发,或要求主机或路由器降低发送数据的速率。这对于流量控制和拥塞控制非常有用。
(5)帮助诊断和解决网络问题:通过使用ICMP,网络管理员可以诊断和解决各种网络问题,如网络连接问题、路由问题、防火墙配置问题等。这对于维护网络的正常运行非常重要。
3、特点
ICMP协议的主要特点包括:
(1)无连接:ICMP协议不需要建立连接,它可以直接在IP主机和路由器之间传递控制消息。
(2)不可靠:ICMP协议本身是不可靠的,它不会重传或确认消息。但是,它可以通知发送方在传输过程中发生的问题,以便进行适当的处理。
(3)面向无数据报文:ICMP消息作为IP数据报文来传送,但它本身不传送数据。因此,它不会增加数据传输的延迟和开销。
(4)应用广泛:除了ping和traceroute等常用工具外,许多其他网络工具和应用也使用ICMP协议来诊断和解决网络问题。
(5)不安全:ICMP协议本身不提供加密和身份验证功能,因此在使用时需要谨慎处理敏感信息,并采取其他安全措施来保护网络通信。
二、ICMP的数据报文
ICMP报文的种类有三大类种,即ICMP差错报告报文、控制报文、请求/应答报文。
各大类型报文又分多种类型报文。如下图:

三、ICMP相关工具
在网络中经常会使用到ICMP协议,ICMP有很多应用和工具,例如:
- ping:这是最常用的ICMP工具,用于测试与目标主机的连接状态。
- traceroute:这个工具可以跟踪数据包从源主机到目标主机经过的路由路径。
- LOIC(Low Orbit ICMP)和Hping3:这两个工具都可以用于生成和发送自定义的ICMP数据包,通常用于网络测试和性能测量。
- PULING(Packet Sender):这是一个开源的网络测试工具,可以用来发送自定义的ICMP数据包。
- MTR(My Traceroute):这是一个网络诊断工具,结合了ping和traceroute的功能,可以显示数据包经过的路由节点信息。
- Nping:这是Nmap项目的一部分,可以用来发送自定义的ICMP数据包,通常用于网络扫描和安全审计。
- hping:这是一个命令行的网络测试工具,可以生成和发送自定义的ICMP数据包。
- Icmpush:这是一个用于发送ICMP数据包的Python库,可以用于自动化网络测试。
这些工具和应用都是基于ICMP协议开发的,主要用于网络测试、诊断、性能测量和安全审计等方面。
四、主要ICMP工具应用
这里介绍三种基于ICMP的简单而广泛使用的应用工具,分别为:Ping , Traceroute,MTU测试等
1、Ping
使用ICMP回送和应答消息来确定一台主机是否可达。
比如经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

2、Traceroute
该程序用来确定通过网络的路由IP数据报。Traceroute基于ICMP和UDP。它把一个TTL为1的IP数据报发送给目的主机。第一个路由器把TTL减小到0,丢弃该数据报并把ICMP超时消息返回给源主机。这样,路径上的第一个路由器就被标识了。随后用不断增大的TTL值重复这个过程,标识出通往目的主机的路径上确切的路由器系列.
继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL为1的IP数据报,也不会丢弃该数据并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。那么如何判断是否已经到达目的主机了呢?
Traceroute实现有两种方法:
(1) 方法1:
发生一个ICMP回应请求报文;目的主机将会产生一个ICMP回应答复报文。Microsoft实现(tracert)中采用该方法。
当回应请求到达目的主机时,ICMP就产生一个答复报文,它的
源地址等于收到的请求报文中的目的IP地址。
(2)方法2:
发生一个数据报给一个不存在的应用进程;目的主机将会产生一个ICMP目的不可达报文。大多数UNIX版本的traceroute程序采用该方法。
Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30,000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。
3、Nmap
Nmap是一个开源的网络扫描工具,它支持多种协议的扫描,包括ICMP协议。以下是Nmap使用ICMP协议进行网络扫描的步骤:
(1)打开终端或命令提示符窗口,进入Nmap的安装目录。
(2)输入以下命令格式:
nmap -sP <目标主机范围>
(3)按Enter键执行命令,其中“<目标主机范围>”是要扫描的目标主机的IP地址范围或域名。
(4)Nmap将发送ICMP Echo请求数据包到目标主机范围中的每个主机,并等待目标主机的响应。
(5)目标主机收到ICMP Echo请求数据包后,会发送ICMP Echo回应数据包给Nmap。
(6)Nmap接收到ICMP Echo回应数据包后,会显示相应的输出信息,包括目标主机的IP地址、响应时间等。
通过使用ICMP协议,Nmap可以发现目标主机是否在线,并获取其IP地址信息。需要注意的是,使用ICMP协议进行扫描可能会被某些防火墙或安全策略阻止,因此在实际使用中需要注意网络安全和隐私保护。
相关文章:
网络协议:ICMP协议及实用工具介绍
目 录 一、ICMP介绍 1、概述 2、功能 3、特点 二、ICMP的数据报文 三、ICMP相关工具 四、主要ICMP工具应用 1、Ping 2、Traceroute (1) 方法1: (2)方法2: 3、Nmap 一、ICMP介绍 1、概述 …...
Hyper-V如何设置网络-虚拟交换机设置
Hyper-V如何设置网络-虚拟交换机设置 缘起虚拟交换机类型1. 外部交换机;2. 内部交换机;3. 专用交换机;4.default switch; 虚拟机上openwrt多种网络连接方式 缘起 发现win10还有个虚拟机Hyper-V的功能,不太占资源&…...
SAP不同语言开发
文章目录 1 Please write English Nmae2 go to goto menu and translation3 Write your target language .4 Please input Chinese5 Summary 1 Please write English Nmae 2 go to goto menu and translation 3 Write your target language . 4 Please input Chinese 5 Summary…...
瑞_Java开发手册_(一)编程规约
文章目录 编程规约的意义(一)命名风格(二)常量定义(三)代码格式(四)OOP 规约(五)日期时间(六)集合处理(七)并发…...
【JVM】本地方法接口 Native Interface
一、JNI简介 JVM本地方法接口(Java Native Interface,JNI)是一种允许Java代码调用本地方法(如C或C编写的方法)的机制。这种技术通常用于实现高性能的计算密集型任务,或者与底层系统库进行交互。 二、JNI组…...
JS 本地存储 sessionStorage localStorage
本地存储 随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据,HTML5规范提出了相关解决方案。 本地存储特性 1、数据存储在用户浏览器中 2…...
K8S 存储卷
意义:存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制器创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件…...
一个SqlSugar实际案例
SqlGugar是一个非常好的数据库操作框架,今天用一个示例来分享如何使用。 新建一张课程表 结构如下: CREATE TABLE t_course (id int NOT NULL AUTO_INCREMENT COMMENT ID,title varchar(1024) NOT NULL COMMENT 课程标题,description text NOT NULL C…...
【RT-DETR有效改进】ShapeIoU、InnerShapeIoU关注边界框本身的IoU(包含二次创新)
前言 大家好,我是Snu77,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持Re…...
从理论到实践:数字孪生技术的全面应用探讨
数字孪生是一种将实际物体或系统的数字模型与其实时运行状态相结合的概念。这一概念的核心在于创建一个虚拟的、与真实世界相对应的数字副本,以便监测、分析和优化实体系统的性能。 简单理解,数字孪生就是在一个设备或系统的基础上,创造一个…...
2.1.2 一个关于y=ax+b的故事
跳转到根目录:知行合一:投资篇 已完成: 1、投资&技术 1.1.1 投资-编程基础-numpy 1.1.2 投资-编程基础-pandas 1.2 金融数据处理 1.3 金融数据可视化 2、投资方法论 2.1.1 预期年化收益率 2.1.2 一个关于yaxb的…...
Rust-解引用
“解引用”(Deref)是“取引用”(Ref)的反操作。取引用,我们有&、&mut等操作符,对应的,解引用,我们有操作符,跟C语言是一样的。示例如下: 比如说,我们有引用类型p:&i32;,那么可以用符…...
记录一下vue项目引入百度地图
公共部分 #allmap { width: 500px; height: 500px; font-family: "微软雅黑"; } 1、 <div id"allmap"> <baidu-map :center"center" :zoom"zoom" ready"handler"></baidu-map> </div> data()…...
基于Docker官方php:7.4.33-fpm镜像构建支持67个常见模组的php7.4.33镜像
实践说明:基于RHEL7(CentOS7.9)部署docker环境(23.0.1、24.0.2),所构建的php7.4.33镜像应用于RHEL7-9(如AlmaLinux9.1),但因为docker的特性,适用场景是不限于此的。 文档形成时期:2017-2023年 因系统或软件版本不同&am…...
opencv通过轮廓点生成闭合图像
前言 有时候需要将某一些点生成闭合的二值图像。记录一下。 // 轮廓点个数 int nrCurvePoints curContour.nr; // 轮廓点 DIM2DL* curvePoints curContour.pts;std::vector<cv::Point> points; // 轮廓点集合 for (int cntPoint 0; cntPoint < nrCurvePoints; cn…...
Python 网络编程之TCP详细讲解
【一】传输层 【1】概念 传输层是OSI五层模型中的第四层,负责在网络中的两个端系统之间提供数据传输服务主要协议包括**TCP(传输控制协议)和UDP(用户数据报协议)** 【2】功能 **端到端通信:**传输层负责…...
直饮水系统服务认证:提升水质与安全的必要举
直饮水系统作为一种便捷、卫生的饮水方式,已经越来越受到人们的欢迎。然而,随着市场的发展,直饮水系统的质量和服务也面临着一些挑战。因此,直饮水系统服务认证应运而生,成为了提升水质与安全的必要举措。 一、直饮水…...
Qt 调试系统输出报警声以及添加资源
文章目录 前言一、方法1 使用 Qsound1.添加都文件 直接报错2.解决这个错误 添加 QT multimedia3. 加入代码又遇到新的错误小结 二、第二种方法1.引入库2.添加资源2.1依次点击Qt--->Qt Resource File--->Choose2.2给资源文件起个名字,如:res&#…...
Linux下文件的创建写入读取编程
在linux下操作一个文件,首先要保证文件的存在(不存在就创建),接着打开文件(打开成功)并得到文件描述符,接着在进行读写操作,最后还需要关闭文件。如果我们对文件进行读写之后不关闭文…...
python 解析
list(pd.DataFrame) # 所有列名切片:print("显式 切片:\n", df.loc[:, "number":"sum"]) 所有行,列是从number 到sum ,前闭后开print("隐式 切片:\n", df.iloc[:, 1:3]) # 结果和上面一样转化成字典…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
