tcp/ip学习之9: ICMP协议数据分析

1. 获得ICMP请求响应数据

在终端执行如下命令,如以获得ICMP数据包

C:\Users\cupid>ping 192.168.1.2 -n 1

正在 Ping 192.168.1.2 具有 32 字节的数据:
来自 192.168.1.2 的回复: 字节=32 时间<1ms TTL=255

192.168.1.2 的 Ping 统计信息:
    数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

可以采用抓包工具如下:
image

2.ICMP的数据格式

ICMP 的数据包格式

ICMP 数据包封装在 IP 数据包中,其格式如下:

字段 长度(字节) 说明
类型 1 ICMP 消息类型(例如,回显请求、目标不可达等)
代码 1 ICMP 消息代码(用于进一步细化类型字段)
校验和 2 ICMP 数据包的校验和
数据 可变 ICMP 数据(例如,回显请求/响应数据、错误信息等)

ICMP 的常见消息类型

  • 类型 0:回显响应(Echo Reply)
  • 类型 3:目标不可达(Destination Unreachable)
  • 类型 5:路由器重定向(Redirect)
  • 类型 8:回显请求(Echo Request)
  • 类型 11:超时(Time Exceeded)
  • 类型 12:参数问题(Parameter Problem)

image

而ICMP包在IP包中的数据区。
总结如下: 以太网头部---->IP包头部---->ICMP
6+6+2 20 4+N

三. 数据分析

请求数据
0000   02 00 00 30 00 4a 00 e0 4c 68 03 8d 08 00 45 00
0010   00 3c f2 80 00 00 80 01 00 00 c0 a8 01 68 c0 a8
0020   01 02 08 00 4d 39 00 01 00 22 61 62 63 64 65 66
0030   67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
0040   77 61 62 63 64 65 66 67 68 69

首先,我们需要明确数据的格式和各个字段的含义。这段数据是一个完整的以太网帧,包含了以太网头部、IP 头部和 ICMP 数据。

1. 以太网头部(0000 - 0010)

以太网头部的格式如下:

字段名称 长度(字节) 描述
目的 MAC 地址 6 目的设备的 MAC 地址
源 MAC 地址 6 发送设备的 MAC 地址
类型/长度 2 表示上层协议类型(如 IPv4、IPv6)

从数据中提取:

0000   02 00 00 30 00 4a 00 e0 4c 68 03 8d 08 00
  • 目的 MAC 地址02:00:00:30:00:4a
  • 源 MAC 地址00:e0:4c:68:03:8d
  • 类型/长度08 00,表示 IPv4(0x0800)

2. IP 头部(0010 - 0030)

IP 头部的格式如下:

字段名称 长度(字节) 描述
版本 1/4 IP 协议版本(IPv4 为 4)
头部长度 1/4 IP 头部长度(单位为 32 位字)
服务类型 1 服务质量(现在很少用)
总长度 2 整个 IP 数据报的长度(包括头部和数据部分)
标识 2 用于分片和重组
标志 1/3 分片标志
片偏移 2/3 分片偏移量
生存时间(TTL) 1 数据报的最大跳数
协议 1 上层协议类型(如 ICMP、TCP、UDP)
头部校验和 2 IP 头部的校验和
源 IP 地址 4 发送方 IP 地址
目的 IP 地址 4 接收方 IP 地址

从数据中提取:

0010   45 00 00 3c f2 80 00 00 80 01 00 00 c0 a8 01 68
0020   c0 a8 01 02
  • 版本4(IPv4)
  • 头部长度5(单位为 32 位字,即 20 字节)
  • 服务类型0
  • 总长度00 3c(十进制为 60 字节)
  • 标识f2 80(十进制为 62080)
  • 标志0(不分片)
  • 片偏移0
  • 生存时间(TTL)80(十进制为 128)
  • 协议01(ICMP)
  • 头部校验和00 00(校验和通常在发送时计算,这里可能被清零)
  • 源 IP 地址c0 a8 01 68(十进制为 192.168.1.104)
  • 目的 IP 地址c0 a8 01 02(十进制为 192.168.1.2)

3. ICMP 数据(0030 - 0040)

ICMP 数据的格式如下:

字段名称 长度(字节) 描述
类型 1 ICMP 消息类型(如回显请求为 8,回显应答为 0)
代码 1 ICMP 消息代码
校验和 2 ICMP 数据的校验和
标识符 2 用于区分不同的请求
序列号 2 用于区分同一请求中的不同数据包
数据 可变 用户数据或测试数据

从数据中提取:

