协议簇:ICMP 解析

简介

ICMP 是 Internet Control Message Protocol 的简写. 它主要用来调试网络通信环境中存在的问题.

比如,当 IP 数据包总是无法正常的发送到目的地址, 当网关没有足够的 buffer 来转发对应的数据包 等问题.

值得一提的是,它属于网络层,不属于传输层. 也就是说它和 IP 协议处于同一层次,而并不是与 TCP/UDP 处于同一层次.

消息格式

ICMP 协议使用 IP 协议头来传输数据. 具体的数据就是 ICMP 规定的一些数据包,我们接下来一一介绍…
IP Header Format
因为 ICMP 格式与 IP 相同,这里我们简单介绍以下各个字段. 详细请参考 协议簇: IPv4 详解

几个需要特别注意的字段,及其值:

  1. Version: 4
  2. Type of Service: 0
  3. Protocol: ICMP = 1

接下来,我们来看看常见的 ICMP 报文实例

Destionation Unreachable Message

Destionation Unreachable Message Format
各字段的意义及其值:

  1. Type:3
  2. Code:
    0 = net unreachable
    1 = host unreachable
    2 = protocol unreachable
    3 = port unreachable
    4 = fragmentation needed and DF set
    5 = source route failed
  3. Checksum: 检查和
  4. Internet Header + 64 bits of Data Datagram: 该字段存放原始的 ICMP 请求,以便将当前这个 ICMP 报文与请求报文对应起来.

描述

  1. 当根据网关的漏油表推断出该网络地址不可达,网关有可能会返回此ICMP消息。
  2. 目的端收到 IP 数据包,但是无法正常将该数据包传送到对应端口(该端口有可能没有启用), 目的端有可能会返回此 ICMP 消息
  3. 当数据包必须被分片才能正常的发送到目的端,当时当前数据包却设置了 Don’t Fragment 标记,此时网关有可能会返回此 ICMP 消息

实例

笔者在自己机器上使用 ping 192.168.1.44 命令得到了 Destination unreachable 消息的包,这里我们来分析以下
在这里插入图片描述

  1. 首先注意最上面的 IP 协议数据内容, Protocol 字段值是 1,表明当前数据包是一个 ICMP 消息。 目的地址和源地址相同,说明从我本地的路由表中解析不到 192.168.1.44 这个地址。
  2. 接下来是一个 ICMP 消息。 该消息作为 IP 协议的 Data 字段搭载在 IP 协议数据包上.
  3. ICMP 消息的 type 是 3, 正是 Destionation Unreachable Message
  4. Code 是 1, 表明主机不可达
  5. Internet Header + 64 bits of Data Datagram 字段中包含了我们发送的 ICMP 请求的 IP 数据包. 由这个 IP 包的源地址和目的地址得知,我本地是 192.168.1.35, 我 ping 了主机 192.168.1.44. 至于这个 ICMP 请求,我们先不分析,后边我们专门来分析.

Time Exceeded Message

它的包格式与 Destionation Unreachable Message 相同,这里不再赘述.

各字段的意义及其值:

  1. Type:11
  2. Code:
    0 = time to live exceeded in transit
    1 = fragment reassembly time exceeded

描述

  1. IP 协议规定当某个数据包在传输过程中 TimeToLive 字段的值减少到 0, 那个这个数据包应该被丢弃. 于此同时,丢弃数据包的网关有可能会给源主机发送此 ICMP 消息来通知该数据包被丢弃.
  2. 当目的端收到分片的数据包后,但是由于部分分片丢失而无法在指定时间内完成数据包重组,那么该数据包会被丢弃, 丢弃数据包的网关有可能会给源主机发送此 ICMP 消息来通知该数据包被丢弃.

实例

笔者使用 ping -i 2 baidu.com 命令抓取到了此类型的 ICMP 数据包,这里我们省略掉于前文重复的部分,直接贴出 ICMP 包相关的信息
在这里插入图片描述

  1. 这里注意,IP 头中 Time to live 字段的值是 1,而不是 0. 猜测是因为在处理该数据包的中间节点发现它并不是该数据包的目的地址,而此时 time to live 已经是 1,自己处理完之后再将该值减少 1 之后,该数据包的 time to live 就是 0,因此,该节点给我们发送了 time exceeded message.

Parameter Problem Message

在这里插入图片描述
各字段的意义及其值:

  1. Type:12
  2. Code:
    0 = pointer indicates the error
  3. Pointer: 当 code == 0, 这个字段指明出错的字节位置.

描述

当网关或者目标主机无法根据 IP 头正确的解析此数据包时,就会丢弃该数据包并发送此 ICMP 报文.

