用tcpdump抓包需指定网卡、加-nn禁用解析,用port/dst port等bpf表达式过滤,-w保存pcap文件供wireshark分析,-a/-x查看载荷内容。

直接用 tcpdump 抓包并看懂关键信息,不需要复杂配置。重点是选对网卡、加必要参数、用好过滤表达式,再结合简单分析手段就能定位大多数网络问题。
指定网卡和禁用解析提升准确性
不指定网卡时 tcpdump 默认抓第一个活跃接口(常为 eth0),但可能漏掉目标流量。建议先查可用接口:
- ip -br a 查看所有接口状态,挑出实际收发业务流量的那一个(比如 eth0、ens33 或 docker0)
- 加上 -n 禁用 DNS 解析,避免因域名查询卡顿或干扰输出;加 -nn 连端口名也跳过(如 80 不转成 http),让结果更干净
- 例如:sudo tcpdump -i eth0 -nn 就是最稳妥的起步命令
按端口、协议或方向精准过滤
抓全量包容易淹没关键信息,用 BPF 表达式快速聚焦:
- port 80:捕获源或目的任一为 80 的 TCP/UDP 包(含请求和响应)
- dst port 443:只抓发往本机 443 端口的连接请求(适合查 Web 入口)
- src port 53 and udp:只看本机发出的 DNS 查询(UDP 53)
- 组合使用更精确,比如:sudo tcpdump -i any -nn port 3306 and host 192.168.1.100 只抓与某 MySQL 客户端的通信
保存为 pcap 文件供深度分析
终端实时输出易丢失、难回溯,存成标准 pcap 格式最实用:
- 用 -w filename.pcap 直接写入二进制包数据,不经过解析,零损耗
- 加 -c N 限制数量,防止文件过大,例如:sudo tcpdump -i eth0 -nn port 22 -c 50 -w ssh-login.pcap
- 生成后可用 tcpdump -r ssh-login.pcap -nn 重放查看,或拖进 Wireshark 图形化分析(支持协议解码、流追踪、HTTP 重组等)
简单检查载荷内容辅助判断
确认连接存在后,进一步看“说了什么”:
- -A 显示 ASCII 内容(适合 HTTP、Redis、SMTP 等明文协议)
- 配合 grep 快速筛选,例如:sudo tcpdump -i eth0 -nn -A port 80 | grep "GET\|POST"
- 需要看完整结构(如 TCP 头、IP 头、十六进制载荷),用 -X;想看更全协议字段,加 -v 或 -vv











