tcpdump抓包分析全攻略
一、tcpdump是什么
tcpdump
是 Linux 上最强大的抓包工具之一,用于 实时监听网络流量、分析数据包,是运维 & 安全必备技能!
✅ 实时抓包:直接在终端运行,无需 GUI
✅ 精准过滤:支持 BPF 语法,快速筛选数据包
✅ 兼容 Wireshark:可保存 pcap 文件,后续深入分析
📌 安装 tcpdump
# CentOS / RHEL |
📌 查看版本
tcpdump --version |
📌 查看可用网卡
tcpdump -D |
二、快速抓包命令
📌 抓取所有数据包
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' |
三、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 |
⚠️ 异常分析
❌ 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 服务器故障
❌ 解析超时 → 可能是防火墙拦截
四、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 |