当前位置: 首页 > news >正文

网络协议: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有很多应用和工具,例如:

  1. ping:这是最常用的ICMP工具,用于测试与目标主机的连接状态。
  2. traceroute:这个工具可以跟踪数据包从源主机到目标主机经过的路由路径。
  3. LOICLow Orbit ICMP)和Hping3:这两个工具都可以用于生成和发送自定义的ICMP数据包,通常用于网络测试和性能测量。
  4. PULINGPacket Sender:这是一个开源的网络测试工具,可以用来发送自定义的ICMP数据包。
  5. MTRMy Traceroute:这是一个网络诊断工具,结合了ping和traceroute的功能,可以显示数据包经过的路由节点信息。
  6. Nping:这是Nmap项目的一部分,可以用来发送自定义的ICMP数据包,通常用于网络扫描和安全审计。
  7. hping:这是一个命令行的网络测试工具,可以生成和发送自定义的ICMP数据包。
  8. 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协议进行扫描可能会被某些防火墙或安全策略阻止,因此在实际使用中需要注意网络安全和隐私保护。

http://www.lryc.cn/news/281615.html

相关文章:

  • Hyper-V如何设置网络-虚拟交换机设置
  • SAP不同语言开发
  • 瑞_Java开发手册_(一)编程规约
  • 【JVM】本地方法接口 Native Interface
  • JS 本地存储 sessionStorage localStorage
  • K8S 存储卷
  • 一个SqlSugar实际案例
  • 【RT-DETR有效改进】ShapeIoU、InnerShapeIoU关注边界框本身的IoU(包含二次创新)
  • 从理论到实践:数字孪生技术的全面应用探讨
  • 2.1.2 一个关于y=ax+b的故事
  • Rust-解引用
  • 记录一下vue项目引入百度地图
  • 基于Docker官方php:7.4.33-fpm镜像构建支持67个常见模组的php7.4.33镜像
  • opencv通过轮廓点生成闭合图像
  • Python 网络编程之TCP详细讲解
  • 直饮水系统服务认证:提升水质与安全的必要举
  • Qt 调试系统输出报警声以及添加资源
  • Linux下文件的创建写入读取编程
  • python 解析
  • 谷歌aab包在Android 14闪退而apk没问题(targetsdk 34)
  • 34.在排序数组中查找元素的第一个和最后一个位置
  • js树过滤
  • Java多线程并发篇----第十六篇
  • 测评结果:免费的“文心一言3.5”香,但是付费的产品质量更高
  • Matlab GUI设计基础范例(可以一步一步跟着做)
  • @Transactional(rollbackFor = {Exception.class})与 @Transactional区别
  • 数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q
  • 如何快速打造属于自己的接口自动化测试框架
  • 人工智能在数据安全中的应用场景
  • 2024.1.16每日一题