Wireshark网络分析工具完全指南

1- Wireshark 网络分析工具完全指南

Wireshark 是当今最流行的网络封包分析软件,它能够截取各种网络数据包,并以直观的方式显示数据包的详细信息。它广泛应用于网络故障排查、协议分析、安全审计以及开发测试过程中各种问题的定位。

Wireshark分析界面

1.1- 目录

1.2- 软件下载与安装

Wireshark 支持多种操作系统,包括 Windows、macOS 和 Linux。

官方下载地址Wireshark官网

安装步骤:

  1. 访问官方网站,选择适合您系统的安装包
  2. 下载完成后,运行安装程序
  3. 按照安装向导提示操作,一般情况下直接点击 “Next” 即可
  4. 安装过程中,系统会提示安装 WinPcap 或 Npcap(用于捕获网络数据包的驱动程序)

1.2.1- Windows 系统注意事项

在 Windows 10/11 系统中,如果安装完成后选择抓包但不显示网卡,需要安装 Win10Pcap 兼容性补丁:

下载地址Win10Pcap兼容性安装包

提示:最新版本的 Wireshark 已经默认使用 Npcap 驱动,兼容性更好,建议使用最新版本以避免此类问题。

1.3- 网络协议基础

在深入学习 Wireshark 之前,了解一些基本的网络协议知识是非常有帮助的。

1.3.1- ICMP 协议

ICMP(Internet Control Message Protocol,互联网控制消息协议)是 TCP/IP 协议族中的一个重要子协议,位于网络层,主要用于在 IP 主机和路由器之间传递控制消息。

1.3.1.1- 主要功能

  • 错误报告:当数据包传输遇到问题时,如路由器无法找到通往目的地的路径或数据包被丢弃,ICMP 会发送错误报告给原始发送者
  • 查询和响应:用于查询特定的网络信息,如 ping 命令利用 ICMP 的 " 回显请求 " 和 " 回显应答 " 来测试网络连通性
  • 网络诊断:网络管理员可使用 ICMP 诊断网络问题,如 tracert 命令利用 ICMP 时间超过消息追踪路由路径

1.3.1.2- ICMP 消息类型

类型 名称 用途
0 Echo Reply 响应 ping 请求
3 Destination Unreachable 数据包无法到达目的地时发送
4 Source Quench 网络拥堵时请求减少数据流量
5 Redirect 通知主机更新其路由表
8 Echo Request ping 请求消息
11 Time Exceeded 数据包 TTL 到期时发送
12 Parameter Problem 数据包头部存在问题时发送

1.3.1.3- 应用场景

  • ping 命令:检测网络连通性
  • tracert 命令:显示数据包到达目的地所经过的路径
  • 网络故障排查:分析网络通信中的各种故障

1.4- 入门示例:使用 Wireshark 分析 Ping 命令

下面通过一个简单的 ping 命令示例,介绍 Wireshark 抓包的基本操作流程:

  1. 启动 Wireshark:打开 Wireshark 软件

    Wireshark主界面

  2. 选择网卡:点击菜单栏 Capture → Options,选择正在使用的网卡(可通过查看 IP 地址匹配)

    选择网卡

  3. 开始抓包:点击 “Start” 按钮开始抓包

  4. 执行 ping 命令:打开命令提示符(cmd),执行 ping www.baidu.com

  5. 过滤数据包:在过滤栏中输入过滤条件,例如 ip.addr == 119.75.217.26 and icmp(只显示 ICMP 协议且源或目的 IP 为 119.75.217.26 的数据包)

    过滤数据包

  6. 分析结果:可以看到 ping 请求和响应的详细信息

    数据包分析

注意:Wireshark 中不同协议使用不同颜色标识,可以通过 View → Coloring Rules 查看或修改颜色设置。

1.5- Wireshark 界面详解

Wireshark 的界面主要分为以下几个部分:

1.5.1- 显示过滤器区域

位于主界面顶部,用于设置过滤条件筛选已捕获的数据包。可通过 Analyze → Display Filters 管理过滤器。

显示过滤器

1.5.2- 数据包列表区域

显示所有捕获的数据包,每个数据包包含以下信息:

  • 编号
  • 时间戳
  • 源地址
  • 目标地址
  • 协议类型
  • 数据包长度
  • 数据包信息摘要

