tcpdump核心在于抓得准、看得懂、判得清,需结合场景选参数、用过滤器、理解输出;先查网卡与流量,再精准定位IP/端口/协议,支持保存pcap供Wireshark分析或远程实时解析。

Linux 下用 tcpdump 抓包,核心不是“抓得到”,而是“抓得准、看得懂、判得清”。它不提供图形界面,但胜在轻量、可靠、可脚本化,是服务器端网络排障的第一把刀。关键在于结合场景选对参数、用好过滤器、理解输出含义。
快速确认网卡与基础流量
刚登录一台陌生服务器,先搞清有哪些网卡、当前有没有活跃流量:
- 运行
tcpdump -D查看所有可用接口(如 eth0、ens33、lo) - 用
sudo tcpdump -i eth0 -c 5抓 5 个包,确认网卡能收发(避免误选 down 状态或 loopback 接口) - 加
-nn防止 DNS/端口反解拖慢输出:sudo tcpdump -i eth0 -nn -c 10 - 若需长期观察,加
-t去掉时间戳前缀,让日志更紧凑
精准定位问题主机或服务
不是所有流量都要看,缩小范围才能高效分析:
- 只看某 IP 的进出流量:
sudo tcpdump -i eth0 host 10.20.30.40 - 只看发给它的(响应方向):
sudo tcpdump -i eth0 dst 10.20.30.40 - 只看它发出的(请求方向):
sudo tcpdump -i eth0 src 10.20.30.40 - 组合条件更实用:比如查某 IP 访问 Web 服务:
sudo tcpdump -i eth0 -nn "host 10.20.30.40 and port 80"
聚焦协议与端口行为
Web 响应慢、SSH 登录卡顿、DNS 解析超时——这类问题基本靠端口+协议过滤定位:
- HTTP 请求(目标端口 80):
sudo tcpdump -i eth0 -nn dst port 80 - HTTPS 响应(源端口 443):
sudo tcpdump -i eth0 -nn src port 443 - DNS 查询(UDP 53):
sudo tcpdump -i eth0 -nn udp port 53 - 排除干扰流量(如跳过 SSH):
sudo tcpdump -i eth0 -nn "not port 22" - 想看完整 TCP 握手过程?加
-v显示标志位:sudo tcpdump -i eth0 -nn -v "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
保存与后续深度分析
终端滚动太快记不住细节,或需多人协作/复现问题,务必保存为标准 pcap 文件:
- 抓包存盘:
sudo tcpdump -i eth0 -s 0 -w debug.pcap port 80(-s 0表示捕获完整包,不截断) - 本地用 Wireshark 打开:
wireshark debug.pcap - 远程抓包+本地分析(免传文件):
ssh user@server 'sudo tcpdump -s 0 -c 1000 -nn -w - not port 22' | wireshark -k -i - - 快速提取 HTTP 头信息:
sudo tcpdump -i eth0 -nn -A -s 1500 port 80 | grep -i "GET\|POST\|Host:"
tcpdump 不需要学完所有参数才上手。从 -i、-nn、host、port 这几个关键词开始,配合 -c 和 -w 控制数量与落盘,就能覆盖 90% 的线上排查场景。真正难的不是命令,是读懂包里的时间差、重传、RST、窗口变化这些信号——那需要你多看几次三次握手和 HTTP 交互的实际输出。










