Category 赛事速报

本文详解Wireshark的核心功能,从抓包基础到实际故障排查,带你掌握网络分析的必备技能。

前言

网络出问题了,ping不通、连接超时、速度慢...这时候怎么排查?

抓包分析是网络排查的终极武器。不管问题多复杂,抓个包看看数据流,真相就在眼前。

Wireshark是最强大的抓包工具,免费开源,今天就来系统学习一下。

一、Wireshark安装与基础

1.1 安装

# Windows/Mac

# 官网下载:https://www.wireshark.org/download.html

# Ubuntu/Debian

sudo apt install wireshark

# CentOS

sudo yum install wireshark wireshark-qt

# 允许非root用户抓包(Linux)

sudo usermod -aG wireshark $USER

1.2 界面介绍

┌─────────────────────────────────────────────────────────┐

│ 菜单栏 | 工具栏 | 过滤器栏 │

├─────────────────────────────────────────────────────────┤

│ │

│ 数据包列表(Packet List) │

│ - 时间、源IP、目标IP、协议、长度、信息 │

│ │

├─────────────────────────────────────────────────────────┤

│ │

│ 数据包详情(Packet Details) │

│ - 各层协议解析 │

│ │

├─────────────────────────────────────────────────────────┤

│ │

│ 原始数据(Packet Bytes) │

│ - 十六进制 + ASCII │

│ │

└─────────────────────────────────────────────────────────┘

1.3 开始抓包

选择要抓包的网卡(有流量的那个)

点击蓝色鲨鱼鳍按钮开始

进行你要分析的网络操作

点击红色方块停止

二、过滤器语法

过滤器是Wireshark的灵魂,数据包太多不过滤根本没法看。

2.1 显示过滤器(最常用)

# 按IP过滤

ip.addr == 192.168.1.100 # 源或目标是这个IP

ip.src == 192.168.1.100 # 源IP

ip.dst == 8.8.8.8 # 目标IP

# 按端口过滤

tcp.port == 80 # TCP端口80

udp.port == 53 # UDP端口53

tcp.dstport == 443 # 目标端口443

# 按协议过滤

http # HTTP协议

dns # DNS协议

tcp # TCP协议

udp # UDP协议

icmp # ICMP(ping)

arp # ARP协议

# 组合过滤

ip.addr == 192.168.1.100 and tcp.port == 80

http or dns

tcp and not port 22

# TCP标志位

tcp.flags.syn == 1 # SYN包

tcp.flags.ack == 1 # ACK包

tcp.flags.fin == 1 # FIN包

tcp.flags.rst == 1 # RST包

# 包含特定内容

http contains "password"

tcp contains "error"

2.2 捕获过滤器(抓包前设置)

# 只抓特定主机

host 192.168.1.100

# 只抓特定端口

port 80

portrange 8000-9000

# 只抓特定协议

tcp

udp

icmp

# 组合

host 192.168.1.100 and port 80

2.3 常用过滤器速查

场景

过滤器

分析某个IP的流量

ip.addr == x.x.x.x

只看HTTP

http

只看DNS

dns

TCP握手问题

tcp.flags.syn == 1

连接重置

tcp.flags.rst == 1

重传问题

tcp.analysis.retransmission

慢请求

http.time > 1

三、TCP三次握手分析

3.1 正常握手

No. Time Source Dest Protocol Info

1 0.000 192.168.1.100 93.184.216.34 TCP 54321→80 [SYN]

2 0.015 93.184.216.34 192.168.1.100 TCP 80→54321 [SYN,ACK]

3 0.016 192.168.1.100 93.184.216.34 TCP 54321→80 [ACK]

解读:

第1包:客户端发SYN,请求建立连接

第2包:服务器回SYN+ACK,同意建立

第3包:客户端发ACK,连接建立完成

3.2 常见异常

情况1:只有SYN,没有回复

1 0.000 192.168.1.100 10.0.0.1 TCP [SYN]

2 1.000 192.168.1.100 10.0.0.1 TCP [SYN] (重传)

3 3.000 192.168.1.100 10.0.0.1 TCP [SYN] (重传)

原因:目标不可达、防火墙拦截、端口未监听

情况2:收到RST

1 0.000 192.168.1.100 10.0.0.1 TCP [SYN]

2 0.001 10.0.0.1 192.168.1.100 TCP [RST,ACK]

原因:端口未监听、被防火墙拒绝

情况3:握手成功但立即断开

1-3 ... 正常三次握手

4 0.020 192.168.1.100 10.0.0.1 TCP [FIN,ACK]