这个问题的可能原因是 错误的使用 Option.

Source Quench Message

它的包格式与 Destionation Unreachable Message 相同,这里不再赘述.

各字段的意义及其值:

  1. Type:4
  2. Code: 0

描述

当网管或者目标主机没有足够的 buffer 来处理对应的数据包时,就会丢弃数据包并发送此 ICMP 报文

Redirect Message

在这里插入图片描述
各字段的意义及其值:

  1. Type:5
  2. Code:
    0 = Redirect datagrams for the Network
    1 = Redirect datagrams for the Host
    2 = Redirect datagrams for the Type of Service and Network
    3 = Redirect datagrams for the Type of Service and Host
  3. Gateway Internet Address: 该字段指明发送给当前目的主机的数据包都应该被发送给 Gateway Internet Address 所指定的网关

描述

这种 ICMP 消息在如下情况下会被发送:
假定网关 G1 从一个相连的主机或网关收到一个数据包,G1 检查自己的路由表找到该数据包应该被转发给网关 G2,再由 G2 继续转发,直到该数据包到达主机 X. 但是如果 G2 和 该数据包的源地址处于同一个网络,那么此时 G1 会发送此 ICMP 消息来建议源主机将发送给 X 的数据包都直接发送给 G2,这样路由长度最短,数据发送速度更快.

Echo or Echo Reply Message

在这里插入图片描述
各字段的意义及其值:

  1. Type:
    8 = Echo Message
    0 = Echo Reply Message
  2. Code: 0
  3. Identifier 和 sequence number: 当 code = 0 时, 使用 Identifier 和 sequence number 来帮助将 Echo Message 和 Echo Reply Mesage 对应起来

描述

正如我们前面已经看到,我们在收到一个 ICMP 响应时,响应的 ICMP 数据包中都会包含对应 Echo Message.

实例

下面展示一个 Echo Message 的结构
在这里插入图片描述
下面时对应的 Echo Reply Message 的结构
在这里插入图片描述
值得注意的时: Echo Message 和 Echo Reply Message 中的 identifier 和 sequence number 字段时相同的. 这样我们就得知 这两个数据包时互相对应关系.

而我们收到了 Echo Reply Message,也就证明我们到对应的目的主机的链路是工作的.

Timestamp or Timestamp Reply Message

在这里插入图片描述
各字段的意义及其值:

  1. Type:
    13 = Timestamp Message
    14 = Timestamp Reply Message
  2. Code: 0
  3. Identifier 和 sequence number: 同 Echo Message 和 Echo Reply Message.
  4. Originate Timestamp:发送方发送最后一次修改这个数据包的 timestamp
  5. Receive Timestamp: 接收方接收这个数据包的 timestamp
  6. Transmit Timestamp: 接收方最后一次修改这个数据包的 timestamp

Information Request or Information Reply Message

在这里插入图片描述

各字段的意义及其值:

  1. Type:
    15 = Information Request Message
    16 = Information Reply Message
  2. Code: 0
  3. Identifier 和 sequence number: 同 Echo Message 和 Echo Reply Message.

描述

这个数据包发送时不填写目的地址字段,接收方在 reply message 中填写自己的地址信息.

使用这个数据包可以用来发现当前网络中所有的主机地址信息.

END!

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

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

相关文章

协议簇:TCP 解析: 基础

简介 本文我们将从 RFC 学习一下 RFC793 中描述的 TCP 协议. 这将区别于通常讲解计算机网络书籍中所描述的 TCP. 但他们必然是相统一的,不会互相冲突. 系列文章 协议簇:TCP 解析:基础 协议簇:TCP 解析:建立连接 协议…

协议簇:TCP 解析: 建立连接

简介 接前文 协议簇:TCP 解析: 基础, 我们这篇文章来看看 TCP 连接建立的过程,也就是众所周知的”三次握手“的具体流程. 系列文章 协议簇:TCP 解析:基础 协议簇:TCP 解析:建立连接 协议簇&a…

协议簇:TCP 解析: 连接断开

简介 接前文 协议簇:TCP 解析: 建立连接, 我们这篇文章来看看 TCP 连接断开的过程,也就是众所周知的”四次挥手“的具体流程. 系列文章 协议簇:TCP 解析:基础 协议簇:TCP 解析:建立连接 协议…

协议簇:TCP 解析: Sequence Number

简介 序列号(Sequence Number) 是 TCP 协议中非常重要的一个概念,以至于不得不专门来学习一下。这篇文章我们就来解开他的面纱. 在 TCP 的设计中,通过TCP协议发送的每个字节都对应于一个序列号. 由于每个字节都有自己的序列号&a…