数据包列表

1.5.3- 数据包详细信息区域

选择特定数据包后,此区域显示该数据包的详细信息,按照网络分层模型组织:

  1. Frame:物理层的数据帧概况
  2. Ethernet II:数据链路层以太网帧头部信息
  3. Internet Protocol Version 4:网络层 IP 包头部信息
  4. Transmission Control Protocol:传输层 TCP 数据段头部信息
  5. 应用层协议:如 HTTP、DNS、FTP 等协议的具体内容

数据包详细信息

以 TCP 包为例,可以看到各个字段的详细信息:

TCP包详细内容

1.5.4- 抓包过滤器

在开始捕获数据包前设置过滤条件,通过 Capture → Capture Filters 配置。

抓包过滤器

使用示例:ip host 60.207.246.216 and icmp(只捕获主机 IP 为 60.207.246.216 的 ICMP 数据包)

抓包过滤器使用

1.5.5- 显示过滤器

在捕获数据包后设置过滤条件,用于从大量数据包中筛选特定内容。

例如,在捕获所有数据包后,通过显示过滤器 ip.addr == 211.162.2.183 and icmp 筛选特定 IP 的 ICMP 数据包:

显示过滤器使用

1.6- 抓包过滤器详解

抓包过滤器使用 Berkeley Packet Filter (BPF) 语法,可基于以下元素构建过滤表达式:

  • 类型 (Type):host、net、port
  • 方向 (Dir):src、dst
  • 协议 (Proto):ether、ip、tcp、udp、http、icmp、ftp 等
  • 逻辑运算符:&& (与)、|| (或)、! (非)

1.6.1- 协议过滤

直接在抓包过滤框中输入协议名即可:

tcp    # 只捕获TCP协议的数据包
http   # 只捕获HTTP协议的数据包
icmp   # 只捕获ICMP协议的数据包

1.6.2- IP 过滤

host 192.168.1.104           # 捕获源或目的IP为192.168.1.104的数据包
src host 192.168.1.104       # 捕获源IP为192.168.1.104的数据包
dst host 192.168.1.104       # 捕获目的IP为192.168.1.104的数据包

1.6.3- 端口过滤

port 80                      # 捕获源或目的端口为80的数据包
src port 80                  # 捕获源端口为80的数据包
dst port 80                  # 捕获目的端口为80的数据包

1.6.4- 逻辑运算符使用

src host 192.168.1.104 && dst port 80   # 捕获源IP为192.168.1.104且目的端口为80的数据包
host 192.168.1.104 || host 192.168.1.102  # 捕获IP为192.168.1.104或192.168.1.102的数据包
!broadcast                              # 不捕获广播数据包

1.7- 显示过滤器详解

显示过滤器使用 Wireshark 特有的语法,功能更加强大灵活。

1.7.1- 比较操作符

  • == 等于
  • != 不等于
  • > 大于
  • < 小于
  • >= 大于等于
  • <= 小于等于
  • contains 包含
  • matches 匹配正则表达式

1.7.2- 协议过滤

直接在过滤框中输入协议名(注意:协议名称必须小写):

tcp     # 只显示TCP协议数据包
http    # 只显示HTTP协议数据包
icmp    # 只显示ICMP协议数据包

协议过滤

1.7.3- IP 过滤

ip.src == 192.168.1.104    # 显示源IP为192.168.1.104的数据包
ip.dst == 192.168.1.104    # 显示目的IP为192.168.1.104的数据包
ip.addr == 192.168.1.104   # 显示源或目的IP为192.168.1.104的数据包

IP过滤

1.7.4- 端口过滤

tcp.port == 80        # 显示源或目的端口为80的TCP数据包
tcp.srcport == 80     # 显示源端口为80的TCP数据包
tcp.dstport == 80     # 显示目的端口为80的TCP数据包

端口过滤

1.7.5- HTTP 方法过滤

http.request.method == "GET"     # 只显示HTTP GET方法的请求
http.request.method == "POST"    # 只显示HTTP POST方法的请求

1.7.6- 逻辑运算符使用

显示过滤器使用 and/or/not 作为逻辑运算符:

