使用 tcpdump 捕获网络数据包:Red Hat 实战指南 - 夜莺博客

使用 tcpdump 捕获网络数据包:Red Hat 实战指南

网络故障排查到数据包层面时,抓包的质量直接决定分析效率——抓错接口、用文本输出、过滤太狠,都可能让一份抓包文件失去价值。Red Hat 客户门户的这篇知识库文章总结了一套经过支持团队验证的抓包规范:在连接两端同时抓包、问题发生时再抓、保存二进制文件、限制每个包的大小、必要时使用滚动捕获,以及如何把抓包文件正确压缩后上传给支持团队。本文把这份指南整理成可直接照做的清单。

捕获提示(关键规则)

  • 在连接两端(客户端和服务端)同时运行抓包。
  • 确保在问题发生时抓包。
  • 保存到本地文件系统,并记录系统时区,便于与日志关联。
  • 难以复现的问题或文件过大时,使用滚动捕获
  • 使用 tcpdump -s 限制每个包保存的信息量。
  • 不要用文本输出,使用二进制格式(.cap / .pcap)。
  • 避免 tcpdump -i any,确保在正确的接口上抓包。
  • 尽量不过滤;必须过滤时,注意别丢弃对话的某一个方向。

基本抓包命令

# 抓取 eth0 端口 80 的流量并写入文件
tcpdump -i eth0 port 80 -w /tmp/http.cap

# 限制单个包长度,避免超大包
tcpdump -i eth0 -s 128 -w /tmp/sample.cap

# 用 -r 验证已抓到的流量
tcpdump -r /tmp/client.cap

滚动捕获(长时间抓包)

长时间抓包时让文件无限增长不是好主意。-w path -W n -C m 指示 tcpdump 创建每个约 m MB 的 n 个文件(path0 到 path(n-1)),写满后循环覆盖。注意:

  • tcpdump 默认以 tcpdump 用户运行,需保证该用户有写权限。
  • -Z userID 可切换运行身份。
  • 文件大小和数量组合必须满足捕获需求——在相关文件被覆盖前要有足够时间抓到目标事件。
tcpdump -i eth0 -w /tmp/rolling.cap -W 10 -C 100

压缩与上传

大文件(几百 MB 甚至几 GB)用 gzip 压缩(bzip2 可能让 tshark 等工具无法读取):

gzip /tmp/client.cap
gzip /tmp/server.cap

把客户端和服务端的 *.cap.gz 附加到支持问题单或上传到支持团队的 sFTP 服务器。

安装 tcpdump

# RHEL 5 及以上
yum install tcpdump
# 或
dnf install tcpdump

结合命令选型,可先读本站的《17 个最佳 Linux 网络和故障排除命令》;设备侧抓包可参考 SONiC 排障指南

原文链接:https://access.redhat.com/solutions/1382953