Wireshar

Wireshar

一、Wireshark基础认知

1.1 Wireshark是什么

Wireshark是全球使用最广泛的开源网络抓包分析软件,可以实时捕获网络接口上的数据包,并提供详细的协议分析。它主要用于:

  • 网络故障排查:诊断网络连接问题、延迟、丢包等
  • 安全分析:检测恶意流量、攻击溯源、病毒传播
  • 协议学习:深入理解TCP/IP、HTTP、DNS等协议工作原理
  • 应用调试:分析应用层通信问题

技术原理:使用WinPCAP(Windows)或libpcap(Linux/macOS)作为驱动接口,直接与网卡进行数据报文交换。

1.2 抓包原理与环境

根据网络环境不同,抓包方式分为两类:

单机环境:直接抓取本机网卡收发的所有数据包

交换机环境(局域网抓包):

  • 端口镜像:配置交换机将指定端口的流量复制到监控端口
  • ARP欺骗:通过伪造MAC地址获取其他设备的流量(谨慎使用,可能违法)

1.3 安装与配置

Windows安装步骤

  1. 访问官网 www.wireshark.org 下载最新版本
  2. 运行安装程序,建议全部使用默认选项
  3. 安装过程中会提示安装Npcap(推荐选择"Install Npcap")
  4. 完成安装后重启电脑(部分系统需要)

Linux安装

1
2
3
4
5
# Ubuntu/Debian
sudo apt-get install wireshark

# CentOS/RHEL
sudo yum install wireshark

首次运行配置

  • 以管理员/root权限运行(捕获数据包需要高级权限)
  • 选择网卡时,可通过ipconfig(Windows)或ifconfig(Linux)命令确认当前使用的网络接口

二、界面详解(六大区域)

启动Wireshark后,主界面分为六个核心区域:

2.1 菜单栏

顶部标准菜单,包含所有功能入口:

  • 文件:打开、保存、导出抓包文件
  • 编辑:查找、标记、首选项
  • 视图:数据包着色、时间格式、布局设置
  • 捕获:开始/停止抓包、捕获选项、接口列表
  • 分析:显示过滤器、解码方式、专家信息
  • 统计:各类统计图表和报告
  • 电话:VoIP通话分析
  • 无线:WiFi相关功能
  • 工具:防火墙规则生成、Lua脚本
  • 帮助:文档和协议参考

2.2 工具栏

常用功能快捷按钮(鼠标悬停可查看提示):

  • 蓝色鲨鱼鳍:开始抓包
  • 红色方块:停止抓包
  • 黄色齿轮:捕获选项
  • 放大镜:放大/缩小/还原字体
  • 过滤器输入框:快速输入显示过滤器

2.3 数据包列表(Packet List)

显示所有捕获的数据包摘要,默认列包括:

  • No.:数据包序号
  • Time:捕获时间(相对于抓包开始的时间)
  • Source:源IP地址
  • Destination:目标IP地址
  • Protocol:协议类型(HTTP, TCP, DNS等)
  • Length:数据包长度(字节)
  • Info:协议详细信息摘要

列管理操作

  • 添加列:在详情面板右键任意字段 → “应用为列”(或Ctrl+Shift+I)
  • 隐藏列:在列标题右键 → 取消勾选
  • 删除列:在列标题右键 → “Remove this Column”
  • 移动列:直接拖动列标题调整顺序

2.4 数据包详情(Packet Details)

分层展示选中数据包的详细协议信息,按OSI模型层次展开:

1
2
3
4
5
Frame: 物理层帧信息
Ethernet II: 数据链路层
Internet Protocol Version 4: 网络层
Transmission Control Protocol: 传输层
Hypertext Transfer Protocol: 应用层

每行前的+号可展开查看具体字段值。

2.5 数据包字节(Packet Bytes)

显示选中数据包的原始十六进制和ASCII内容,用于深入分析。

2.6 状态栏

