Wireshark抓包完全入门教程:从零开始掌握网络分析

如果说网络是数字世界的"血管",那么数据包就是流淌其中的"血液"。Wireshark就是一台能让这些血液"显形"的显微镜------它能捕获并解析网卡上流经的每一个数据包,让你亲眼看到网络上发生的一切。无论是排查网络故障、学习网络协议,还是进行安全分析,Wireshark都是必不可少的利器。

本文将从零开始,手把手带你完成Wireshark的安装、抓包、过滤和深度分析,让你从"看到满屏数据就头晕"的新手,成长为能够熟练运用这把利器的网络分析者。

一、Wireshark是什么?

Wireshark(旧称Ethereal)是一款开源的网络数据包分析器。它通过调用操作系统底层的API,直接捕获网卡上的数据包,并以极为详细的方式展示出来。

Wireshark的核心能力包括:

  • 实时捕获:从网络接口实时抓取数据包
  • 协议解析:支持超过2000种网络协议的深度解析
  • 过滤与搜索:强大的过滤和搜索功能,快速定位目标数据
  • 离线分析:支持保存和加载pcap/pcapng格式的抓包文件
  • 数据流重组:能将分散的数据包重组成完整的会话内容

无论是开发者调试网络程序、运维排查网络故障,还是安全工程师分析攻击行为,Wireshark都是标配工具。

二、安装Wireshark

2.1 下载安装包

访问Wireshark官网:https://www.wireshark.org/download.html

建议选择LTS(长期支持)稳定版本(如4.6.x系列),避免使用Beta版。根据操作系统选择对应版本:Windows选择.exe安装包,macOS选择.dmg,Linux用户可通过包管理器安装。

2.2 Windows安装步骤

  1. 以管理员身份运行安装程序(右键 → "以管理员身份运行")
  2. 点击"Next",接受许可协议
  3. 选择安装组件
    • Wireshark:核心程序(必选)
    • NPcap :抓包驱动(必选,这是Wireshark能抓到数据包的基础)
    • USBPcap:USB抓包(可选)
  4. 选择安装位置,建议保持默认
  5. 安装过程中会自动弹出NPcap安装向导,点击"Install"即可
  6. 等待安装完成,点击"Finish"

2.3 Linux安装

Ubuntu/Debian系统:

bash 复制代码
sudo apt update
sudo apt install wireshark

安装过程中会询问是否允许非root用户抓包,选择"是"后,将当前用户加入wireshark组:

bash 复制代码
sudo usermod -aG wireshark $USER
# 需要重新登录才能生效

CentOS/RHEL系统:

bash 复制代码
sudo yum install wireshark wireshark-qt

2.4 验证安装

启动Wireshark后,如果能看到本地网卡列表(如以太网、Wi-Fi),说明安装成功。注意:Wireshark需要管理员/root权限才能抓包,Windows上请右键"以管理员身份运行"。

三、核心界面解析

打开Wireshark后,界面主要分为三个核心区域:

3.1 数据包列表(Packet List)

这是最上方的表格区域,显示所有捕获到的数据包摘要,每一行代表一个数据包:

列名 含义
No. 数据包编号(按捕获顺序)
Time 捕获时间戳,用于分析时序问题
Source 源IP地址
Destination 目标IP地址
Protocol 协议类型(TCP、UDP、HTTP、DNS等)
Length 数据包长度(字节)
Info 数据包简要描述

不同协议的数据包会使用不同的颜色显示,方便快速区分。颜色规则可在菜单栏 View → Coloring Rules 中查看和修改。

3.2 数据包详情(Packet Details)

在数据包列表中选择一个数据包,下方会显示其详细的分层解析结果:

  • Frame:物理层帧信息(包含帧编号、长度等)
  • Ethernet II:数据链路层(源/目标MAC地址)
  • Internet Protocol Version 4:网络层(源/目标IP地址)
  • Transmission Control Protocol:传输层(端口号、序列号、标志位等)
  • Hypertext Transfer Protocol:应用层(HTTP请求/响应的具体内容)

每一层都可以展开,查看其中的每一个字段。

3.3 原始数据(Packet Bytes)

最下方的区域以十六进制 + ASCII码的形式显示数据包的原始内容,适合需要查看底层二进制数据的场景。

3.4 工具栏

顶部工具栏包含最常用的操作按钮:

  • 🦈 蓝色鲨鱼鳍:开始捕获
  • 红色方块:停止捕获
  • 🔄 重新捕获
  • ⚙️ 捕获选项(设置过滤器、选择网卡等)