0030   08 00 4d 39 00 01 00 22 61 62 63 64 65 66 67 68
0040   69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61
0050   62 63 64 65 66 67 68 69
  • 类型08(回显请求)
  • 代码00(无错误)
  • 校验和4d 39(十六进制为 0x4d39)
  • 标识符00 01(十进制为 1)
  • 序列号00 22(十进制为 34)
  • 数据61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69(ASCII 为 abcdefghijklmnopqrstuvwabcdefghi

总结

这段数据是一个 ICMP 回显请求(Ping 请求)消息。

  • 以太网头部
    • 目的 MAC 地址:02:00:00:30:00:4a
    • 源 MAC 地址:00:e0:4c:68:03:8d
    • 类型:IPv4(0x0800)
  • IP 头部
    • 版本:IPv4
    • 头部长度:20 字节
    • 总长度:60 字节
    • 标识:62080
    • TTL:128
    • 协议:ICMP
    • 源 IP 地址:192.168.1.104
    • 目的 IP 地址:192.168.1.2
  • ICMP 数据
    • 类型:回显请求(8)
    • 代码:0
    • 校验和:0x4d39
    • 标识符:1
    • 序列号:34
    • 数据:abcdefghijklmnopqrstuvwabcdefghi

这个 ICMP 回显请求是从 IP 地址为 192.168.1.104 的主机发送到 IP 地址为 192.168.1.2 的主机的。

数据响应

0000 00 e0 4c 68 03 8d 02 00 00 30 00 4a 08 00 45 00
0010 00 3c f2 80 00 00 ff 01 45 85 c0 a8 01 02 c0 a8
0020 01 68 00 00 55 39 00 01 00 22 61 62 63 64 65 66
0030 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
0040 77 61 62 63 64 65 66 67 68 69

我们来逐步解析这段 ICMP 数据。这段数据是一个完整的以太网帧,包含了以太网头部、IP 头部和 ICMP 数据。以下是详细的解析过程:

1. 以太网头部(0000 - 0010)

以太网头部的格式如下:

字段名称 长度(字节) 描述
目的 MAC 地址 6 目的设备的 MAC 地址
源 MAC 地址 6 发送设备的 MAC 地址
类型/长度 2 表示上层协议类型(如 IPv4、IPv6)

从数据中提取:

0000   00 e0 4c 68 03 8d 02 00 00 30 00 4a 08 00
  • 目的 MAC 地址00:e0:4c:68:03:8d
  • 源 MAC 地址02:00:00:30:00:4a
  • 类型/长度08 00,表示 IPv4(0x0800)

2. IP 头部(0010 - 0030)

IP 头部的格式如下:

字段名称 长度(字节) 描述
版本 1/4 IP 协议版本(IPv4 为 4)
头部长度 1/4 IP 头部长度(单位为 32 位字)
服务类型 1 服务质量(现在很少用)
总长度 2 整个 IP 数据报的长度(包括头部和数据部分)
标识 2 用于分片和重组
标志 1/3 分片标志
片偏移 2/3 分片偏移量
生存时间(TTL) 1 数据报的最大跳数
协议 1 上层协议类型(如 ICMP、TCP、UDP)
头部校验和 2 IP 头部的校验和
源 IP 地址 4 发送方 IP 地址
目的 IP 地址 4 接收方 IP 地址

从数据中提取:

0010   45 00 00 3c f2 80 00 00 ff 01 45 85 c0 a8 01 02
0020   c0 a8 01 68
  • 版本4(IPv4)
  • 头部长度5(单位为 32 位字,即 20 字节)
  • 服务类型0
  • 总长度00 3c(十进制为 60 字节)
  • 标识f2 80(十进制为 62080)
  • 标志0(不分片)
  • 片偏移0
  • 生存时间(TTL)ff(十进制为 255)
  • 协议01(ICMP)
  • 头部校验和45 85(十六进制为 0x4585)
  • 源 IP 地址c0 a8 01 02(十进制为 192.168.1.2)
  • 目的 IP 地址c0 a8 01 68(十进制为 192.168.1.104)

3. ICMP 数据(0030 - 0040)

ICMP 数据的格式如下:

字段名称 长度(字节) 描述
类型 1 ICMP 消息类型(如回显请求为 8,回显应答为 0)
代码 1 ICMP 消息代码
校验和 2 ICMP 数据的校验和
标识符 2 用于区分不同的请求
序列号 2 用于区分同一请求中的不同数据包
数据 可变 用户数据或测试数据

从数据中提取:

0030   00 00 55 39 00 01 00 22 61 62 63 64 65 66 67 68
0040   69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61
0050   62 63 64 65 66 67 68 69
  • 类型00(回显应答)
  • 代码00(无错误)
  • 校验和55 39(十六进制为 0x5539)
  • 标识符00 01(十进制为 1)
  • 序列号00 22(十进制为 34)
  • 数据61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69(ASCII 为 abcdefghijklmnopqrstuvwabcdefghi

总结

这段数据是一个 ICMP 回显应答(Ping 响应)消息,具体信息如下:

  • 以太网头部
    • 目的 MAC 地址:00:e0:4c:68:03:8d
    • 源 MAC 地址:02:00:00:30:00:4a
    • 类型:IPv4(0x0800)
  • IP 头部
    • 版本:IPv4
    • 头部长度:20 字节
    • 总长度:60 字节
    • 标识:62080
    • TTL:255
    • 协议:ICMP
    • 源 IP 地址:192.168.1.2
    • 目的 IP 地址:192.168.1.104
  • ICMP 数据
    • 类型:回显应答(0)
    • 代码:0
    • 校验和:0x5539
posted @ 2025-07-28 09:09  cupid8505  阅读(20)  评论(0)    收藏  举报