原因:应用层拒绝、认证失败

四、HTTP分析实战

4.1 追踪HTTP流

右键数据包 → Follow → TCP Stream

可以看到完整的HTTP请求和响应:

GET /api/users HTTP/1.1

Host: api.example.com

User-Agent: curl/7.68.0

HTTP/1.1 200 OK

Content-Type: application/json

Content-Length: 128

{"users": [...]}

4.2 分析慢请求

过滤慢请求:

http.time > 0.5

查看时间分布:

选中HTTP响应包

看下方详情中的时间字段

或者:Statistics → HTTP → Request Sequences

4.3 HTTPS解密

HTTPS是加密的,直接抓包看不到内容。但可以通过配置解密:

方法1:使用SSLKEYLOGFILE(推荐)

# Linux/Mac

export SSLKEYLOGFILE=~/sslkeys.log

# Windows

set SSLKEYLOGFILE=C:\sslkeys.log

# 然后用浏览器访问HTTPS网站

# Wireshark配置:Edit → Preferences → Protocols → TLS

# 设置 (Pre)-Master-Secret log filename 为上面的文件

方法2:使用私钥(如果你有服务器私钥)

Preferences → Protocols → TLS → RSA keys list

五、DNS分析

5.1 正常DNS查询

No. Time Source Dest Protocol Info

1 0.000 192.168.1.100 8.8.8.8 DNS Standard query A www.example.com

2 0.025 8.8.8.8 192.168.1.100 DNS Standard query response A 93.184.216.34

5.2 DNS问题排查

查询无响应:

dns and dns.flags.response == 0

如果只有查询没有响应,检查DNS服务器是否可达。

DNS解析慢:

看查询和响应的时间差

正常应该在50ms以内

超过200ms说明DNS服务器响应慢

NXDOMAIN(域名不存在):

dns.flags.rcode == 3

六、常见故障排查案例

6.1 案例:网站访问慢

步骤:

开始抓包

访问慢的网站

停止抓包

过滤:ip.addr == 网站IP

分析点:

DNS解析耗时?→ 换DNS

TCP握手耗时?→ 网络延迟高

等待响应耗时?→ 服务器处理慢

数据传输耗时?→ 带宽问题

6.2 案例:连接超时

过滤重传:

tcp.analysis.retransmission

如果重传很多,说明网络丢包严重。

看RTT:

Statistics → TCP Stream Graphs → Round Trip Time

6.3 案例:连接被重置

过滤RST:

tcp.flags.rst == 1

常见原因:

端口未监听

防火墙拒绝

应用程序异常关闭

连接超时被清理

七、高级技巧

7.1 统计功能

Statistics → Conversations # 会话统计

Statistics → Protocol Hierarchy # 协议分布

Statistics → IO Graphs # 流量图

Statistics → Flow Graph # 流程图

7.2 命令行工具tshark

# 抓包保存文件

tshark -i eth0 -w capture.pcap

# 读取并过滤

tshark -r capture.pcap -Y "http"

# 只显示特定字段

tshark -r capture.pcap -Y "http" -T fields -e http.host -e http.request.uri

# 实时抓包并过滤

tshark -i eth0 -Y "tcp.port == 80"

7.3 远程抓包

# 在远程服务器抓包,本地Wireshark分析

ssh user@server "tcpdump -i eth0 -w - port 80" | wireshark -k -i -

# 或者保存后下载

ssh user@server "tcpdump -i eth0 -c 1000 -w /tmp/capture.pcap"

scp user@server:/tmp/capture.pcap .

八、总结

Wireshark抓包分析的基本流程:

明确目标:要分析什么问题

开始抓包:选对网卡,设好过滤器

复现问题:触发要分析的网络行为

停止抓包:不要抓太久,数据太多难分析

过滤定位:用过滤器找到关键数据包

深入分析:看协议详情,追踪数据流

得出结论:找到问题原因

常用过滤器记住这几个就够用:

ip.addr == x.x.x.x

tcp.port == xx

http / dns / tcp

tcp.flags.rst == 1

tcp.analysis.retransmission

掌握Wireshark,网络问题再也难不倒你。

参考资料

Wireshark User's Guide

TCP/IP Illustrated, Volume 1

Practical Packet Analysis - Chris Sanders

💡 实践建议:平时多抓包看看正常的网络流量长什么样,等出问题的时候才能快速发现异常。

Copyright © 2088 竞技暴风-网游赛事活动中心 All Rights Reserved.
友情链接