Linux Sniffer实现故障排除的流程与实践
Linux环境下有多种Sniffer工具可选,其中Tcpdump(命令行,轻量高效)和Wireshark(图形化,功能全面)是最常用的两款。安装步骤如下(以Debian/Ubuntu为例):
sudo apt-get update && sudo apt-get install tcpdump;sudo apt-get update && sudo apt-get install wireshark(需确认是否允许非root用户捕获数据包,或使用sudo运行)。port 80;或特定IP的流量:host 192.168.1.100),减少无关数据干扰,提升分析效率。启动Sniffer时,需指定网络接口(如eth0、wlan0,可通过ifconfig或ip a命令查看)。基本命令示例:
sudo tcpdump -i eth0(捕获eth0接口的所有流量);sudo tcpdump -i eth0 -w capture.pcap(将捕获的数据包保存为capture.pcap文件,便于后续离线分析);sudo tcpdump -i eth0 -n(-n选项禁用IP/端口解析,加快显示速度)。-i any参数。使用Wireshark打开.pcap文件,可通过以下功能快速定位问题:
http.request.method == GET仅显示HTTP GET请求,tcp.analysis.retransmission显示TCP重传包)缩小分析范围;Tcpdump提供丰富的命令行选项,适合快速提取关键信息:
sudo tcpdump -r capture.pcap -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'(显示所有SYN或ACK标志位的数据包,用于分析TCP握手过程);sudo tcpdump -r capture.pcap -nn -q | awk '{print $3}' | cut -d. -f1 | sort | uniq -c | sort -nr(统计源IP的流量占比,识别高流量主机);sudo tcpdump -r capture.pcap -nn -A 'port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'(0x47455420为GET请求的十六进制值,提取所有HTTP GET请求的内容)。表现:主机无法访问某服务(如无法访问www.example.com的80端口)。
排查步骤:
sudo tcpdump -i eth0 host www.example.com and port 80;表现:网络应用响应慢(如网页加载缓慢、视频卡顿)。
排查步骤:
sudo tcpdump -i eth0 -w delay.pcap -G 60 -W 1(每60秒保存一个60秒的捕获文件);sudo tcpdump -r delay.pcap 'tcp.analysis.retransmission'(TCP重传包过多会导致延迟,可能是网络拥塞、链路故障或主机性能问题)。表现:应用无法正常通信(如FTP无法上传文件、DNS无法解析域名)。
排查步骤:
sudo tcpdump -i eth0 port 21(FTP)、port 53(DNS);sudo tcpdump -i eth0 'port 21 and tcp[tcpflags] & (tcp-syn) != 0'(若有SYN包无SYN-ACK包,可能是FTP服务未开启)。