Skip to content

一、TCPDump 的核心定位 ​

在微服务通信、容器跨节点调用或自动化测试中,当遇到偶发性网络超时、SSL 握手异常或 HTTP 4xx/5xx 响应数据不一致时,应用日志往往只能记录结果,无法呈现底层的真实物理报文。

tcpdump 是 Linux 系统中最经典、最强大的命令行网络数据包分析工具。它直接从网络设备驱动层拦截数据包,提供了无与伦比的底层网络透明度。


二、基础捕获与展示参数速查 ​

参数全称与功能典型场景
-i <interface>指定监听的网卡名称(如 eth0, any 监听全部)针对多网卡或 Docker 虚拟网卡定位
-c <count>仅抓取指定数量的数据包后自动退出防止产生过多数据打爆控制台
-n显示原生 IP,不将 IP 逆向解析为域名生产必加,避免 DNS 解析超时卡顿
-nn进一步将端口也显示为数字(不转换为 http/ssh)明确真实通信端口
-tttt打印格式化、高精度的日期时间戳便于与服务端业务日志的时间线精确对齐
-A以 ASCII 明文方式打印数据包内容HTTP 报文排查神器,终端直看请求体
-XX同时以十六进制(HEX)和 ASCII 格式输出包含链路层的数据包二进制私有协议、PB 序列化报文诊断

三、生产抓包转储与 Wireshark 联动(-w / -r) ​

在生产跳板机上,我们通常不希望在黑屏终端滚动大量字符,而是希望将报文精准保存下来,下载到本地用 Wireshark 的图形化界面做流追踪:

1. 转储为标准 PCAP 文件(-w) ​

bash
# -s0 (或 -s 65535): 抓取完整数据包,严禁截断包头
# -i any: 监控全部网络接口
tcpdump -i any -nn -s0 port 31000 -w /tmp/traffic_dump.pcap

2. 离线读取与时序解析(-r) ​

bash
# 从本地已有的 pcap 抓包文件中按易读时间戳解析回放
tcpdump -n -tttt -r /tmp/traffic_dump.pcap

四、高级复合条件过滤表达式 ​

TCPDump 支持强大的逻辑运算表达式(and、or、not):

1. 过滤指定主机与端口 ​

bash
# 抓取本机与 10.0.1.50 之间所有的 8080 端口通信流量
tcpdump -i eth0 -nn host 10.0.1.50 and port 8080

# 仅捕获目标端口为 443 的出站请求
tcpdump -i eth0 -nn dst port 443

2. 针对报文长度进行异常过滤 ​

bash
# 捕获大于 1024 字节的大数据包(常用于排查异常大包导致的 MTU 拆包问题)
tcpdump -i eth0 greater 1024

# 捕获小于 64 字节的小包(如心跳探测报文)
tcpdump -i eth0 less 64

3. 指定网络协议类型 ​

bash
# 只监听底层 ARP 广播解析协议
tcpdump -i eth0 arp

# 只监听 ICMP Ping 探测包
tcpdump -i eth0 icmp

五、生产抓包安全守则 ​

  1. 必须显式加 -c 或后台运行设置超时:严禁在生产高峰期执行裸 tcpdump 并不管不顾,防止持续高并发流量将服务器磁盘写死;
  2. 优先指定端口与主机过滤:无过滤抓包会引发大量上下文切换,增加软中断(SoftIRQ)开销;
  3. 脱敏敏感参数:转储带用户真实凭证或明文 Token 的 pcap 产物,离线分析后应及时从生产服务器清理。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win