四、开始第一次抓包

4.1 选择网卡

启动Wireshark后,首先看到的是网络接口列表:

  • 有线网络:选择以太网(Ethernet)接口
  • 无线网络:选择Wi-Fi接口
  • 虚拟网卡:如VMware、VirtualBox的虚拟网卡

如果不确定选择哪个,可以看哪个接口有持续的数据包流量跳动。

4.2 启动抓包

双击接口名称,或选中后点击左上角的蓝色鲨鱼鳍图标,即可开始抓包。数据包会开始在列表中滚动显示。

4.3 执行操作并停止

执行你想要分析的操作(如访问一个网站、ping一个IP等)。操作完成后,点击红色方块按钮停止抓包。

4.4 保存抓包文件

停止后,可以通过 File → Save 将抓包结果保存为.pcapng.pcap格式,方便后续离线分析。

💡 新手第一次抓包实操:抓取ping包

  1. 打开Wireshark,选择Wi-Fi或以太网网卡
  2. 点击蓝色鲨鱼鳍开始抓包
  3. 打开命令行,执行:ping www.baidu.com
  4. 等待ping命令执行完毕
  5. 回到Wireshark,点击红色方块停止抓包
  6. 在过滤栏输入 icmp,就能看到所有ping请求和响应的数据包

通过这个简单的练习,你就能直观地理解"数据包"到底是什么样子的。

五、过滤器:Wireshark的灵魂

没有过滤器的Wireshark就像没有搜索引擎的互联网------数据包太多,根本找不到你需要的信息。Wireshark提供了两种过滤器

5.1 捕获过滤器(Capture Filter)

抓包开始前设置,只捕获符合条件的包,从源头减少数据量。

语法格式

复制代码
[协议] [方向] [类型] [值]

常用捕获过滤器

场景 过滤器
只抓与某IP相关的包 host 192.168.1.100
只抓80端口流量 port 80
只抓TCP协议 tcp
只抓特定主机的特定端口 host 192.168.1.100 and port 443
抓取多个端口 port 80 or port 443

设置方法Capture → Options,在"Capture Filter"输入框中输入过滤表达式。

5.2 显示过滤器(Display Filter)

抓包完成后对已捕获的数据进行筛选,功能更强大、更灵活。直接在过滤器栏输入表达式即可。

比较操作符

操作符 含义
== / eq 等于
!= / ne 不等于
> / gt 大于
< / lt 小于
>= / ge 大于等于
<= / le 小于等于

逻辑操作符