底部信息栏显示:

  • 当前抓包状态
  • 数据包总数和显示数量
  • 配置文件路径
  • 捕获文件大小

三、基础抓包操作

3.1 选择网卡并开始抓包

  1. 启动Wireshark,进入网卡选择界面
  2. 识别网卡(通常WLAN是无线网卡,Ethernet是有线网卡)
  3. 双击网卡名称立即开始抓包
  4. 或选中网卡后点击左上角的蓝色鲨鱼鳍按钮

小技巧:不确定用哪个网卡时,在CMD中运行ping www.baidu.com,观察哪个网卡有流量波动。

3.2 常用抓包选项

点击捕获选项(黄色齿轮)可设置:

  • 混杂模式:捕获网卡上所有数据包(包括非本机),默认开启
  • 捕获过滤器:预设过滤条件,减少不必要的数据
  • 文件输出:自动保存到文件,可设置文件大小分割
  • 停止条件:按时间、大小或数据包数量自动停止

3.3 停止与保存

  • 停止抓包:点击左上角的红色方块按钮
  • 重新开始:点击绿色圆形箭头(会清空当前数据)
  • 继续抓包:停止后再次点击蓝色鲨鱼鳍(数据追加)

保存数据

  1. 点击文件 → 保存(或Ctrl+S)
  2. 选择保存位置,格式选择默认的.pcapng
  3. 或直接点击工具栏的保存图标

3.4 导出特定数据包

当只需要部分数据时:

  1. 导出单个:选中数据包 → 文件 → 导出特定分组 → 勾选"Selected packets only"
  2. 导出标记的:先按Ctrl+M标记多个包 → 导出时勾选"Marked packets only"
  3. 导出过滤器结果:在导出界面勾选"All packets displayed"

四、时间显示设置

默认时间格式不易阅读,建议调整:

  1. 点击菜单 视图 → 时间显示格式
  2. 推荐选择:“日期和时间(YYYY-MM-MM) 和 自开始经过的秒数”
  3. 精度选择:“自动”“秒”

时间基准可切换:

  • 自捕获开始经过的时间(默认)
  • 自上次显示的数据包经过的时间
  • 自上一个已标记的数据包经过的时间

五、过滤器深度详解(核心功能)

5.1 两种过滤器的区别

类型作用时机优点缺点使用场景
捕获过滤器抓包时过滤减少数据量,性能高不可逆,丢失的数据无法恢复大流量、长时间抓包
显示过滤器抓包后过滤灵活,可随时修改占用内存大精确分析、调试

5.2 捕获过滤器(Capture Filter)语法

采用BPF(Berkeley Packet Filter)语法:

1
[协议][方向][类型][值][逻辑操作符][其他条件]

常用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 只捕获HTTP流量
tcp port 80

# 捕获目标IP为192.168.1.100的流量
dst host 192.168.1.100

# 捕获来自192.168.1.0/24网段的流量
src net 192.168.1.0/24

# 捕获非ICMP的流量
not icmp

# 捕获端口80或443的流量
port 80 or port 443

# 捕获大于1024字节的包
greater 1024

配置位置:捕获选项 → 捕获过滤器输入框

5.3 显示过滤器(Display Filter)语法

Wireshark特有语法,功能更强大:

1
协议.字段 运算符 值 [逻辑运算符 其他条件]

基本运算符

  • == 等于
  • != 不等于
  • > 大于
  • < 小于
  • >= 大于等于
  • =< 小于等于
  • contains 包含字符串
  • matches 匹配正则表达式
  • in 在集合中

逻辑运算符

  • &&and
  • ||or
  • !not

常用过滤表达式大全

按协议过滤

1
2
3
4
5
6
http
dns
tcp
udp
icmp
arp

按IP地址

1
2
3
4
ip.addr == 192.168.1.100          # 源或目标为此IP
ip.src == 192.168.1.100           # 仅源IP
ip.dst == 192.168.1.100           # 仅目标IP
ip.addr == 192.168.1.0/24         # 网段过滤