ip.addr == 192.168.1.104 and icmp    # 显示IP为192.168.1.104的ICMP数据包
http.request or http.response         # 显示HTTP请求或响应
not arp                               # 不显示ARP协议数据包

逻辑运算符使用

1.7.7- 数据包内容过滤

可以按照数据包内容进行过滤,步骤如下:

  1. 在数据包列表中选择一个数据包
  2. 在数据包详细信息区域中选择要过滤的内容
  3. 右键点击,选择 “Apply as Filter” → “Selected”

选择过滤内容

应用过滤

然后可以对过滤条件进行修改,例如添加 contains 操作符过滤特定内容:

data contains "abcd"    # 过滤数据内容包含"abcd"的数据包

内容过滤

1.8- 案例分析:TCP 三次握手过程

TCP 连接建立需要经过三次握手过程:

  1. 第一次握手:客户端发送 SYN=1,ACK=0 的数据包,请求建立连接
  2. 第二次握手:服务器发送 SYN=1,ACK=1 的数据包,表示允许连接,并要求客户端确认
  3. 第三次握手:客户端发送 SYN=0,ACK=1 的数据包,确认连接已建立

TCP三次握手过程

1.9- 实战:分析 Web 访问流量

下面通过一个实际案例,分析访问网站时的 TCP 连接建立过程:

  1. 启动 Wireshark 开始抓包

  2. 打开浏览器访问 www.huawei.com

  3. 使用 ping www.huawei.com 获取目标 IP 地址

    获取IP地址

  4. 在 Wireshark 中输入过滤条件 ip.addr == 211.162.2.183,查看与该 IP 的通信数据包

    TCP连接数据包

可以看到,前三个数据包正是 TCP 三次握手的过程,第四个数据包才是 HTTP 请求内容。这验证了 HTTP 协议确实是基于 TCP 连接的。

1.9.1- 第一次握手数据包分析

客户端发送 SYN 标志位,请求建立连接:

第一次握手

关键属性:

  • SYN = 1:表示请求建立连接
  • Seq = 0:初始序列号为 0,表示当前还未发送数据
  • Ack = 0:表示当前未接收到数据

1.9.2- 第二次握手数据包分析

服务器回应确认包,设置 SYN 和 ACK 标志位:

第二次握手

关键属性:

  • SYN = 1:表示同意建立连接
  • ACK = 1:表示已收到客户端的 SYN 包
  • Seq = 0:服务器的初始序列号
  • Ack = 1:确认收到客户端的序列号 0,期望下一个序列号为 1

1.9.3- 第三次握手数据包分析

客户端再次发送确认包,只设置 ACK 标志位:

第三次握手

关键属性:

  • SYN = 0:不再是建立连接的请求
  • ACK = 1:表示确认收到服务器的 SYN-ACK 包
  • Seq = 1:客户端的序列号
  • Ack = 1:确认收到服务器的序列号 0,期望下一个序列号为 1

三次握手完成后,TCP 连接建立,开始传输数据:

数据传输

在数据传输过程中,可以查看 TCP 的 FLAGS 字段,包含以下标志位:

  • SYN:表示建立连接
  • FIN:表示关闭连接
  • ACK:表示响应确认
  • PSH:表示有数据传输
  • RST:表示连接重置
  • URG:表示紧急数据

TCP标志位

1.10- 常见问题与技巧

  1. 时间戳显示格式:调整数据包列表中的时间显示格式,可以通过 View → Time Display Format → Date and Time of Day

    时间戳格式

  2. 数据包追踪:右键点击数据包,选择 Follow → TCP/UDP/HTTP Stream 可以查看完整的会话内容

  3. 导出数据包:通过 File → Export Packet Dissections 可以将数据包导出为文本文件进行进一步分析

  4. 统计分析:使用 Statistics 菜单下的各种工具,可以查看协议分布、会话统计等信息

  5. 专家信息:通过 Analyze → Expert Information 可以查看 Wireshark 自动识别的潜在问题和异常

  6. 命令行捕获:可以使用 Wireshark 的命令行工具 tshark 进行无界面捕获,适合服务器环境

1.11- 参考资源


作者按:本文介绍了 Wireshark 的基本用法和一些常见案例分析,希望对网络分析和故障排查工作有所帮助。如有问题或建议,欢迎在评论区留言交流。