tcpdump 抓包分析全攻略
# 🔥 1. tcpdump 是什么?
tcpdump
是 Linux 上最强大的抓包工具之一,用于 实时监听网络流量、分析数据包,是运维 & 安全必备技能!
✅ 实时抓包:直接在终端运行,无需 GUI ✅ 精准过滤:支持 BPF 语法,快速筛选数据包 ✅ 兼容 Wireshark:可保存 pcap 文件,后续深入分析
📌 安装 tcpdump
# CentOS / RHEL
yum install -y tcpdump
# Ubuntu / Debian
apt install -y tcpdump
2
3
4
5
📌 查看版本
tcpdump --version
📌 查看可用网卡
tcpdump -D
# 📡 2. 快速抓包命令
📌 抓取所有数据包
tcpdump -i eth0
💡 默认监听 eth0
网卡,按 Ctrl + C
停止
📌 抓取特定端口
tcpdump -i eth0 port 80
📌 抓取特定 IP 的数据包
tcpdump -i eth0 host 192.168.1.100
📌 保存数据包(Wireshark 可用)
tcpdump -i eth0 -w capture.pcap
📌 读取 pcap 文件
tcpdump -r capture.pcap
📌 仅抓取 TCP SYN(新连接)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'
📌 抓取 HTTP 请求
tcpdump -i eth0 port 80 and 'tcp[tcpflags] & tcp-push != 0'
# 🔍 3. tcpdump 抓包分析技巧
# 📌 3.1 关键 TCP 三次握手
✅ 三次握手流程:
1️⃣ 客户端 → 服务器 SYN
(请求建立连接)
2️⃣ 服务器 → 客户端 SYN + ACK
(同意连接)
3️⃣ 客户端 → 服务器 ACK
(确认)
💡 用 tcpdump 抓取三次握手
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
⚠️ 异常分析 ❌ SYN 发送但无 ACK → 服务器未响应,可能端口未开放 ❌ SYN+ACK 但无 ACK → 客户端未响应,可能网络不通
# 📌 3.2 TCP 四次挥手
✅ 四次挥手流程:
1️⃣ 客户端 → 服务器 FIN
(请求断开)
2️⃣ 服务器 → 客户端 ACK
(收到断开请求)
3️⃣ 服务器 → 客户端 FIN
(确认断开)
4️⃣ 客户端 → 服务器 ACK
(最终确认)
💡 用 tcpdump 抓取断开连接
tcpdump -i eth0 'tcp[tcpflags] & (tcp-fin|tcp-ack) != 0'
⚠️ 异常分析
❌ 连接迟迟不释放 → 可能是 CLOSE_WAIT
状态,应用未正确关闭连接
# 📌 3.3 服务器无法访问
💡 抓取 192.168.1.100 的流量
tcpdump -i eth0 host 192.168.1.100
⚠️ 异常分析 ❌ 无数据包 → 可能是网络断开 / 防火墙拦截 ❌ 仅 SYN 无 ACK → 目标服务器未响应,端口可能未开放
# 📌 3.4 分析 HTTP 请求
💡 抓取 HTTP 流量
tcpdump -i eth0 port 80 -A
📌 解析 HTTP GET 请求
GET /index.html HTTP/1.1
Host: example.com
User-Agent: curl/7.68.0
2
3
⚠️ 异常分析 ❌ HTTP 404 → 资源不存在 ❌ HTTP 500 → 服务器内部错误 ❌ HTTP 403 → 权限不足
# 📌 3.5 检测 DDOS 攻击
💡 抓取短时间大量 SYN
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'
📌 查看 SYN 数量
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' | wc -l
⚠️ 异常分析 ❌ 大量 SYN 但无 ACK → 可能是 SYN Flood 攻击 ✅ 解决方案
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
(限制每秒最大新建连接数)
# 📌 3.6 DNS 解析异常
💡 抓取 DNS 请求
tcpdump -i eth0 port 53 -vv
⚠️ 异常分析 ❌ 无 DNS 响应 → 可能是 DNS 服务器故障 ❌ 解析超时 → 可能是防火墙拦截
# 🚀 4. tcpdump 高级技巧
📌 只显示 IP,不解析域名
tcpdump -i eth0 -n
📌 只显示端口号,不解析服务名
tcpdump -i eth0 -nn
📌 显示数据包详细信息
tcpdump -i eth0 -vvv
📌 显示数据包内容(ASCII + HEX)
tcpdump -i eth0 -XX
📌 按数据包大小过滤
tcpdump greater 1000
📌 限制抓包数量
tcpdump -i eth0 -c 100

