tcpdump抓ICMP报文需选对网卡、用icmp过滤、加-nn提速;可按源/目的IP、ICMP类型(如8为请求、0为响应)、Type 3不可达等条件筛选,并支持保存pcap供Wireshark分析。

直接用 tcpdump 抓 ICMP 报文很简单,关键在于选对接口、加对过滤条件、避免解析开销。
基础命令:抓所有 ICMP 流量
执行以下命令即可捕获当前主机收发的全部 ICMP 包(如 ping 请求/响应):
sudo tcpdump -i any icmp -nn
说明:
- -i any 监听所有网络接口(含容器、桥接、lo),比指定 eth0 更全面;
- icmp 是 BPF 过滤表达式,只保留 ICMP 协议报文;
- -nn 禁用域名和端口名解析,输出纯 IP 和数字端口(ICMP 无端口,但该选项可提速并防卡顿)。
按方向或角色筛选 ICMP 报文
实际排查中常需聚焦特定行为,可用组合条件缩小范围:
- 只抓本机发出的 ICMP(比如自己 ping 别人):
sudo tcpdump -i any 'icmp and src host $(hostname -I | awk '{print $1}')' -nn - 只抓发往某台主机的 ICMP:
sudo tcpdump -i any 'icmp and dst host 192.168.1.100' -nn - 只抓 ICMPv4 的 echo request(ping 请求):
sudo tcpdump -i any 'icmp[0] == 8' -nn - 只抓 echo reply(ping 响应):
sudo tcpdump -i any 'icmp[0] == 0' -nn
注:ICMP 类型字段在第 0 字节,8 表示请求,0 表示响应;无需额外加载协议定义,BPF 支持直接字节偏移访问。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
保存抓包结果供后续分析
加 -w 参数把原始数据存为 pcap 文件,方便用 Wireshark 深度查看或离线复现:
sudo tcpdump -i any icmp -nn -w icmp_capture.pcap- 按数量限制抓 50 个包后自动停止:
sudo tcpdump -i any icmp -nn -c 50 -w icmp_50.pcap
生成的 .pcap 文件可直接拖入 Windows 或 macOS 的 Wireshark 打开,支持图形化过滤、协议解码、时间序列分析等。
进阶:识别异常 ICMP Type 3(目标不可达)
内网扫描常触发 ICMP Type 3 报文(如端口不可达),这类报文本身是“响应”,但大量出现可能暴露主动探测行为:
- 抓所有 ICMP Type 3:
sudo tcpdump -i any 'icmp[icmptype] == 3' -nn -v - 精抓最典型的 “端口不可达”(Code 3):
sudo tcpdump -i any 'icmp[icmptype] == 3 and icmp[icmpcode] == 3' -nn -v
-v 能显示 ICMP Code 和 IP 头 TTL、ID 等字段,便于确认是否来自同一源 IP、是否密集发往不同目的地址+端口——这是判断端口扫描的关键依据。

















