在 CentOS 上分析捕获的数据
一、分析流程与常用命令
- 明确目标并选择接口:先确定要分析的主机、端口、协议或问题现象,再用tcpdump -D列出接口,选择如eth0/ens33等目标接口。
- 精确捕获:使用BPF 过滤表达式只抓取感兴趣流量,配合**-nn**(不解析主机名/端口)、-s(快照长度,必要时用**-s 0抓取全包)、-c**(包数限制)降低开销。
- 保存到文件:用**-w file.pcap保存原始包,便于反复分析与共享;后续用-r file.pcap**离线读取并继续加过滤条件分析。
- 快速查看负载:用**-A**(ASCII)或**-X**(十六进制+ASCII)查看应用层内容;高流量时建议先写文件再分析。
- 性能与丢包控制:长时抓包可用**-G 秒 -C 大小MB进行分段滚动**保存,减少单文件过大与丢包风险。
- 基本流程示例:
- 捕获某主机的 80/443 流量到文件:
sudo tcpdump -i eth0 -nn -s 0 -w web.pcap ‘host 192.168.1.100 and (port 80 or port 443)’
- 读取文件并只看 HTTP GET/POST:
tcpdump -nn -r web.pcap -A ‘tcp port 80 and (http.request.method == “GET” or http.request.method == “POST”)’
- 只抓取前 100 个 SYN 包:
sudo tcpdump -i eth0 -nn -c 100 ‘tcp[tcpflags] & tcp-syn != 0’。
二、常见分析场景与命令示例
- TCP 三次握手与连接异常:
- 查看所有握手过程:
tcpdump -nn -r web.pcap ‘tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn’
- 仅看 SYN-ACK(服务器应答):
tcpdump -nn -r web.pcap ‘tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn|tcp-ack’
- 重传与丢包定位:
- 命令行快速筛查重传迹象(如重复 SYN、重复 ACK):
tcpdump -nn -r web.pcap ‘tcp[tcpflags] & tcp-syn != 0’ | head
- 图形化分析建议用 Wireshark,显示过滤器:
- 重传:tcp.analysis.retransmission
- 丢包:tcp.analysis.lost_segment
- 乱序:tcp.analysis.out_of_order
统计:Statistics → Conversations → TCP 查看重传统计、RTT、窗口变化。
- DNS 查询与响应:
- 抓取目标 8.8.8.8 的 DNS(UDP/TCP 53):
sudo tcpdump -nn -i eth0 -s 0 ‘udp or tcp port 53 and dst host 8.8.8.8’ -w dns.pcap
tcpdump -nn -r dns.pcap -A | egrep -i “query|answer|status:”
- HTTP 明文内容排查:
- 抓取 80 端口并输出可读负载:
sudo tcpdump -i eth0 -nn -A -s 0 ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)’
提示:HTTPS/TLS 内容加密,需密钥或会话密钥才能解密,tcpdump/tshark 无法直接显示明文。
- 按主机/网段快速筛选:
- 某主机进出站:
tcpdump -nn -r web.pcap ‘host 10.0.0.5’
- 某网段到本机 443:
tcpdump -nn -r web.pcap ‘src net 192.168.1.0/24 and dst port 443’。
三、使用 Wireshark 或 tshark 进行深度分析
- 安装与权限:
- 安装:sudo yum install -y wireshark wireshark-gnome
- 非 root 抓包:将用户加入 wireshark 组(sudo usermod -a -G wireshark $USER),重新登录后使用。
- 图形化分析:
- 打开 .pcap,用显示过滤器如ip.addr==x.x.x.x && tcp.port==443聚焦目标;
- 右键包 → Follow → TCP Stream 重组会话;
- Statistics → Conversations/TCP 查看重传、RTT、吞吐量、会话分布;
- Analyze → Expert Info 快速定位异常(重传、乱序、丢包、握手失败等)。
- 命令行 tshark:
- 读取文件并按显示过滤:
tshark -r web.pcap -R ‘http.request.method == “GET” or http.request.method == “POST”’ -V
- 统计型分析(如会话、HTTP 状态码分布):
tshark -r web.pcap -q -z conv,tcp
tshark -r web.pcap -q -z http,stat
四、自动化统计与脚本化处理
- 统计 Top N 对话或端口:
- Top 10 源 IP:
tcpdump -nn -r web.pcap | awk ‘{print $3}’ | sort | uniq -c | sort -nr | head
- Top 10 目的端口:
tcpdump -nn -r web.pcap | awk ‘{print $5}’ | cut -d. -f5 | sort | uniq -c | sort -nr | head
- 用 Python 与 Scapy 批量解析:
- 安装:sudo yum install -y python3-scapy(或 pip 安装 scapy)
- 示例脚本(统计 TCP 会话与重传标志):
from scapy.all import *
pkts = rdpcap(‘web.pcap’)
conv = {}
for p in pkts:
if not (IP in p and TCP in p): continue
key = (p[IP].src, p[TCP].sport, p[IP].dst, p[TCP].dport)
conv[key] = conv.get(key, 0) + 1
if p[TCP].flags & 0x04:
print(“RST”, p.summary())
print(“Top sessions:”, sorted(conv.items(), key=lambda x: -x[1])[:10])
- 长时分段抓包便于事后分析:
sudo tcpdump -i eth0 -w cap.pcap -G 600 -C 10(每10 分钟或10 MB切分一个文件)。
五、排错与性能建议
- 权限与接口:抓包通常需要root或加入wireshark组;用**-D确认接口名,必要时开启混杂模式**以看到经过接口的所有流量。
- 过滤器优先:先用BPF精准过滤(如host/port/proto),再逐步放宽条件,避免海量无关数据拖慢分析。
- 快照长度与丢包:默认快照长度通常足够,必要时用**-s 0**;高流量环境用**-G/-C**分段保存,减少丢包与磁盘压力。
- 解密 HTTPS:仅有 .pcap 无法解密 TLS;需在客户端导出会话密钥(如浏览器 SSLKEYLOGFILE)并在 Wireshark/tshark 中配置后查看明文。
- 合法合规:仅在授权范围内抓包与分析,避免侵犯隐私或违反策略。