使用 Wireshark 抓取 ICMP(Internet Control Message Protocol)包是网络排错和学习协议的重要手段之一。下面是最详细、系统的 ICMP 抓包教程,适合从零基础用户到进阶网络分析者。
🧭 教程概览:使用 Wireshark 抓取 ICMP 包
🗂️ 目录
- 什么是 ICMP?
- 常见 ICMP 类型(Ping、Traceroute)
- 抓包前准备
- Wireshark 抓取 ICMP 包的步骤
- 过滤 ICMP 包的方法
- 解读 ICMP 报文结构
- 实战分析:Ping 与 Traceroute
- 常见问题与抓不到包的解决方法
- 延伸阅读
1️⃣ 什么是 ICMP?
ICMP 是网络层的辅助协议,用于传递错误消息和诊断信息,如:
- 主机不可达
- TTL 超时
- Ping 请求/响应
📌 它不承载实际数据,但是网络调试(如 ping
、traceroute
)的关键协议。
2️⃣ 常见的 ICMP 类型代码(Type + Code)
类型 (Type) | 名称 | 方向 | 用途 |
---|---|---|---|
0 | Echo Reply | 回复 | ping 回复 |
8 | Echo Request | 请求 | ping 请求 |
3 | Destination Unreachable | 单向 | 目的地不可达 |
11 | Time Exceeded | 单向 | 路由 TTL 超限 |
5 | Redirect | 单向 | 路由重定向(较少见) |
3️⃣ 抓包前准备
🧰 工具
- Wireshark(https://www.wireshark.org/)
- 能够发出 ICMP 请求的设备(如 ping 命令)
✅ 环境检查
确保抓包网卡选择正确:
- 抓本机:选本地网卡(如 WLAN、以太网)
- 抓 VM / Docker:确保桥接或 NAT 网络配置正确
- 抓 loopback 回环接口:需特殊设置(Windows 需安装 npcap)
4️⃣ 抓取 ICMP 包的步骤
步骤一:打开 Wireshark
- 选择你要监听的接口(例如:
Ethernet0
、WLAN
)
步骤二:设置抓包过滤器(可选)
开始抓包前,建议在“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 |
发表回复