Windows 上的 Wireshark 抓包教程

[English]

本文介绍 Windows 10 系统下使用 Wireshark 抓 Wi-Fi 无线空包的详细教程。

安装 Wireshark

关于 Wireshark

Wireshark(前身 Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。它可以运行在 Windows 和 Linux 操作系统上。可以使用该工具捕获并分析各类协议数据包,本文将讲解该工具的安装及基本使用方法。

下载及安装

Kali Linux 系统自带 Wireshark 工具,而 Windows 系统中默认没有安装该工具。 进入 Wireshark 官网。单击 Get started 进入下载页面。

../../_images/01.png

在 Stable Release 部分可以看到目前 Wireshark 的最新版本是 4.2.4,并提供了 Windows(32 位和64 位)、Mac OS 和源码包的下载地址。您可以根据自己的操作系统下载相应的软件包。

../../_images/02.png

这里下载 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 包。

../../_images/03.png

安装好以后,在 Windows 的“开始”菜单中会出现 Wireshark 图标。

../../_images/04.png

抓包网卡

首要考虑的是抓包网卡需要支持监听模式(Monitor mode),其次需要考虑的是网卡支持的无线协议和传输速率。

监听模式(Monitor Mode)

监听模式,或 RFMON(Radio Frequency Monitor),是指无线网卡可以接收所有经过它的数据流的工作方式,对应于 IEEE 802.11 网卡的其他模式,诸如 Master(路由器)、Managed(普通模式的网卡)、Ad-hoc 等。监听模式不区分所接收数据包的目标 MAC 地址,这点和混杂模式类似。然而和混杂模式不同的是,监听模式不需要和无线接入点(AP)或 Ad-hoc 网络建立连接。监听模式是无线网卡特有的特殊模式,而混杂模式应用于有线网卡和无线网卡。监听模式通常用于网络发现、流量监听和分组分析(来源: Wikipedia)。

判断网卡支持的模式

可以通过 Npcap 工具查看当前网卡的模式、支持的模式并打开监听模式。

  1. win+R 或开始菜单输入 cmd 打开 cmd 命令提示符窗口:

    ../../_images/05.png
  2. 查看网卡的 GUID,输入 netsh wlan show interfaces

    ../../_images/06.png
  3. 查看当前模式,复制 GUID,然后再输入 WIanHelper.exe + GUID + modes,如:

    wlanhelper.exe 00971d40-8f3c-426d-bab3-5a38ce789c45 modes
    

    即可查看网卡支持的模式,许多笔记本自带的网卡只会有 managed 模式,此时就需要另外购买支持监听模式的无线网卡。

    ../../_images/07.png
  4. 为网卡打开监听模式,输入 WlanHelper.exe + GUID + mode monitor,如:

    wlanhelper.exe 00971d40-8f3c-426d-bab3-5a38ce789c45 mode monitor
    

    成功会提示 Success

    ../../_images/08.png

    注意

    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

您可以在购物网站搜索 无线抓包抓包网卡 等关键字,一般带有抓包功能的网卡都支持监听模式。

../../_images/09.png

如果商品没有详细介绍参数,但有提供所使用的无线芯片型号,可以直接搜索型号查看该芯片的详细参数:

../../_images/10.png

本文以雷凌芯片 RT3572 的思科抓包网卡为例,该芯片支持 802.11n 最高速率 300 Mbps,可以抓取 Wi-Fi 4 协议的空包。

配置网卡驱动

网卡到手后,需要安装对应的驱动程序,现在一些网卡是插上即用免安装,插上网卡后打开 控制面板 - 设备管理器,在 网络适配器 栏中找到新插入的网卡,双击可查看详细信息,如驱动不适配,会有黄色三角形:

../../_images/11.png

如果您的网卡插上不能用,本文介绍三种方法获得网卡的驱动:

  • 使用购买网卡时商家提供的安装方法,包括但不限于:商家提供下载链接和安装方法,网卡自带储存盘内有对应驱动。

  • 使用驱动精灵、驱动大师等第三方一键装机软件,自动为网卡安装合适的驱动。

  • 搜索网卡型号或无线芯片的型号,去对应的芯片官网或第三方软件直接下载对应驱动。

安装完毕后,有些网卡需要重启电脑来适配。安装成功后,点开右下角的 网络适配器 - WLAN 即可搜索到周围的路由器:

../../_images/12.png

Wireshark 捕获数据包

安装好 Wireshark 以后,就可以运行它来捕获数据包了,启动 Wireshark:

../../_images/13.png

该图为 Wireshark 的主界面,界面中显示了当前可使用的接口,例如 本地连接8WLAN 2 等。要想捕获数据包,必须先选择一个接口,表示捕获该接口上的数据包。关于网络结构和协议的基础概念,可以参考博客: 关于 Wi-Fi 网络基本原理了解

抓取以太网数据包

您可以使用 Wireshark 抓取本机网卡的数据包,并分析抓取的数据包。

注意

本机访问本机的回环数据 localhost 是不经过网卡的,需要指定回环数据也要先转发到网关,才能使用 Wireshark 抓取。

也可以使用 Wireshark 打开其他抓包工具生成的抓包文件,使用 Wireshark 分析该抓包文件。

选择捕获 以太网 4 接口上的数据包,然后单击左上角的 开始捕获 或直接双击接口名,将进行捕获网络数据,当本地计算机浏览网站时, 本地连接 接口的数据将会被 Wireshark 捕获到:

../../_images/14.png

Wireshark 将一直捕获 本地连接 上的数据。如果不需要再捕获,可以单击左上角的 停止捕获分组 按钮,停止捕获。

../../_images/15.png

抓取 Wi-Fi 无线数据包

设置捕获选项

菜单栏 捕获-选项 (快捷键 Ctrl + k )可进入捕获选项设置界面:

../../_images/16.png

需要选择刚才配置好的无线网卡,点开下拉菜单可查看对应 IP 地址:

../../_images/17.png

注意

连接路由器前后的 IP 地址会变,请通过 捕获-刷新接口列表 (快捷键 F5)获取最新的接口信息:

../../_images/18.png

选择抓包网卡

不同的电脑配置的网络接口名称可能会不一样,您可以通过以下几个方法确认抓包的无线网卡:

方法 1

连上一个无线网络后, win+R 或开始菜单输入 cmd 打开 cmd 命令提示符窗口:

../../_images/05.png

在命令栏输入 ipconfig 后回车,可以看到当前网络的接口信息,对应 IP 地址可确定无线网卡为 WLAN 2:

../../_images/19.png

方法 2

您也可以直接拔掉网卡,再在 Wireshark 中尝试使用 WLAN 2 捕获,系统提示找不到接口,或 菜单-捕获-刷新接口列表 ,也可确定该网卡的接口名。

../../_images/20.png

方法 3

打开 cmd 命令提示符窗口,输入 netsh wlan show interfaces ,即可查看到对应的无线网络接口信息。

确定需要抓取的信道

选择您需要抓取的 Wi-Fi 信道,如果您想抓取被测路由器的交互信息,可以按如下方法确认路由器的信道、带宽等信息:

方法 1

打开 cmd 命令提示符窗口,电脑连接上被测路由器,输入 netsh wlan show interfaces ,即可查看当前连接的信道。

../../_images/21.png

方法 2

去路由器管理员设置界面查看,此处不展开。

方法 3

手机下载 Wi-Fi 嗅探软件,如 WiFi 魔盒、wifiman、WiFi Analyzer、inSSIDer、WirelessMon 等,都可查看周围的 AP 信息和信道分析。

../../_images/22.jpg

设置网卡 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 栏位选择对应网卡接口,不勾选混杂模式,勾选监控模式。

../../_images/23.png

输出 栏位选择需要保存的路径和存储的格式。

../../_images/24.png

点击 开始 或双击接口名即可抓取空中的无线网络数据包了。

Wireshark 过滤器的使用

Wireshark 设置了两个过滤器:捕获过滤器(capture filter)、显示过滤器(display filter)。

  • 捕获过滤器:

    用于在 开始捕获前 设置过滤条件,设置过滤条件后,抓包工具将仅捕获与条件匹配的数据包;使用捕获过滤器可以减少抓取的网络数据包,减轻抓包软件和储存空间的负担,最终得到的抓包文件也较小,是提升效率必备技能;

  • 显示过滤器:

    用于在 捕获数据后 设置过滤条件,设置过滤条件后,显示页面上将仅显示与条件匹配的数据包,有助于工程师分析报文。

../../_images/25.png

图片来源

捕获过滤器的基本使用

打开 Wireshark 软件后,如图所示的输入框就是输入捕获过滤条件的地方:

../../_images/26.png

点击上图中绿色的小标签(或者通过菜单: 捕获 - 捕获过滤器)即可打开常用的捕获表达式:

注:捕获表达式中的冒号 ,通常起解释说明的意思,无实意。

../../_images/27.png
../../_images/28.png

捕获过滤表达式的语法

Wireshark 捕获过滤器表达式遵循 libpcap 语法。过滤器表达式由一个或多个原语组成。原语通常由一个 id (名称或数字)和一个或多个修饰符组成。

  1. 过滤表达式 = 原语1 + 原语2 + …

  2. 原语 = id + 修饰符 1 + 修饰符 2 + …

  3. 原语之间可以通过逻辑连接符和括号()进行组合,逻辑连接符包括:

    • 与:可用符号 && 或者文字 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 即可打开常用的显示过滤表达式:

../../_images/29.png
../../_images/30.png
../../_images/31.png

显示过滤表达式的语法

与捕获过滤表达式类似,显示过滤表达式也可看作原语的组合。不同的是,显示过滤表达式的原语由“选项+选项关系+选项值”组成。如 tcp.port == 80 中, tcp.port 是选项, == 是选项关系, 80 是选项值,整个表达式表示的是:仅显示 tcp 端口号(包括发送、接收)为 80 的数据包。

再次提醒,显示过滤表达式和捕获过滤表达式不能混淆,捕获过滤表达式的形式为:tcp port80。表达式中三个部分分别介绍如下:

  • 选项:选项可以是协议(如 tcp、udp、http 等)、帧(frame)等对象,这个在使用中参考已经有的示例或者直接输入协议名字,看是否有提示即可

  • 选项关系:用于定义选项与选项值的关系。常见的选项关系如下:

../../_images/32.png

表格来源: 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")等。

多个表达式也可以通过逻辑连接符连接起来,组合出高级的显示过滤表达式。

../../_images/33.png

表格来源: 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

../../_images/34.png

小技巧 2

使用着色器协助进行各类封包的分析,选中抓包数据的某个选项,右键选择 用过滤器应用着色 即可对满足特定条件的封包着色,如下图把 Receiver addressEspressif_4d:d4:ac (68:b6:b3:4d:d4:ac) 的封包着色为颜色 3:

../../_images/35.png
../../_images/36.png

可在 视图 - 对话着色 中管理或重置现有规则:

../../_images/37.png

小技巧 3

您可以将感兴趣的任意一项字段拖动到列表栏进行显示,比如下图把 current channel 栏位拖动到了 Packet List Pane(数据包列表) ,这样就可以方便地对每一包的 channel 信息进行查看:

../../_images/38.png

右键列表栏可管理每一个 column 的设置规则:

../../_images/39.png

也可选择 Edit column 进行设置:

../../_images/40.png

小技巧 4

有时我们需要对复杂问题进行 debug,会在不同设备抓取多份 log,设置绝对时间戳可帮助跨设备定位复杂问题,按小技巧 3 的方法打开 column 设置栏,选择 Absolute date,可显示每一包的绝对时间:

../../_images/41.png

设置好后:

../../_images/42.png

中文参考文档