Wireshark 是一个开源的网络协议分析器,它的核心功能是捕获 网络上流动的数据包,并尽可能详细地显示出这些数据包的信息。它本身不会修改网络内容,也不会主动发出数据包,只是一个安静的"观察者"。
-
前身与历史 :它最初在1998年以 Ethereal 的名字诞生,后因商标问题在2006年更名为 Wireshark。
-
核心特点:
-
免费开源:在GNU GPL许可证下发布,任何人都可以免费使用和修改。
-
跨平台:支持 Windows、macOS、Linux 等主流操作系统。
-
功能强大:支持数百种协议的解析,拥有强大的过滤和统计分析功能。
-
🚀 如何上手使用 Wireshark?
下面我们一步步来,让您能快速开始第一次抓包。
1. 安装 Wireshark
您可以根据自己的操作系统,参考以下方式进行安装:
| 操作系统 | 安装方法 |
|---|---|
| Windows | 1. 访问 Wireshark 官网 下载安装包。 2. 运行安装程序,在安装过程中,务必勾选安装 Npcap 或 WinPcap,这是Wireshark用来抓包的核心驱动。 |
| macOS | 1. 从官网下载 .dmg 文件安装。 2. 或者,如果您安装了Homebrew,可以使用命令 brew install wireshark。 |
| Linux (如Ubuntu/Debian) | 打开终端,执行命令: sudo apt update sudo apt install wireshark 安装过程中,可以选择允许非root用户抓包,方便日常使用。 |
2. 认识主界面
启动 Wireshark 后,界面主要分为几个区域,理解它们有助于快速上手:
-
接口列表区:启动时你会看到电脑上的所有网络接口列表(如Wi-Fi、以太网、蓝牙等)。旁边跳动着的波浪线表示该接口有实时流量,选择正确的接口是抓包成功的关键。
-
数据包列表区:开始抓包后,这里会一行行地实时显示捕获到的数据包。每一行都包含编号、时间、源地址、目标地址、协议、长度和基本信息。
-
数据包详情区:在列表中选中一个包,这里会以树形结构显示它的详细内容,从物理层到应用层的所有协议字段都会清晰地展开。
-
数据包字节区:最下方的区域会显示数据包的原始十六进制和ASCII码形式。
3. 开始第一次抓包:以访问网站为例
让我们通过一个简单的例子,体验一下抓包的全过程。
-
选择网卡并开始:在主界面的接口列表中,双击您正在使用的网卡(例如,连接Wi-Fi就选择名字带Wi-Fi或wlan0的接口)。Wireshark 会立即开始捕获所有经过该网卡的数据包。
-
产生流量 :打开您的浏览器,访问一个网站,比如
www.example.com。 -
停止抓包:访问完成后,点击工具栏上的红色"停止"按钮。
-
初步观察 :此时您会看到数据包列表区已经被大量的数据包填满。其中,协议列为 TCP 和 HTTP 的包将是这次网页访问的主角。
-
使用过滤器精准定位 :为了从海量数据中找到与
example.com相关的包,在界面顶部的"显示过滤器"输入框中输入http或ip.addr == 93.184.216.34(此为示例IP,实际请用您访问的网站IP),然后回车。列表中就只显示HTTP协议或与该IP相关的数据包了。
4. 核心技能:用好两种过滤器
Wireshark 的强大很大程度上归功于其灵活的过滤机制。
-
捕获过滤器 :在开始抓包前设置,只捕获符合条件的数据包,丢弃其余部分,可以帮助减少抓包文件的体积。它使用BPF语法。
- 例如 :
host 192.168.1.100只捕获来自或去往该IP的数据包。
- 例如 :
-
显示过滤器 :在抓包结束后设置,在已捕获的所有数据包中,筛选出符合条件的数据包进行显示。它使用Wireshark特有的语法,功能更强大、更灵活。这也是我们最常用的过滤器。
下面是一些常用的显示过滤器语法,您可以现学现用:
| 过滤目标 | 过滤器表达式 | 说明 |
|---|---|---|
| 按协议 | http |
仅显示HTTP协议的数据包 |
dns |
仅显示DNS协议的数据包 | |
icmp |
仅显示ICMP协议(如ping命令)的数据包 | |
| 按IP地址 | ip.addr == 192.168.1.1 |
显示源IP或目的IP为192.168.1.1的所有包 |
ip.src == 192.168.1.100 |
仅显示源IP为192.168.1.100的包 |
|
ip.dst == 8.8.8.8 |
仅显示目的IP为8.8.8.8的包 |
|
| 按端口 | tcp.port == 80 |
显示源或目的TCP端口为80的所有包 |
tcp.srcport == 443 |
仅显示源TCP端口为443的包 | |
| 组合过滤 | http and ip.addr == 192.168.1.100 |
显示IP为192.168.1.100的HTTP流量 |
tcp.port == 80 or tcp.port == 443 |
显示所有HTTP(80)和HTTPS(443)流量 | |
| 特定字段 | tcp.analysis.retransmission |
显示所有TCP重传包,用于排查网络延迟和丢包 |
http.request.method == "GET" |
仅显示HTTP GET请求 |
5. 进阶技巧
-
追踪数据流 :在数据包列表区,右键点击任何一个属于TCP或HTTP会话的数据包,选择 "追踪流" -> "TCP流"(或HTTP流),Wireshark会将这次会话的所有数据重组并显示出来,对于分析应用层协议(如HTTP的请求和响应内容)非常方便。
-
分析三次握手 :过滤器输入
tcp,找到访问网站时的前三个包。它们分别是:-
客户端发送的
[SYN]包(请求连接)。 -
服务器回复的
[SYN, ACK]包(同意连接)。 -
客户端发送的
[ACK]包(确认连接建立)。这就是著名的TCP三次握手过程。
-
6. 常见问题与解决
-
为什么抓不到包?
-
是否以管理员/root权限运行?在Linux/macOS下,可能需要用
sudo启动。 -
是否选对了网卡?如果用的是Wi-Fi,却选择了"以太网"网卡,肯定抓不到数据。
-
-
数据包太多,眼花缭乱? 这就是显示过滤器大显身手的时候,务必多加练习使用。