tcpdump是Linux下轻量级命令行抓包工具,支持指定网卡(-i)、限制数量(-c)、保存文件(-w)、跳过解析(-n/-nn)、捕获全包(-s 0)及BPF过滤(如port 80、host 10.0.1.5等)。

tcpdump 是 Linux 下最直接、最轻量的网络流量捕获工具,不依赖图形界面,适合服务器环境快速诊断。掌握几个核心选项和过滤逻辑,就能精准定位问题流量,无需打开 Wireshark。
指定网卡与基础控制
抓包前必须明确监听哪个网络接口,否则可能捕获不到目标流量。常用方式:
-
查看可用网卡:运行
tcpdump -D列出所有接口(如 eth0、ens33、lo) -
监听指定网卡:例如
sudo tcpdump -i eth0;若只有一块活跃网卡,不加-i也会自动选中 -
限制抓包数量:用
-c 50抓满 50 个包后自动退出,避免无限运行 -
保存为 pcap 文件:加
-w capture.pcap,后续可用 Wireshark 或tcpdump -r capture.pcap回放分析
提升效率的关键选项
默认输出会做 DNS 和端口名解析,既慢又干扰判断。生产环境中建议固定组合使用:
-
-n:跳过主机名解析,显示 IP 而非域名(如 192.168.1.100,而非 server.local) -
-nn:进一步跳过端口名解析,显示80而非http,443而非https -
-s 0:捕获完整数据包(默认只截前 96 字节),防止 TCP 重传或 TLS 握手信息被截断 -
-v或-vv:需要看 TTL、TCP 标志位(SYN/ACK/FIN)、IP 分片等细节时启用
按协议与端口精准过滤
BPF 过滤表达式写在命令末尾,大小写敏感,支持逻辑连接。常见写法:
- 只看 HTTP 流量:
port 80 - 排除 SSH 干扰:
not port 22 - 同时抓 HTTPS 和 DNS:
port 443 or port 53 - 仅 TCP 协议:
tcp(同理可换为udp、icmp、arp) - 只抓 IPv6 流量:
ip6
聚焦通信双方的 IP 过滤
定位某台设备的问题时,按源/目的方向组合过滤更有效:
- 与某 IP 的全部交互:
host 10.0.1.5 - 仅发往该 IP 的包(不含响应):
dst host 10.0.1.5 - 仅来自该网段的请求:
src net 172.16.0.0/16 - 某客户端访问 MySQL:
src host 192.168.5.20 and dst port 3306 - 注意:含空格或特殊字符的表达式需用单引号包裹,如
'src host 192.168.5.20 and dst port 3306'

