按端口

1
2
3
4
tcp.port == 80                    # TCP的源或目标端口
tcp.dstport == 80                 # 仅目标端口
tcp.srcport == 12345              # 仅源端口
udp.port == 53                    # UDP端口

按域名

1
2
http.host == "www.baidu.com"
dns.qry.name == "www.baidu.com"

按数据内容

1
2
3
http contains "password"          # HTTP中包含密码关键字
tcp.payload contains "GET"        # TCP负载包含GET
tcp.flags.syn == 1                # TCP SYN标志位为1

组合过滤

1
2
ip.addr == 192.168.1.100 && tcp.port == 80
(http || dns) && ip.src == 192.168.1.1

过滤HTTP状态码

1
2
http.response.code == 200         # 成功响应
http.response.code == 404         # 未找到

过滤TCP问题

1
2
3
tcp.analysis.retransmission       # TCP重传
tcp.analysis.duplicate_ack        # 重复ACK
tcp.flags.reset == 1              # TCP RST

5.4 显示过滤器实践技巧

  1. 自动补全:输入时按Tab键自动补全协议和字段名
  2. 表达式 builder:点击过滤器输入框右侧的表达式按钮,图形化构建过滤器
  3. 保存常用过滤器:在过滤器输入框下拉箭头中可保存和管理常用表达式
  4. 清除过滤器:点击过滤器输入框右侧的X按钮

六、数据包分析进阶

6.1 标记与高亮

标记重要数据包

  • 选中数据包 → 右键 → 标记/取消标记(或Ctrl+M)
  • 被标记的包背景变为黑色,便于快速定位

着色规则: Wireshark默认按协议着色:

  • 浅绿色:HTTP
  • 深绿色:TCP
  • 浅蓝色:UDP
  • 黑色:TCP错误包

自定义着色

  1. 视图 → 着色规则
  2. 可新建规则,如:将状态码500的HTTP包标记为红色
  3. 格式:http.response.code >= 500

6.2 流追踪(Follow Stream)

将TCP/UDP会话重组为完整数据流:

  1. 右键数据包 → 追踪流 → TCP流
  2. 新窗口显示完整的客户端-服务器通信
  3. 红色表示客户端发送,蓝色表示服务器响应
  4. 支持保存原始数据为文本或图片

应用场景

  • 查看完整HTTP请求和响应
  • 分析FTP文件传输内容
  • 调试API调用

6.3 统计功能

协议分级

  • 统计 → 协议分级
  • 显示各协议层次的流量占比和包数
  • 快速识别异常流量类型

IO图表

  • 统计 → IO图表
  • 可视化网络流量随时间变化
  • 可自定义图表类型(数据包数、字节数等)

流量图(Flow Graph)

  • 统计 → 流量图
  • 图形化展示TCP会话时序
  • 分析延迟和丢包位置

会话统计

  • 统计 → 会话
  • 查看IP、TCP、UDP会话列表
  • 按数据量排序找出大流量连接

七、实战分析场景

7.1 HTTP请求分析

  1. 过滤:http
  2. 查看Info列的HTTP方法(GET/POST)
  3. 双击数据包查看详情:
    • 展开Hypertext Transfer Protocol
    • 查看请求URL、Header、Cookie
  4. 右键 → 追踪流 → 查看完整请求响应

分析响应时间

  • 查看Time列的时间差
  • 统计 → 服务响应时间 → HTTP

7.2 TCP连接问题诊断

三次握手分析

  1. 过滤:tcp.flags.syn == 1
  2. 正常流程:SYN → SYN,ACK → ACK

重传检测

  1. 过滤:tcp.analysis.retransmission
  2. 大量重传表明网络质量差或服务器过载

RST问题

  1. 过滤:tcp.flags.reset == 1
  2. RST表示连接被强制关闭,可能端口未监听或防火墙拦截

