在CentOS系统中,sniffer工具(如tcpdump)的核心价值在于捕获原始网络流量,并通过过滤、统计、对比等方法定位网络问题(如丢包、重传、连接异常)。以下是具体的分析流程与技巧:
分析前需先通过tcpdump捕获流量,关键命令参数说明:
-i eth0:指定抓包接口(如eth0、ens33,可通过ip link show查看);-s 0:抓取完整数据包(避免截断,便于分析TLS/HTTP内容);-w capture.pcap:将流量保存到pcap文件(后续用Wireshark深度分析);-c 100:捕获100个包后停止(用于快速测试)。sudo tcpdump -i eth0 -s 0 -w capture.pcap
按Ctrl+C停止捕获。
若需快速查看抓包中的关键信息(如IP、端口、协议),可使用tcpdump的过滤表达式:
tcp(TCP流量)、udp(UDP流量)、icmp(ICMP流量);host 192.168.1.100(特定IP)、port 80(特定端口)、host 192.168.1.100 and port 443(特定IP+端口);tcp[tcpflags] & (tcp-syn) != 0(仅显示TCP SYN包,用于排查三次握手问题)。sudo tcpdump -i eth0 tcp port 80 -nn
-nn参数禁用主机名与端口名解析,提升分析速度。
grep过滤“lost”关键词,查看是否有丢包记录:sudo tcpdump -nn -r capture.pcap | grep -i "lost"
tcp.analysis.lost_segment定位丢失的数据包,结合Statistics → Conversations → TCP查看丢包率。sudo tcpdump -nn -r capture.pcap 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
tcp.analysis.retransmission查看重传包,通过Statistics → Conversations → TCP统计重传率(正常情况下重传率应低于1%)。sudo tcpdump -nn -r capture.pcap 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) = 0' # 查看SYN包
sudo tcpdump -nn -r capture.pcap 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)' # 查看SYN/ACK包
sudo tcpdump -nn -r capture.pcap 'tcp[tcpflags] & (tcp-ack) != 0 and tcp[tcpflags] & (tcp-syn) = 0' # 查看ACK包
tcp[tcpflags] & (tcp-rst) != 0(RST包)或tcp[tcpflags] & (tcp-fin) != 0(FIN包),若频繁出现可能意味着应用主动断开或中间设备强制reset。sudo tcpdump -nn -r capture.pcap 'icmp[icmptype] == icmp-unreach and icmp[code] == 4'
ping -M do -s <size> <目标IP>测试最大传输单元(如ping -M do -s 1472 192.168.1.1,1472=1500-20(IP头)-8(ICMP头))。Follow TCP Stream追踪完整会话(如HTTP请求/响应),通过Statistics → IO Graphs查看流量趋势,利用Expert Info获取协议错误提示。awk、sort等命令,统计高频IP、端口或命令(如Go-Sniffer抓取的Redis命令):sudo tcpdump -nn -r capture.pcap | awk '{print $3}' | sort | uniq -c | sort -nr | head -n 10 # 统计高频IP
Go-Sniffer示例:抓取Redis数据包并统计命令频率:go-sniffer eth0 redis -p 6379 >> out.log
grep -avEi "^#|^$|^tcp|^INFO|^AUTH" out.log | awk '{print $1,$2}' | sort | uniq -c | sort -nr | head -n 10
-s 0(完整包)时限制抓包数量(如-c 100);通过以上流程,可系统性地分析CentOS系统中的抓包结果,快速定位网络问题的根源(如丢包、重传、连接异常),为故障排查提供有力依据。