Windows 上的 Wireshark 抓包教程
本文介绍 Windows 10 系统下使用 Wireshark 抓 Wi-Fi 无线空包的详细教程。
安装 Wireshark
关于 Wireshark
Wireshark(前身 Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。它可以运行在 Windows 和 Linux 操作系统上。可以使用该工具捕获并分析各类协议数据包,本文将讲解该工具的安装及基本使用方法。
下载及安装
Kali Linux 系统自带 Wireshark 工具,而 Windows 系统中默认没有安装该工具。 进入 Wireshark 官网。单击 Get started
进入下载页面。
在 Stable Release 部分可以看到目前 Wireshark 的最新版本是 4.2.4,并提供了 Windows(32 位和64 位)、Mac OS 和源码包的下载地址。您可以根据自己的操作系统下载相应的软件包。
这里下载 Windows64 位的安装包。选择 Windows Installer(64-bit)
,进行下载,下载后的文件名为 Wireshark-win64-4.2.4.exe
。双击下载的软件包进行安装。安装使用默认值单击 Next
按钮即可。过程中需要注意:Wireshark 会向客户询问是否同步安装 Npcap 插件(默认勾选)。
Npcap 是由 Nmap 项目创建的高级数据包捕获和网络嗅探软件工具,它是一个轻量级但功能强大的平台,使用户能够在 Windows 操作系统上执行实时网络流量分析和监控。该步骤需要注意 Npcap 的版本,早期的 Npcap-1.7.1 版本无法使用 cmd 打开网卡的 monitor mode,在 1.76 版本后已修复。具体可参考 信息来源,目前最新下载的 Wireshark 自带的是 1.78 版本,可以直接安装。
注意
Npcap 会弹窗进入第二个安装页面,需要勾选下图两个选项(默认没有勾选),不然无法抓取 802.11 包。
安装好以后,在 Windows 的“开始”菜单中会出现 Wireshark 图标。
抓包网卡
首要考虑的是抓包网卡需要支持监听模式(Monitor mode),其次需要考虑的是网卡支持的无线协议和传输速率。
监听模式(Monitor Mode)
监听模式,或 RFMON(Radio Frequency Monitor),是指无线网卡可以接收所有经过它的数据流的工作方式,对应于 IEEE 802.11 网卡的其他模式,诸如 Master(路由器)、Managed(普通模式的网卡)、Ad-hoc 等。监听模式不区分所接收数据包的目标 MAC 地址,这点和混杂模式类似。然而和混杂模式不同的是,监听模式不需要和无线接入点(AP)或 Ad-hoc 网络建立连接。监听模式是无线网卡特有的特殊模式,而混杂模式应用于有线网卡和无线网卡。监听模式通常用于网络发现、流量监听和分组分析(来源: Wikipedia)。
判断网卡支持的模式
可以通过 Npcap 工具查看当前网卡的模式、支持的模式并打开监听模式。
win+R
或开始菜单输入cmd
打开 cmd 命令提示符窗口:查看网卡的 GUID,输入
netsh wlan show interfaces
查看当前模式,复制 GUID,然后再输入
WIanHelper.exe + GUID + modes
,如:wlanhelper.exe 00971d40-8f3c-426d-bab3-5a38ce789c45 modes
即可查看网卡支持的模式,许多笔记本自带的网卡只会有 managed 模式,此时就需要另外购买支持监听模式的无线网卡。
为网卡打开监听模式,输入
WlanHelper.exe + GUID + mode monitor
,如:wlanhelper.exe 00971d40-8f3c-426d-bab3-5a38ce789c45 mode monitor
成功会提示
Success
:注意
cmd 需要用管理员权限打开,否则无法打开监听模式并报错。也可输入
mode
查看当前的模式,更多 WlanHelper 的用法可键入WlanHelper.exe -h
查看。
网卡挑选
根据您的抓包需求挑选合适的无线抓包网卡,如果您需要抓取 Wi-Fi 6 的包,那就需要选择支持 802.11 ax 协议的无线网卡。Wi-Fi 协议版本的对照表参考如下:
Generation |
IEEE Standard |
Radio Frequency (GHz) |
---|---|---|
Wi-Fi 6/6E |
802.11ax |
2.4, 5/6 |
Wi-Fi 5 |
802.11ac |
5 |
Wi-Fi 4 |
802.11n |
2.4, 5 |
您可以在购物网站搜索 无线抓包
、 抓包网卡
等关键字,一般带有抓包功能的网卡都支持监听模式。
如果商品没有详细介绍参数,但有提供所使用的无线芯片型号,可以直接搜索型号查看该芯片的详细参数:
本文以雷凌芯片 RT3572 的思科抓包网卡为例,该芯片支持 802.11n 最高速率 300 Mbps,可以抓取 Wi-Fi 4 协议的空包。
配置网卡驱动
网卡到手后,需要安装对应的驱动程序,现在一些网卡是插上即用免安装,插上网卡后打开 控制面板 - 设备管理器
,在 网络适配器
栏中找到新插入的网卡,双击可查看详细信息,如驱动不适配,会有黄色三角形:
如果您的网卡插上不能用,本文介绍三种方法获得网卡的驱动:
使用购买网卡时商家提供的安装方法,包括但不限于:商家提供下载链接和安装方法,网卡自带储存盘内有对应驱动。
使用驱动精灵、驱动大师等第三方一键装机软件,自动为网卡安装合适的驱动。
搜索网卡型号或无线芯片的型号,去对应的芯片官网或第三方软件直接下载对应驱动。
安装完毕后,有些网卡需要重启电脑来适配。安装成功后,点开右下角的 网络适配器 - WLAN
即可搜索到周围的路由器:
Wireshark 捕获数据包
安装好 Wireshark 以后,就可以运行它来捕获数据包了,启动 Wireshark:
该图为 Wireshark 的主界面,界面中显示了当前可使用的接口,例如 本地连接8
、 WLAN 2
等。要想捕获数据包,必须先选择一个接口,表示捕获该接口上的数据包。关于网络结构和协议的基础概念,可以参考博客: 关于 Wi-Fi 网络基本原理了解。
抓取以太网数据包
您可以使用 Wireshark 抓取本机网卡的数据包,并分析抓取的数据包。
注意
本机访问本机的回环数据 localhost 是不经过网卡的,需要指定回环数据也要先转发到网关,才能使用 Wireshark 抓取。
也可以使用 Wireshark 打开其他抓包工具生成的抓包文件,使用 Wireshark 分析该抓包文件。
选择捕获 以太网 4
接口上的数据包,然后单击左上角的 开始捕获
或直接双击接口名,将进行捕获网络数据,当本地计算机浏览网站时, 本地连接
接口的数据将会被 Wireshark 捕获到:
Wireshark 将一直捕获 本地连接
上的数据。如果不需要再捕获,可以单击左上角的 停止捕获分组
按钮,停止捕获。
抓取 Wi-Fi 无线数据包
设置捕获选项
菜单栏 捕获-选项
(快捷键 Ctrl + k
)可进入捕获选项设置界面:
需要选择刚才配置好的无线网卡,点开下拉菜单可查看对应 IP 地址:
注意
连接路由器前后的 IP 地址会变,请通过 捕获-刷新接口列表
(快捷键 F5
)获取最新的接口信息:
选择抓包网卡
不同的电脑配置的网络接口名称可能会不一样,您可以通过以下几个方法确认抓包的无线网卡:
方法 1
连上一个无线网络后, win+R
或开始菜单输入 cmd
打开 cmd 命令提示符窗口:
在命令栏输入 ipconfig
后回车,可以看到当前网络的接口信息,对应 IP 地址可确定无线网卡为 WLAN 2:
方法 2
您也可以直接拔掉网卡,再在 Wireshark 中尝试使用 WLAN 2
捕获,系统提示找不到接口,或 菜单-捕获-刷新接口列表
,也可确定该网卡的接口名。
方法 3
打开 cmd 命令提示符窗口,输入 netsh wlan show interfaces
,即可查看到对应的无线网络接口信息。
确定需要抓取的信道
选择您需要抓取的 Wi-Fi 信道,如果您想抓取被测路由器的交互信息,可以按如下方法确认路由器的信道、带宽等信息:
方法 1
打开 cmd 命令提示符窗口,电脑连接上被测路由器,输入 netsh wlan show interfaces
,即可查看当前连接的信道。
方法 2
去路由器管理员设置界面查看,此处不展开。
方法 3
手机下载 Wi-Fi 嗅探软件,如 WiFi 魔盒、wifiman、WiFi Analyzer、inSSIDer、WirelessMon 等,都可查看周围的 AP 信息和信道分析。
设置网卡 monitor 信道
打开 cmd 命令提示符窗口,按照前文 判断网卡支持的模式 章节介绍的方法打开网卡的监听模式。
注意
打开该模式后已连接的网络会断连,这属于正常现象,因为普通网卡模式是 managed,后续抓包完成后可改回来。
打开监听模式, 输入 WlanHelper.exe + GUID + mode monitor
如:
wlanhelper.exe 00971d40-8f3c-426d-bab3-5a38ce789c45 mode monitor
配置需要监听的信道,输入 WlanHelper.exe + GUID + channel [value]
,如信道 60:
wlanhelper.exe 00971d40-8f3c-426d-bab3-5a38ce789c45 channel 60
配置 Wireshark 捕获选项
在 input
栏位选择对应网卡接口,不勾选混杂模式,勾选监控模式。
在 输出
栏位选择需要保存的路径和存储的格式。
点击 开始
或双击接口名即可抓取空中的无线网络数据包了。
Wireshark 过滤器的使用
Wireshark 设置了两个过滤器:捕获过滤器(capture filter)、显示过滤器(display filter)。
捕获过滤器:
用于在 开始捕获前 设置过滤条件,设置过滤条件后,抓包工具将仅捕获与条件匹配的数据包;使用捕获过滤器可以减少抓取的网络数据包,减轻抓包软件和储存空间的负担,最终得到的抓包文件也较小,是提升效率必备技能;
显示过滤器:
用于在 捕获数据后 设置过滤条件,设置过滤条件后,显示页面上将仅显示与条件匹配的数据包,有助于工程师分析报文。
捕获过滤器的基本使用
打开 Wireshark 软件后,如图所示的输入框就是输入捕获过滤条件的地方:
点击上图中绿色的小标签(或者通过菜单: 捕获 - 捕获过滤器
)即可打开常用的捕获表达式:
注:捕获表达式中的冒号 :
,通常起解释说明的意思,无实意。
捕获过滤表达式的语法
Wireshark 捕获过滤器表达式遵循 libpcap 语法。过滤器表达式由一个或多个原语组成。原语通常由一个 id (名称或数字)和一个或多个修饰符组成。
过滤表达式 = 原语1 + 原语2 + …
原语 = id + 修饰符 1 + 修饰符 2 + …
原语之间可以通过逻辑连接符和括号()进行组合,逻辑连接符包括:
与:可用符号
&&
或者文字and
来表示或:可用符号
‖
或者文字or
来表示非:可用符号
!
或者文字not
来表示
如该示例表示仅捕获通过网关 sup
并且属于 FTP 端口或者数据的数据包:
gateway snup and (port ftp or ftp-data)
如该示例表示不捕获 arp 类型的数据包:
not arp
如该示例表示仅捕获 tcp 或 udp 类型的数据包:
tcp || udp
值得一提的是,该过滤器自带语法检测,底框绿色即代表语法正确。
备注
更多捕获过滤器的使用方法与示例可参考 Wireshark 官方说明 capture filters wiki 以及 capture filters Gitlab。
显示过滤器的基本使用
进入到抓包页面后,点击下图中的标签,或者通过菜单 分析- display filters
即可打开常用的显示过滤表达式:
显示过滤表达式的语法
与捕获过滤表达式类似,显示过滤表达式也可看作原语的组合。不同的是,显示过滤表达式的原语由“选项+选项关系+选项值”组成。如 tcp.port == 80
中, tcp.port
是选项, ==
是选项关系, 80
是选项值,整个表达式表示的是:仅显示 tcp 端口号(包括发送、接收)为 80 的数据包。
再次提醒,显示过滤表达式和捕获过滤表达式不能混淆,捕获过滤表达式的形式为:tcp port80。表达式中三个部分分别介绍如下:
选项:选项可以是协议(如 tcp、udp、http 等)、帧(frame)等对象,这个在使用中参考已经有的示例或者直接输入协议名字,看是否有提示即可
选项关系:用于定义选项与选项值的关系。常见的选项关系如下:
表格来源: Wireshark 官网
选项值:选项值可以是数字,如十进制数字
1500
、十六进制数字0x5dc
、二进制数字0b10111011100
、布尔值(如 1 代表true
,0 代表false
)、MAC 地址类的数字(如eth.dst == ff:ff:ff:ff:ff:ff
)、ip 地址(如ip.addr == 192.168.0.1
)、字符串(如http.request.uri == "https://ww.wireshark.org/"
)、时间(如ntp.xmt ge "2020-07-0412:34:56"
)等。
多个表达式也可以通过逻辑连接符连接起来,组合出高级的显示过滤表达式。
表格来源: Wireshark 官网
其中,[…] 表示 子串
选择符,如 eth.src[0:3] == 00:00:83
表示从偏移地址 0 开始的 3 个字节的数据为 00:00:83
的数据包。其中 in
表示成员选择符,常用于组成选项值的集合。如 tcp.port in {80,441,8081}
指的是过滤 tcp 端口为 80、441、8081 的数据包。其等同于 tcp.port == 80 ‖ tcp.port == 441 ‖ tcp.port == 8081
。
备注
更多捕获过滤器的使用方法与示例可参考 Wireshark 官方说明 capture filters wiki 以及 capture filters Gitlab。
分析封包
在掌握 Wireshark 抓包方法后,即可对抓取到的包进行初步分析,下面是一些优秀的抓包分析示例:
本文最后再分享一些分析封包中的 Wireshark 使用小技巧:
小技巧 1
除了手动在输入框内输入显示过滤表达式外,还可以选中抓包数据的某个选项,右键选择 作为过滤器应用(Apply as Filter)
,根据需求选择 选中
或 非选中
或下面更高级的 and or
逻辑操作,如下图过滤了 subtype
为 0x001b 的 RTS 封包,该操作等同于在显示过滤器栏输入 wlan.fc.type_subtype == 0x001b
。
小技巧 2
使用着色器协助进行各类封包的分析,选中抓包数据的某个选项,右键选择 用过滤器应用着色
即可对满足特定条件的封包着色,如下图把 Receiver address
为 Espressif_4d:d4:ac (68:b6:b3:4d:d4:ac)
的封包着色为颜色 3:
可在 视图 - 对话着色
中管理或重置现有规则:
小技巧 3
您可以将感兴趣的任意一项字段拖动到列表栏进行显示,比如下图把 current channel
栏位拖动到了 Packet List Pane(数据包列表)
,这样就可以方便地对每一包的 channel 信息进行查看:
右键列表栏可管理每一个 column 的设置规则:
也可选择 Edit column
进行设置:
小技巧 4
有时我们需要对复杂问题进行 debug,会在不同设备抓取多份 log,设置绝对时间戳可帮助跨设备定位复杂问题,按小技巧 3 的方法打开 column 设置栏
,选择 Absolute date
,可显示每一包的绝对时间:
设置好后: