使用 Wireshark 抓取 ICMP(Internet Control Message Protocol)包是网络排错和学习协议的重要手段之一。下面是最详细、系统的 ICMP 抓包教程,适合从零基础用户到进阶网络分析者。


🧭 教程概览:使用 Wireshark 抓取 ICMP 包


🗂️ 目录

  1. 什么是 ICMP?
  2. 常见 ICMP 类型(Ping、Traceroute)
  3. 抓包前准备
  4. Wireshark 抓取 ICMP 包的步骤
  5. 过滤 ICMP 包的方法
  6. 解读 ICMP 报文结构
  7. 实战分析:Ping 与 Traceroute
  8. 常见问题与抓不到包的解决方法
  9. 延伸阅读

1️⃣ 什么是 ICMP?

ICMP 是网络层的辅助协议,用于传递错误消息和诊断信息,如:

  • 主机不可达
  • TTL 超时
  • Ping 请求/响应

📌 它不承载实际数据,但是网络调试(如 pingtraceroute)的关键协议。


2️⃣ 常见的 ICMP 类型代码(Type + Code)

类型 (Type)名称方向用途
0Echo Reply回复ping 回复
8Echo Request请求ping 请求
3Destination Unreachable单向目的地不可达
11Time Exceeded单向路由 TTL 超限
5Redirect单向路由重定向(较少见)

3️⃣ 抓包前准备

🧰 工具

✅ 环境检查

确保抓包网卡选择正确:

  • 抓本机:选本地网卡(如 WLAN、以太网)
  • 抓 VM / Docker:确保桥接或 NAT 网络配置正确
  • 抓 loopback 回环接口:需特殊设置(Windows 需安装 npcap)

4️⃣ 抓取 ICMP 包的步骤

步骤一:打开 Wireshark

  • 选择你要监听的接口(例如:Ethernet0WLAN

步骤二:设置抓包过滤器(可选)

开始抓包前,建议在“Capture Filter”处填入:

icmp

这样只捕获 ICMP 数据包,避免干扰。

步骤三:发起 ICMP 测试

在终端中执行:

ping www.baidu.com

或:

ping 8.8.8.8

Wireshark 会立即显示相关的 ICMP 包


5️⃣ ICMP 显示过滤器用法

抓完包后,可以在顶部“Display Filter”栏输入:

icmp

或者更具体的过滤:

用法说明
icmp.type == 8仅显示 ping 请求
icmp.type == 0仅显示 ping 回复
icmp.type == 3显示目标不可达包
ip.src == 192.168.1.1 and icmp过滤特定 IP 的 ICMP 包

6️⃣ 解读一个 ICMP 报文结构

点击任意一条 ICMP 报文,你会看到三层结构:

  • IP Header:源 IP、目标 IP、TTL 等
  • ICMP Header
    • Type(类型):8 = 请求,0 = 响应
    • Code:具体错误代码(如 0 = 无)
    • Checksum 校验和
    • Identifier & Sequence Number(常用于匹配请求与响应)
  • Payload:通常是一些随机字节

7️⃣ 实战分析:Ping 与 Traceroute

▶️ Ping 示例分析:

发出 4 次 ping:

ping 8.8.8.8 -c 4

你应能看到:

  • 4 个 ICMP Echo Request(type 8)
  • 4 个 ICMP Echo Reply(type 0)

▶️ Traceroute 分析:

执行:

tracert 8.8.8.8   # Windows
traceroute 8.8.8.8  # Linux/macOS

你将看到:

  • 多个 ICMP Time Exceeded(type 11)来自中间路由节点
  • 最终是 ICMP Echo Reply 或 Destination Unreachable

8️⃣ 常见问题与解决方案

问题解决方案
抓不到 ICMP 包确认抓包网卡是否正确,是否有防火墙屏蔽
本机发 ping 没包抓 Loopback 接口或用另一台设备发起 ping
ICMP 被拦截某些公司/学校网络会禁用 ping
用 Wireshark 太多数据看不清设置 Capture Filter 和 Display Filter

9️⃣ 延伸阅读 & 工具