Wireshark作为一款强大的网络封包分析软件,凭借其蓝色鲨鱼鳍的经典图标而广为人知。它能够截获流经网卡的网络数据包,并提供极为详尽的分析视图,是网络工程师和安全分析师进行故障排查、协议学习和性能分析的必备利器。本文将系统性地介绍Wireshark的核心界面、抓包流程、过滤器使用,并通过一个具体的TCP三次握手案例,帮助你快速上手这款工具。
Wireshark主界面概览
启动Wireshark后,你会看到一个功能分区明确的主界面。整个界面主要分为以下几个核心区域:
- 显示过滤器 (Display Filter)栏:位于顶部工具栏下方,输入框旁有提示“Apply a display filter ... <Ctrl+/>”。在这里可以输入过滤表达式,对已捕获的数据包列表进行筛选,是分析时最常用的功能之一。
- 数据包列表 (Packet List Pane):主窗口区域,以表格形式列出所有捕获到的数据包。每一行代表一个数据包,包含以下关键列:
- No.: 数据包序号
- Time: 捕获时间戳
- Source: 源IP地址
- Destination: 目的IP地址
- Protocol: 协议类型(如TCP、UDP、ICMP、HTTP等)
- Length: 数据包长度
- Info: 数据包概要信息
- 数据包详情 (Packet Details Pane):位于数据包列表下方。当你单击列表中的某个数据包时,此处会以树状结构分层展示该数据包的所有协议字段信息,从最底层的物理帧到最高层的应用数据一目了然。
- 数据包字节 (Packet Bytes Pane):位于最底部,以十六进制和ASCII码形式展示数据包的原始字节内容。
第一次抓包:以Ping为例
让我们通过一个最简单的例子——捕获Ping命令的ICMP数据包,来熟悉抓包流程。
- 选择网卡:点击菜单栏
Capture -> Options(或工具栏上的齿轮图标),打开捕获接口设置窗口。在接口列表中,选择你正在使用的活动网卡(例如名为“Microsoft WLAN”的无线网卡,其IP地址为192.168.1.104)。你可以勾选“Enable promiscuous mode on all interfaces”(混杂模式)以捕获所有流经网卡的数据包,但通常不设置特定捕获过滤器即可开始。
- 开始捕获:点击
Start 按钮,Wireshark立即开始捕获经过所选网卡的所有网络数据包。
- 执行操作:打开命令提示符,执行
ping www.baidu.com。命令会显示类似以下结果:
正在 Ping www.a.shifen.com [119.75.217.26] 具有 32 字节的数据:
来自 119.75.217.26 的回复: 字节=32 时间=20ms TTL=53
- 停止并过滤:返回Wireshark,点击红色停止按钮。此时数据包列表区可能充满了各种协议的数据包。为了只查看我们关心的Ping包,在显示过滤器栏中输入:
ip.addr == 119.75.217.26 and icmp。这个表达式表示只显示源或目的IP为119.75.217.26,且协议为ICMP的数据包。
-
| 查看结果:应用过滤器后,列表中将清晰地显示一请求一响应的ICMP数据包对。例如: |
No. |
Source |
Destination |
Protocol |
Info |
| 1 |
192.168.1.104 |
119.75.217.26 |
ICMP |
Echo (ping) request |
| 2 |
119.75.217.26 |
192.168.1.104 |
ICMP |
Echo (ping) reply |
至此,你已成功完成了第一次抓包和分析。
深入理解数据包详情
点击列表中的一个ICMP请求包,查看数据包详情面板。这里按照网络分层模型,自底向上地解析了整个数据帧:
- Frame (物理层帧):显示该帧的捕获时间、长度等物理信息。
- Ethernet II (数据链路层):显示源和目的MAC地址。
- Internet Protocol Version 4 (网络层/IP):显示源IP (192.168.1.104)、目的IP (119.75.217.26)、TTL等IP头信息。
- Internet Control Message Protocol (ICMP):这是核心,显示Type为8(回显请求)、Code为0、以及序列号(Sequence number)等信息。
通过这个面板,你可以透彻地理解每一个数据包的构成。Wireshark会使用不同颜色高亮不同协议的数据包,颜色规则可以通过 View -> Coloring Rules 查看和定制。例如,其中一条规则可能是“ICMP errors”,其过滤表达式为 icmp.type eq 3 || icmp.type eq 4 || icmp.type eq 5 || icmp.type eq 11。
过滤器的艺术:精准定位数据
面对海量数据包,过滤器是Wireshark的灵魂。它分为两种:捕获过滤器和显示过滤器。
捕获过滤器 (Capture Filter)
在开始捕获前设置,语法相对严格,遵循BPF格式。在 Capture -> Capture Filters 中可以管理预设规则。例如,若只想捕获与特定主机的ICMP流量,可以在接口设置界面的“Capture filter for selected interfaces”框中输入:host 60.207.246.216 and icmp。这样,抓包结果从一开始就只包含符合条件的数据包,非常高效。
显示过滤器 (Display Filter)
在捕获后使用,语法更直观灵活,是日常分析的主要工具。
常用过滤表达式示例:
- 协议过滤:
tcp, http, dns
- IP地址过滤:
ip.src == 192.168.1.104 (源IP)
ip.dst == 192.168.1.104 (目的IP)
ip.addr == 192.168.1.104 (任一IP)
- 端口过滤:
tcp.port == 80 (源或目的端口)
tcp.srcport == 80 (源端口)
udp.dstport == 53 (目的端口)
- 组合逻辑:使用
and、or、not
ip.addr == 192.168.1.104 and tcp.port == 443
- HTTP方法过滤:
http.request.method == "GET"
- 内容过滤:
tcp contains “HTTP” 或 frame contains “abcd”
你可以直接在过滤器栏输入,也可以右键点击数据包详情中的某个字段,选择“Apply as Filter”来快速生成过滤条件。
实战案例:剖析TCP三次握手
TCP三次握手是建立可靠连接的基础。我们以访问一个网站为例,用Wireshark观察这一过程。
- 开始抓包,在浏览器中访问一个网站(如
www.huawei.com)。
- 使用
ping www.huawei.com 获取其IP地址(例如 211.162.2.183)。
- 在Wireshark过滤器中输入:
ip.addr == 211.162.2.183 and tcp。你将看到一系列TCP数据包,其中最前面的三个就是三次握手。
第一次握手 - [SYN]
客户端(你的电脑)发送一个TCP包。
- 关键标志:
Flags: 0x002 (SYN)
- Seq(序列号):一个随机初始值,例如
Seq=0 (相对值)。
- Ack(确认号):0
- Info列显示:
[SYN] Seq=0 Win=65535 Len=0
第二次握手 - [SYN, ACK]
服务器收到SYN包后,回应一个包。
- 关键标志:
Flags: 0x012 (SYN, ACK)
- Seq:服务器端的随机初始序列号。
- Ack:值为
客户端Seq + 1,即 Ack=1。这表示服务器期望下次收到客户端序列号为1的数据。
- Info列显示:
[SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0
第三次握手 - [ACK]
客户端再次发送确认包。
- 关键标志:
Flags: 0x010 (ACK)
- Seq:值为
1(即第一次握手的Seq+1)。
- Ack:值为
服务器Seq + 1,即 Ack=1。
- Info列显示:
[ACK] Seq=1 Ack=1 Win=262144 Len=0
至此,TCP连接建立成功,随后便开始传输HTTP等应用层数据。在数据包详情面板的TCP层,你可以清晰看到 Sequence number、Acknowledgment number 以及 Flags 字段的具体值,与理论完美对应。
通过Wireshark,网络通信不再是黑盒。无论是排查连接故障、分析协议交互,还是学习网络原理,它都是一个不可或缺的窗口。结合丰富的过滤器和详细的数据包解析,你可以深入网络的每一个角落,成为一名真正的网络侦探。
参考资料
[1] Wireshark的抓包和分析,看这篇就够了!, 微信公众号:mp.weixin.qq.com/s/---fcYsl4T84HdJXYa-nhQ
版权声明:本文由 云栈社区 整理发布,版权归原作者所有。