CodeTank iOS App Technical Support

CodeTank iOS App Technical Support For All Email: z253951598outlook.com TEL: 86-17782749061 App Screen Shoots

CentOS 7 防火墙命令

查看防火墙状态 systemctl status firewalld如果已经开启,状态为 active 如果未开启,状态为 inactive 开启防火墙 systemctl start firewalld关闭防火墙 systemctl stop firewalld查看当前防火墙的配置 firewall-cmd --list-all这里,我…

QTcpSocket connectToHost 建立连接速度慢问题

问题场景 在使用 QT 开发一个客户端 App 的时候,我们通过 QTcpSocket 与后台服务器进程通信。 后台程序使用其他语言编写。 问题: 在客户端启用之后尝试建立与后台程序的 TCP 连接的时候,发现连接速度非常慢(肉眼可见的慢&#x…

GTank iOS App Technical Support

GTank iOS App Technical Support For All Email: z253951598outlook.com TEL: 86-17782749061 App Screen Shoots ​​

证书体系: CSR 解析

原文同时发布于本人个人博客: https//kutank.com/blog/cert-csr/ 简介 CSR 全称 “证书签名请求”(Certificate Signing Request). 本文我们将来详细的学习 CSR 的知识,重点集中在 CSR 所包含的信息,及其意义。 CSR 的作用: CSR 通常由想要获…

模拟网页行为之工具篇二

先说360浏览器,打开开发者选项,可以看到界面提供了几个功能选项,如图: 这个图片的第一个搜索图标点中过后,再去选中网页你感兴趣的部分就可以在Element选项中跳转到你感兴趣的代码。也可以直接ctrlF2搜寻你感兴趣网页元…

模拟网页行为之实践篇三

现在来谈下验证码图片的获取方式,带有验证码的地方都会附带有个刷新按钮,而刷新按钮的地方就是获取验证码网址代码。如果看过前面写的《模拟网页行为之工具篇》就会很容易定位到代码位置。定位到代码位置后看下图: 基本可以看到的是获取验证码…

SHA-256算法实现

SHA-256 算法输入报文的最大长度不超过2^64 bit,输入按512-bit 分组进行处理,产生 的输出是一个256-bit 的报文摘要。该算法处理包括以下几步: STEP1:附加填充比特。对报文进行填充使报文长度与448 模512 同余(长度…

ecc算法入门介绍

一、从平行线谈起。 平行线,永不相交。没有人怀疑把:)不过到了近代这个结论遭到了质疑。平行线会不会在很远很远的地方相交了?事实上没有人见到过。所以“平行线,永不相交”只是假设(大家想想初中学习的平行…

Intel Hex概述

什么是Intel Hex文件 Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件。在Intel HEX文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器…

AndroidStudio+ideasmali动态调试smali汇编

0x00 前言 之前对于app反编译的smali汇编语言都是静态分析为主,加上一点ida6.6的动态调试,但是ida的调试smali真的像鸡肋一样,各种不爽,遇到混淆过的java代码就欲哭无泪了。后来知道IDEA用一款插件也可以实现smali的动态调试&a…

使用IDA Pro动态调试SO文件

(1)在IDA的安装路径中找到android_server文件。 (2)将android_server拷贝到手机的/data/local/tmp目录下面。 (3) 将手机插上电脑,打开命令提示符, 先输入”adb shell”,然后输入”…

机器学习或深度学习的数据读取工作(大数据处理)

机器学习或深度学习的数据读取工作(大数据处理)主要是.split和re.findall和glob.glob运用。 读取文件的路径(为了获得文件内容)和提取文件路径中感兴趣的东西(标签) 1,“glob.glob”用于读取文件路径 2,“.…

Android系统架构图

一、Aplications(应用层) 应用是用Java语言编写的云新在虚拟机上的程序。 二、Application Framework(应用框架层) 这一层是编写Google发布的核心应用时所使用的API框架,开发人员可以使用这些框架来开发自己的应用。 V…

AES算法重点详解和实现

可以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n,其它情况下加密数据长度等于16*(n1)。在不足16的整数倍的情况下,假如原始数据长度等于16*nm[其中m小于16]…

勒索病毒傀儡进程脱壳

样本是:wallet勒索病毒 环境:虚拟机VMWARE win7 32位 工具:OD,winhex 初次拿到样本,先用火绒剑工具监控下病毒样本的流程,可以看到有一个自创建进程的行为。 我们等找到OEP后,在CreateProcessA下…