Linux Sniffer排查网络问题的流程与技巧
首先需选择合适的Sniffer工具,常见选项包括:
# 安装tcpdump
sudo apt-get update && sudo apt-get install tcpdump
# 安装Wireshark(含图形界面)
sudo apt-get update && sudo apt-get install wireshark
# 安装tshark(Wireshark命令行版)
sudo apt-get install tshark
注意:抓包需管理员权限(使用sudo),且需确认网卡名称(通过ip addr或ifconfig查看,如eth0、enp0s3、wlan0)。
启动Sniffer时,需指定网络接口及过滤条件,避免捕获无关流量:
eth0)的所有流量:sudo tcpdump -i eth0
.pcap文件(便于后续分析):sudo tcpdump -i eth0 -w capture.pcap
port 80、目标IP192.168.1.100):sudo tcpdump -i eth0 port 80 # 仅捕获80端口流量
sudo tcpdump -i eth0 host 192.168.1.100 # 仅捕获与192.168.1.100相关的流量
tshark:sudo tshark -i eth0 -T fields -e ip.src -e ip.dst -e tcp.port
捕获数据后,需通过以下方式分析异常:
.pcap文件,使用过滤表达式缩小范围(如http.request查看HTTP请求、tcp.analysis.retransmission查看TCP重传),查看数据包的源/目的IP、端口、协议、时间戳、数据内容,快速定位问题(如请求无响应、重传频繁)。-nn显示IP和端口而非域名、-vvv显示详细信息):sudo tcpdump -r capture.pcap -nn -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' # 查看TCP握手/确认包
tcpdump的-c计数或Wireshark的“Statistics→Conversations”查看)、延迟(比较数据包的发送与接收时间戳)、协议分布(如大量ARP包可能表示ARP欺骗)。sudo tcpdump -i eth0 host 192.168.1.100 and port 80 -w http_access.pcap
用Wireshark打开http_access.pcap,过滤http.request和http.response,查看是否有响应。tcpdump的时间戳分析延迟(如tcpdump -i eth0 -tttt显示绝对时间)。若存在大量TCP重传包(tcp.analysis.retransmission),则说明网络不稳定或拥塞。sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst) != 0' -w tcp_reset.pcap # 查看TCP重置包(可能因丢包导致)
Host头是否缺失、HTTPS的SSL/TLS握手是否成功)。若存在非法协议字段(如错误的端口号),则可能是客户端或服务端配置错误。sudo tcpdump -i eth0 port 443 -w https_traffic.pcap # 捕获HTTPS流量
用Wireshark过滤tls.handshake.type == 1(ClientHello),查看握手是否成功。.pcap文件可能包含敏感信息(如密码、个人信息),需妥善存储(如加密)并限制访问权限;