tcpdump抓包入门
约 594 字大约 2 分钟
2026-08-29
tcpdump 直接捕获经过网卡的原始数据包,是判断"包到底有没有到达服务器、通到哪一步断掉"的最直接工具,常与双向 MTR 测试配合定位网络问题。
安装
sudo apt install tcpdump -y # Debian/Ubuntu
sudo dnf install tcpdump -y # CentOS/Rocky基础用法
# 先确认网卡名(如 eth0)
ip addr
# 监听指定网卡
sudo tcpdump -i eth0输出每行是一个数据包,Ctrl + C 停止。常用参数:
| 参数 | 作用 |
|---|---|
-n | 不解析域名/端口名,输出更快更清晰 |
-c 100 | 捕获 100 个包后自动停止 |
-i any | 监听所有网卡 |
-w a.pcap | 写入文件(用 Wireshark 打开分析) |
-A | 以 ASCII 显示内容,看 HTTP 明文 |
常用过滤表达式
# 只看某个 IP 的流量(判断对方包是否到达)
sudo tcpdump -n -i eth0 host 1.2.3.4
# 只看某个端口(判断请求是否到达本机 80)
sudo tcpdump -n -i eth0 port 80
# 组合:来源 IP + 目标端口
sudo tcpdump -n -i eth0 src 1.2.3.4 and dst port 22
# 抓 ICMP(配合 ping 验证链路)
sudo tcpdump -n -i eth0 icmp
# 排除 SSH 自己的流量,避免刷屏
sudo tcpdump -n -i eth0 not port 22and / or / not 可以自由组合;表达式记得加引号含空格的场景。
典型排查场景
场景一:对方说连不上,日志里什么都没有
在服务器上 tcpdump -n port 80 后让对方再请求一次:
- 能看到对方的 SYN 包:包已到达,问题在服务本身(监听地址、应用配置)。
- 什么都没有:包没到服务器,去查安全组、防火墙与中间链路。
场景二:能连上但很快被断开
观察 RST 包的来源:
sudo tcpdump -n -i eth0 tcp port 443 and 'tcp[tcpflags] & (tcp-rst) != 0'RST 由本机发出多为服务主动断开;由对端发出多为对方网络/防火墙拦截。
场景三:抓包留证给服务商
sudo tcpdump -n -i eth0 host <对方IP> -w /tmp/debug.pcap -c 1000把 pcap 文件交给技术支持,可用 Wireshark 精确还原交互过程。
注意事项
警告
- tcpdump 需要 root/sudo 权限。
- 生产环境长时间无限制抓包会写满磁盘,务必带
-c限包数或-w限时保存。 - 抓包内容包含敏感数据(密码、令牌),文件不要外传。