7.3 DNS问题排查

  1. 过滤:dns
  2. 查看查询和响应:
    • 查询dns.flags.response == 0
    • 响应dns.flags.response == 1
  3. 检查响应时间(Time列)
  4. 过滤失败响应:dns.flags.rcode != 0

7.4 性能问题分析

高延迟定位

  1. 统计 → IO图表 → 显示过滤器填入tcp.time_delta > 0.1(100ms)
  2. 使用TCP时间分析
    • 展开TCP详情 → 查看Time since previous frame
    • 过滤:tcp.time_delta > 0.5 找出慢响应

带宽占用

  1. 统计 → 协议分级 → 查看各协议字节数
  2. 统计 → 会话 → TCP → 按Bytes排序找出大流量连接

八、高级技巧与最佳实践

8.1 性能优化

大流量抓包

  1. 使用捕获过滤器减少数据量
  2. 设置文件环形缓冲:捕获选项 → 使用多个文件 → 设置文件大小和数量
  3. 限制每包大小:捕获选项 → 限制每个数据包为N字节

内存管理

  • 编辑 → 首选项 → 高级 → 设置捕获文件缓存大小
  • 定期保存和清空数据:文件 → 关闭并重新开始

8.2 安全分析

检测扫描行为

  1. 过滤大量SYN包:tcp.flags.syn == 1 && tcp.flags.ack == 0
  2. 统计 → 会话 → 查看大量半开连接

检测恶意流量

  1. 过滤可疑域名:dns.qry.name contains "exe"
  2. 分析异常端口:tcp.port == 4444(常见木马端口)

8.3 HTTPS解密

Wireshark默认无法解密HTTPS,需要配置:

  1. 方法一:浏览器密钥日志

    • Chrome/Firefox设置环境变量SSLKEYLOGFILE
    • Wireshark:编辑 → 首选项 → Protocols → TLS → 导入密钥日志文件
  2. 方法二:使用Fiddler中间人代理

8.4 常用快捷键

快捷键功能
Ctrl+E开始/停止抓包
Ctrl+M标记/取消标记数据包
Ctrl+F查找(支持多种模式)
Ctrl+S保存文件
Ctrl+R重新加载文件
F5重新应用过滤器
Tab自动补全过滤器
Shift+Ctrl+D复制数据包摘要
Alt+→在协议树中展开下一个

8.5 配置文件管理

  • 导出配置:编辑 → 配置文件夹 → 备份所有文件
  • 导入配置:将备份文件复制到新电脑的配置文件夹
  • 重置配置:帮助 → 关于Wireshark → 文件夹 → 双击后删除文件

九、学习资源与社区

  1. 官方文档:https://www.wireshark.org/docs/
  2. 协议参考:https://www.wireshark.org/docs/dfref/
  3. Sample Captures:https://wiki.wireshark.org/SampleCaptures
  4. 推荐书籍:《Wireshark数据包分析实战》

十、注意事项

  1. 权限:抓包需要管理员权限
  2. 隐私:避免在公共网络抓包,可能捕获他人敏感信息
  3. 法律:未经授权抓取他人流量可能违法
  4. 性能:大流量抓包会占用大量磁盘空间和内存
  5. 加密:HTTPS/TLS流量默认不可读

学习建议

  1. 先从本机抓包开始,熟悉界面和基本操作
  2. 掌握显示过滤器是核心,建议每天练习3-5个表达式
  3. 多使用流追踪功能理解完整通信过程
  4. 遇到网络问题时,先用Wireshark抓包再分析
  5. 保存典型的抓包文件,建立自己的分析案例库

这份教程涵盖了Wireshark的核心功能,建议边操作边学习,从简单的HTTP分析开始,逐步深入到TCP/IP协议细节。

本文采用 CC BY-NC-SA 4.0 许可协议
使用 Hugo 构建
主题 StackJimmy 设计