操作符 类C风格 含义
and && 逻辑与
or `
xor ^^ 逻辑异或
not ! 逻辑非

⚠️ 注意:逻辑操作符必须使用小写。

常用显示过滤器

按IP过滤

复制代码
ip.addr == 192.168.1.100        # 源或目标是这个IP
ip.src == 192.168.1.100         # 源IP
ip.dst == 8.8.8.8               # 目标IP
ip.addr == 192.168.1.0/24       # 整个网段

按端口过滤

复制代码
tcp.port == 80                  # TCP端口80
tcp.dstport == 443              # 目标端口443
udp.port == 53                  # UDP端口53(DNS)
tcp.port in {80, 443, 8080}     # 多个端口

按协议过滤

复制代码
http                            # 只显示HTTP协议
dns                             # 只显示DNS协议
tcp                             # 只显示TCP
udp                             # 只显示UDP
icmp                            # 只显示ICMP(ping)
arp                             # 只显示ARP协议

TCP标志位过滤(排查连接问题非常有用):

复制代码
tcp.flags.syn == 1              # SYN包(握手开始)
tcp.flags.ack == 1              # ACK包(确认)
tcp.flags.fin == 1              # FIN包(断开连接)
tcp.flags.rst == 1              # RST包(连接重置)
tcp.flags.syn == 1 and tcp.flags.ack == 0  # 只有SYN没有ACK

内容过滤

复制代码
http contains "password"        # HTTP内容中包含"password"
tcp contains "error"            # TCP负载中包含"error"
http.request.uri contains "baidu"  # URL包含baidu

组合过滤

复制代码
ip.addr == 192.168.1.100 and tcp.port == 80
http or dns
tcp and not port 22

5.3 快速过滤技巧

技巧1:鼠标拖动过滤

展开数据包详情,点击任意字段,Wireshark左下角会显示对应的过滤语法。你甚至可以直接把这个字段拖到顶部的过滤器栏中,自动生成过滤条件。

技巧2:右键快速过滤

在数据包列表的任意字段上右键 → "作为过滤器应用" → 选择"选中"或"未选中"。

技巧3:查看所有可过滤字段

View → Internals → Supported Protocols,可以搜索任何协议及其可过滤字段。

六、实战案例:一步步分析网络通信

6.1 TCP三次握手分析

TCP建立连接需要"三次握手",这是理解网络通信的基础。

抓包步骤

  1. 开始抓包
  2. 访问一个HTTP网站(如 http://neverssl.com,这是一个专门用于测试的非加密网站)
  3. 停止抓包
  4. 在过滤栏输入:tcp.port == 80 and ip.addr == [网站IP]

三次握手的数据包

包序号 方向 标志位 含义
第1包 客户端→服务器 SYN 客户端请求建立连接
第2包 服务器→客户端 SYN, ACK 服务器同意建立
第3包 客户端→服务器 ACK 客户端确认,连接建立完成

在Wireshark中,你可以清楚地看到这三个包的tcp.flags字段依次变化。这就是网络协议从抽象概念变成具体数据包的过程。

排查连接问题

  • 只有SYN没有回复:目标不可达、防火墙拦截或端口未监听
  • 收到RST包:端口未监听或被防火墙拒绝
  • 握手成功但立即断开:应用层拒绝或认证失败

6.2 HTTP请求分析

步骤

  1. 开始抓包
  2. 在浏览器中访问一个HTTP网站
  3. 停止抓包
  4. 过滤:http

你会看到HTTP请求包(如GET / HTTP/1.1)和对应的HTTP响应包(如HTTP/1.1 200 OK)。

追踪完整HTTP会话

在任意HTTP数据包上右键 → Follow → TCP Stream,Wireshark会将这个TCP连接中的所有数据包重组,显示出完整的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": [...]}

这个功能对于调试API接口、分析Web应用问题非常有用。

分析慢请求

在过滤栏输入 http.time > 0.5,可以筛选出响应时间超过0.5秒的HTTP请求,快速定位性能瓶颈。

6.3 DNS解析分析

DNS是"电话簿",把域名转换成IP地址。

抓取DNS查询

  1. 开始抓包
  2. 在浏览器访问一个网站(如 www.example.com
  3. 停止抓包
  4. 过滤:dns

正常DNS查询过程

方向 内容
第1包 客户端→DNS服务器 Standard query A www.example.com
第2包 DNS服务器→客户端 Standard query response A 93.184.216.34

DNS问题排查

  • 查询无响应 :过滤 dns and dns.flags.response == 0,如果只有查询没有响应,检查DNS服务器是否可达
  • 解析慢:看查询和响应的时间差,正常应在50ms以内,超过200ms说明DNS服务器响应慢
  • NXDOMAIN (域名不存在):过滤 dns.flags.rcode == 3

6.4 HTTPS解密(进阶)

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

方法1:使用SSLKEYLOGFILE(推荐)

在浏览器中设置环境变量,让浏览器把TLS会话密钥写入日志文件,Wireshark用这个文件解密:

bash 复制代码
# Linux/Mac
export SSLKEYLOGFILE=~/sslkeys.log

# Windows
set SSLKEYLOGFILE=C:\sslkeys.log

然后在Wireshark中:Edit → Preferences → Protocols → TLS,将"(Pre)-Master-Secret log filename"设置为上述文件路径。

方法2:使用服务器私钥 (仅当你拥有服务器私钥时)

Preferences → Protocols → TLS → RSA keys list,添加服务器私钥。

七、常见故障排查实战

7.1 网站访问慢

排查步骤

  1. 开始抓包
  2. 访问慢的网站
  3. 停止抓包
  4. 过滤:ip.addr == [网站IP]

分析要点

  • DNS解析耗时:检查DNS查询与响应的时间差
  • TCP握手耗时:三次握手是否顺利?有无重传?
  • HTTP响应时间http.time 是否异常?
  • 是否有大量重传 :过滤 tcp.analysis.retransmission

7.2 连接被拒绝

过滤 tcp.flags.rst == 1,查看所有RST包。RST包表示连接被重置,通常原因包括:

  • 目标端口未开放
  • 防火墙规则拦截
  • 服务端程序主动拒绝

7.3 网络延迟高

  1. 过滤出相关通信的TCP流
  2. 查看Time列,计算请求和响应之间的时间差
  3. 检查是否有TCP重传(tcp.analysis.retransmission
  4. 检查是否有TCP零窗口(tcp.window_size == 0

八、高级功能与技巧

8.1 数据流重组(Follow Stream)

Wireshark最强大的功能之一。在任意数据包上右键 → Follow,可以选择:

  • TCP Stream:重组完整的TCP会话
  • UDP Stream:重组UDP数据流
  • HTTP Stream:重组HTTP请求/响应
  • TLS Stream:重组TLS加密会话

这个功能可以让你看到一个完整会话的"全貌",而不是零散的数据包。

8.2 统计功能

Statistics菜单提供了多种分析工具:

  • Protocol Hierarchy:协议层次统计,查看各类协议的占比
  • Conversations:会话统计,查看哪些IP之间通信最多
  • Endpoint:端点统计,查看各IP的流量情况
  • IO Graph:流量图,可视化网络流量变化

8.3 修改时间显示格式

默认的时间显示可能不便于分析。通过 View → Time Display Format 可以修改为:

  • Seconds Since Beginning of Capture:从抓包开始计算的秒数(便于计算时间差)
  • Seconds Since Previous Packet:与上一个包的时间差
  • 绝对时间:实际时间戳

8.4 导出数据

Wireshark支持导出多种格式的数据:

  • File → Export Specified Packets:按需导出选中的包
  • File → Export Packet Dissections:导出为文本、CSV、JSON等格式

8.5 命令行版本:Tshark

Wireshark还有一个命令行版本叫Tshark,适合在服务器上或批量处理场景下使用:

bash 复制代码
# 抓取eth0接口的数据包并保存
tshark -i eth0 -w capture.pcap

# 读取pcap文件并应用过滤器
tshark -r capture.pcap -Y "http"

# 显示特定字段
tshark -r capture.pcap -T fields -e ip.src -e ip.dst

九、学习建议

9.1 循序渐进

第一阶段:会抓

  • 掌握安装和基本抓包操作
  • 能够保存和打开抓包文件
  • 完成一次完整的"抓包→保存→分析"流程

第二阶段:会看

  • 理解数据包列表、详情、原始数据三个区域的作用
  • 能够看懂TCP/IP协议栈各层的信息
  • 识别常见协议(HTTP、DNS、TCP、UDP、ICMP)

第三阶段:会滤

  • 掌握常用显示过滤器的写法
  • 能够快速从海量数据包中定位目标
  • 学会使用"Follow Stream"追踪完整会话

第四阶段:会诊

  • 能够用Wireshark排查常见的网络故障
  • 理解TCP三次握手、四次挥手
  • 能够分析HTTP请求响应全过程

9.2 实践是最好的老师

  • 从ping开始:抓取ICMP包,理解最简单的请求-响应模式
  • 抓取HTTP :访问 http://neverssl.com,看HTTP明文传输
  • 抓取DNS:观察域名如何变成IP地址
  • 分析自己的应用:抓取你开发的或常用的App流量

9.3 推荐学习资源

  • 官方文档:Wireshark官网的用户手册是最权威的参考
  • Wireshark过滤表达式手册wireshark-filter(4) man page
  • 实际项目:遇到网络问题先抓包,用Wireshark找答案

十、结语

Wireshark被誉为"网络世界的显微镜"绝非虚名。它让抽象的"网络通信"变成了看得见、摸得着的一个个数据包。当你亲眼看到TCP三次握手的三个包依次出现,当你通过"Follow Stream"看到完整的HTTP请求和响应,那些曾经只存在于教科书上的网络协议概念,就真正变成了你理解世界的一部分。

掌握Wireshark不需要高深的技术背景,需要的是动手的勇气好奇的心。打开Wireshark,选择一个网卡,点击那个蓝色的鲨鱼鳍------你通往网络世界深处的旅程,就从这一刻开始。

相关推荐
Chief_fly2 小时前
【Windows 下载 ARM64 deb 包 麒麟 ARM 离线安装】
arm开发·windows
梦想不只是梦与想16 小时前
鸿蒙 测试工具:DevEco Testing(一)
测试工具·harmonyos·testing
zlinear数据采集卡17 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
奔跑的架构师20 小时前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
振南的单片机世界21 小时前
硬核菊花链:3个GPIO+无限74HC595=端口扩展“无限套娃”
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡21 小时前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
runafterhit21 小时前
【学习地图】ARM嵌入式类 · 文章索引
arm开发·学习
工业设备方案笔记1 天前
RK3588工业视觉检测方案详解:AI如何赋能智能制造?
arm开发·人工智能·计算机视觉·目标跟踪·视觉检测·边缘计算·制造
不正经学生1 天前
C语言大小端字节序:内存里字节的排列顺序
c语言·开发语言·arm开发·c++·算法·c#