☰
Wireshark手机抓包实战:USB共享、无线监听与端口镜像全攻略
2026/10/14 9:03:16 网站建设 项目流程

简介:面向需要掌握移动端网络流量分析的开发、测试与运维人员,这份名为《Wireshark手机抓包详解》的docx文档,系统讲解了利用Wireshark对手机进行抓包的完整方法。资源从Wireshark安装配置入手,逐步覆盖手机开启热点、电脑通过Wi-Fi接入该热点、在Wireshark中正确选择与热点对应的网卡、启动抓包,以及按需过滤HTTP、HTTPS、FTP、SMTP等常见协议。文档特别说明了如何判断哪块网卡承载手机流量,例如通过观察连接手机前后Wireshark本地连接的波动来确认,避免误抓电脑自身流量;同时结合抓包结果给出分析思路,帮助读者理解手机应用与服务器的交互机制,排查网络故障,并为网络应用开发提供参考。资源包内为1个docx文档,体积约257KB,图文步骤结构清晰,且针对关键环节给出了判断依据,适合零基础入门及希望快速上手手机抓包的实践者。该资源已有5383人学习,具有较高参考价值。

1. 一开始请想清楚:Wireshark抓手机流量到底能解决什么

做移动端开发、接口联调或者后台排查时,最常遇到的场景是:App 页面报错,后端说没收到请求,前端和后端各执一词。这时候如果有一份手机侧的真实流量记录,谁在说谎一目了然。Wireshark 进行手机抓包,核心就是让手机发出的每个数据包都流经电脑的某个网卡接口,再由 Wireshark 捕获并解码。难点从来不在 Wireshark 本身,而在“怎么把手机的流量引到电脑上”这一步。

很多新手上来就打开手机 Wi-Fi,然后盯着电脑看,什么也看不到。因为手机流量默认只走手机自己的网卡和无线模块,电脑端的抓包工具根本碰不到。本文给三条实际可行的接入通道:USB 网络共享、无线网卡监听模式、路由器端口镜像。这三条通道覆盖了 Android 联调、无数据线环境、多设备整体排查三个典型场景,每条都给出可复制的命令和参数。

这篇笔记写给三类人:第一次动手做手机抓包的移动端新人,想知道 Android 各自有哪条路;会写脚本但缺链路排查视角的测试开发;在家里反复调智能设备、App 推送问题的爱好者。新手可以从第 2、3 章照着做,熟手直接跳第 5、6 章看边界条件和进阶处理。全程不需要在手机上安装额外软件,也不用改系统。

2. 抓包前先选路:USB网络共享、无线监听、路由器镜像三条通道怎么取舍

手机抓包的所有准备工作,本质上就是“在手机和电脑之间建立一条数据通路”。手机自身产生的流量是不知道怎么跑到电脑网卡上的,必须先把这条通路打通,后面 Wireshark 的操作才有效。常见的做法有三类:USB 网络共享、无线监听模式、路由器端口镜像。先看一张选型表,理解差别之后再动手:

通道手机端要装什么电脑端依赖能看到的范围最合适的场景
USB 网络共享不用手机支持 RNDIS 虚拟网卡手机经 USB 口发出的 IP 流量单台 Android 联调,最可靠
无线监听模式不用无线网卡芯片支持监听模式空中同一频段的所有无线帧不接线、多设备同网排查
路由器端口镜像不用路由器支持端口镜像/监控口局域网内经交换机复制的流量网关设备整体排障

2.1 三条通道在原理上的差别

USB 网络共享相当于在手机和电脑之间插了一根虚拟网线。Android 系统开启 USB 共享后,会在电脑上枚举出一个新的网卡接口,手机发给互联网的数据会从 USB 线这个口经过。对 Wireshark 来说,它只需要监听这个新出现的接口,就能完整看到手机侧的 TCP/IP 会话。它不依赖 Wi-Fi 环境,也不依赖额外的路由器配置,是现场排查里成功率最高的一条路。

无线监听模式是把无线网卡当成一个“频谱接收器”,不再只接收发给自己的帧,而是把无线电波里能听到的所有帧都收下来。手机连的还是同一个 Wi-Fi,数据帧在空气中经过时就会被监听网卡复制一份。值得注意,这些帧里有 802.11 管理帧,也有加密后的数据帧,要还原出 HTTP/TCP 层,还得懂得第 4 章里的 WPA2 解密操作。

路由器端口镜像则是把交换机背板上流经某个端口的流量复制一份,同时发送到另一个镜像口。把电脑插到镜像口上,Wireshark 就能看到整个局域网里被镜像端口的通信内容。这条路的门槛在路由器端,很多家用路由器没有镜像开关,只有带网管功能的交换机或软路由才支持。它适合查看多个设备同时产生的流量,而不是单台手机。

2.2 工具清单与前置检查

在选路之前,先花两分钟确认手头的东西齐不齐。Wireshark 建议用较新版本,老版本对 802.11 解密和 TLS 字段解析都不够完整;Windows、Linux、macOS 都行,但下面示例会以 Windows 和 Ubuntu 为主。USB 网络共享只需要一条能传数据的 USB 线,很多线只能充电不能传数据,这一步最容易被忽略。

无线监听模式需要额外准备一个外置 USB 无线网卡,而且芯片必须支持监听模式。普通笔记本内置网卡大多不支持,或者驱动受限,建议单独买一只。路由器镜像通道需要在网关设备里找到“端口镜像”“Port Mirror”或“Monitor Port”这类选项,找不到就说明当前设备不支持。

最后确认手机系统。Android 原生支持 USB 网络共享,iOS 没有这条路径,所以要做 iOS 抓包时,通常只能走无线监听这一条变通路线。区分方式也很简单:看网络设置里有没有“热点与网络共享”这个菜单项。没有这个菜单的手机,就老老实实走第 4 章的无线方案。

3. 用USB网络共享在Android上抓包:从接线到过滤出App流量

USB 网络共享是三条通道里最可靠、最不容易出幺蛾子的一条,只要能插线,就优先用它。它不需要路由器配合,不依赖 Wi-Fi 信号,也避开了无线监听模式里网卡不支持的问题。把手机插上电脑后,手机侧的流量会在 USB 线上走,Wireshark 监听新增的虚拟网卡,就能看到完整的 IP 数据包。

3.1 手机端开启USB共享并确认连接状态

先用一条能传数据的 USB 线把手机和电脑连起来。手机下拉通知栏,把 USB 模式从“仅充电”改成“传输文件”,部分机型叫“MTP”。这个步骤很关键,仅充电模式下部分手机会直接不枚举虚拟网卡。然后进入 设置 → 网络与互联网 → 热点与网络共享,找到“USB 网络共享”开关并打开。

开关打开后,电脑右下角网络图标通常会从“无 Internet”变成已连接状态,或者弹出气泡提示“已识别新网络”。如果这个提示没出现,把手机端的 USB 共享关掉再重开一次,或者拔掉 USB 线重新插一次。注意,打开共享的时机放在手机上已经连接电脑之后,比先开共享再插线要可靠。

如果电脑毫无反应,优先检查 USB 线的数据能力。可以在电脑上把手机当成 U 盘试一下,能读到手机文件目录说明数据线没问题;读不到,换线。这一步解决之后,整个抓包流程就完成了三分之一。

3.2 在Wireshark中锁定对应的网卡接口

手机开启 USB 共享后,电脑上会多出一个网卡。在 Windows 上它通常显示为“以太网”或“远程 NDIS 兼容设备”,在 Linux 上名字一般是 usb0 或 enp0s20f0u2 这类带 usb 字样的接口。先打开命令行,确认这个新接口叫什么名字:

# Windows 下查看网络适配器信息,找“远程NDIS”或“以太网” ipconfig /all # Linux 下列出所有网络接口,带 usb 字样的是共享接口 ip -br link show

ipconfig /all会把所有网卡的 IP 地址、MAC 地址、描述信息列出来。看到描述里带 RNDIS、USB 或 Remote NDIS 的条目,基本就是它。ip -br link show是 Linux 下压缩输出的接口列表,-br表示简要格式,每一行对应一个接口,名字后面是状态。

接着打开 Wireshark,点击工具栏上的“捕获选项”,或者在首页接口列表里直接找到对应的网卡。电脑上有多个网卡时容易看花眼,可以对比之前命令行里确认的接口名来选。选中接口后点击“开始”,观察主界面的包列表是不是已经开始滚动。如果滚动了,说明手机流量已经进来了。

3.3 用过滤条件把手机流量单独拎出来

抓包开始后你会看到大量数据,其中混着 ARP、DHCP、组播等局域网协议,真正关心的手机业务流量反而被淹没。手机做 USB 共享时,手机端的 IP 地址通常是一个局域网地址,比如常见的 192.168.42.x 网段。先把手机的 IP 确定下来,然后设置过滤。

ip.addr == 192.168.42.129

ip.addr是显示过滤器的写法,它同时匹配源地址和目标地址,只要数据包的源 IP 或目的 IP 是这个手机地址,就留在列表里。这个写法适合抓完包之后慢慢分析。如果抓包刚开始就确定只看手机流量,可以在“捕获选项”里的“捕获过滤器”一栏填host 192.168.42.129,这样从源头就只记录这个 IP 的流量,省磁盘也省内存。

手机 IP 怎么确定?可以看手机的“设置 → 关于手机 → 状态信息 → IP 地址”,也可以看电脑上 USB 共享网卡拿到的 IP。以 Android 常见的 192.168.42.x 网段为例,电脑端通常是 192.168.42.129,手机端往往是 192.168.42.x 段里的另一个地址。找到后替换到过滤器里即可。

有几个容易忽略的细节:手机如果同时连着 Wi-Fi,流量不一定从 USB 口走,最好先把手机 Wi-Fi 关掉;如果手机用的是纯流量上网,抓包不受影响;抓包期间尽量不要频繁切换 App,否则会混入大量无关 DNS 和 TLS 连接。抓到想要的场景之后,点红色停止按钮,文件会自动保留在 Wireshark 里。

4. 不依赖数据线抓手机包:无线网卡监听模式与WPA2解密

在某些场景下,USB 线不方便接、手机不在手边,或者要同时看多台设备的流量,这时候无线监听模式就派上用场。它是把无线网卡设置成监听类型,让网卡不再只收发给自己的数据,而是把空气中同一频段的所有无线帧都收下来。听起来很强大,但有几个前提条件必须先讲清楚。

4.1 监听模式为什么能看到手机发出的数据

普通模式下,无线网卡收到一帧数据后会先看目标 MAC 地址,不是发给自己的就丢弃。监听模式下,网卡不做这个地址判断,所有接收到的帧都交给上层处理。Wi-Fi 是无线广播介质,手机发出的数据帧在空气中传播,只要监听网卡在同一信道上,就能把这份数据复制一份。

这里有个隐蔽的问题:手机连接 Wi-Fi 时,数据帧是加密的。以最常见的 WPA2 网络为例,数据段用 PTK 加密,没有密钥只能看到 802.11 头部、MAC 地址和某些管理帧,看不到 IP 层和 HTTP 层。所以监听模式要搭配解密步骤,而解密的原材料就是 Wi-Fi 密码。如果对方网络是 WPA2 且你知道密码,就能还原;如果不知道密码,就只能看到加密后的帧。

因此,监听模式比较适合自己家的 Wi-Fi、公司允许调试的访客网络、或者用手机热点临时搭建的测试环境。用它去抓别人的加密网络,技术上得不到明文,也不该那么做。

4.2 把无线网卡切换成监听模式的命令

Linux 系统下切换监听模式最常用的是 Aircrack 套件里的 airmon-ng。第一步先停掉网络管理服务,否则系统会把网卡拉回普通模式;第二步确认无线网卡名称;第三步执行切换。

# 停掉占用无线网卡的网络管理服务 sudo systemctl stop NetworkManager # 列出当前无线网卡名称 iw dev # 把无线网卡 wlan0 切换为监听模式 sudo airmon-ng start wlan0

systemctl stop NetworkManager是停止系统自动管理网络的服务,不执行这一步,很多网卡刚切成功又被拉回去,表现就是一会儿监听一会儿掉线。iw dev会输出类似Interface wlan0的信息,记住这个名字。airmon-ng start wlan0执行完,接口名通常会变成wlan0mon,后面抓包时要用这个名字。

如果你的 Linux 发行版没有装 airmon-ng,可以用内核自带命令替代。先把网卡 down 掉,再用iw添加一个 monitor 类型的虚拟接口,然后 up 起来。这一步的原理和 airmon-ng 一样,只是命令更底层:

sudo ip link set wlan0 down sudo iw phy phy0 interface add mon0 type monitor sudo ip link set mon0 up

iw phy phy0里的phy0是无线物理设备编号,一般只有一个无线网卡时它就是 phy0。interface add mon0 type monitor的意思是创建一个叫 mon0 的监听接口。执行完后用iw dev确认接口存在,再打开 Wireshark 监听 mon0 即可。两种方式选一种,不用重复执行。

4.3 在Wireshark里设置WPA2解密并还原明文请求

监听接口准备好之后,直接用 Wireshark 打开接口抓包。注意这个时候抓到的文件里,每个无线帧都是加密的数据,包列表里能看到手机 MAC 地址和 AP 的 BSSID,但看不到任何 IP 层的协议。要先配置解密:

# 用 Wireshark 直接监听无线网卡的监听接口 sudo wireshark -i wlan0mon

-i参数指定抓包接口,wlan0mon替换成你自己的监听接口名。sudo 是为了让 Wireshark 能打开接口,否则普通权限下接口打不开。启动后进入 编辑 → 偏好设置 → Protocols → IEEE 802.11,勾选“启用解密”,然后在解密密钥里添加一条记录,类型选wpa-pwd,值填密码:SSID的格式。

这里的wpa-pwd是 Wireshark 解 WPA/WPA2 的密钥类型,冒号前是 Wi-Fi 密码,冒号后是 Wi-Fi 名称,也就是 SSID。比如网络名是 MyHome,密码是 abc12345,就填abc12345:MyHome。保存后回到抓包界面,已经抓到的加密包也会重新解出来,IP 层和 TCP 层的信息会自动出现。

解密之后,HTTP 明文可以直接看,但 HTTPS 依然看不到。HTTPS 的 TLS 层会暴露目标域名,也就是后面第 6 章要讲的 SNI 字段,而 HTTP 具体路径和请求参数仍然被加密保护。这个边界条件要记牢:无线监听加 WPA2 解密不等于全部流量透明,它解决的是 Wi-Fi 这一层的加密,不是应用层的 TLS 加密。

5. Wireshark手机抓包的5个常见坑与排查

手机抓包的坑比普通电脑抓包多,问题主要集中在接口选错、加密看不到、网络冲突这三个方向上。下面这 5 条是我在实际使用中反复遇到过的,按“现象 → 原因 → 解决”写清楚,往下排查能省不少时间。

5.1 点击开始以后一个包都抓不到

现象是:接口选好了,点击开始,包列表一行数据都不出现。最常见的原因有两个,一个是选错了网卡,另一个是监听模式没生效。USB 共享场景下,很多人盯着电脑原有的 Wi-Fi 网卡或以太网卡抓,那个口上根本没有数据。

解决方法是先回到命令行确认接口:Windows 用ipconfig /all找到带 RNDIS 的适配器,Linux 用ip -br link show找带 usb 的接口。无线监听场景下,用iw dev检查接口类型是不是type monitor,如果不是,按第 4.2 节重新切换一次。Wireshark 的首页接口列表会显示每个接口的实时流量图形,哪个接口有波动就选哪个。

5.2 抓了一堆包,但过滤 http 后什么也没有

现象是:包列表里有大量 TCP 包,但输入http过滤器之后,所有包都消失了。原因是现在绝大多数 App 使用 HTTPS,HTTP 明文没有出现在流量里,Wireshark 只能看到 TLS 加密后的内容。这不是抓包失败,而是协议本身就是加密的。

解决思路不是去破解 TLS,而是从 TLS 握手里提取目标域名。用tls.handshake.extensions_server_name过滤,能看到每个 TLS 连接里客户端请求的域名;用dns.qry.name过滤,能看到手机都解析了哪些域名。这样依然可以定位到 App 到底在跟哪个后端通信,只是看不到 URL 路径和请求体。如果确实要看明文,就得让被测环境提供一个 HTTP 明文接口,或者用 TLS 解密的专用方案,那个方案涉及证书安装,不属于 Wireshark 本身能独立解决的问题。

5.3 手机开启USB共享之后反而断网

现象是:USB 共享一打开,手机上的其它 App 全部刷不出内容,关掉共享就好。多数原因是手机同时连着 Wi-Fi,开启 USB 共享后,手机既要走 Wi-Fi 上网又要通过 USB 把流量共享出去,形成了多条路由冲突。部分机型在 Wi-Fi 和 USB 共享并存时,网络栈会陷入混乱。

解决方法很简单:USB 共享期间,把手机的 Wi-Fi 关掉,让手机走移动网络。如果你需要抓的是 Wi-Fi 环境下的流量,那就不要开 USB 共享,改用第 4 章的无线监听方案。另一个隐蔽原因是 USB 线只支持充电不支持传数据,手机端共享开关虽然能打开,但电脑端网卡始终不出现,换一根明确支持数据传输的线就能解决。

5.4 抓包文件涨得太快,Wireshark直接卡死

现象是:抓了十几分钟,文件从几 MB 涨到几百 MB,界面拖不动,关文件都要等半天。原因是没有设置抓包存储限制,Wireshark 把抓到内存的数据全量写进文件。手机流量不像电脑抓包那样可控,后台推送、系统更新、Wi-Fi 扫描都会产生大量包。

在“捕获选项”里找到“多文件”区域,打开“多文件”开关,设置“下一个文件大小”为 10 MB 或 50 MB,同时勾选“使用环形缓冲器”,文件数设 10 到 20 个。这样 Wireshark 写满一个文件就换下一个,超过文件数后自动覆盖最旧的文件,长时间抓包也不会拖垮磁盘。注意环形缓冲在停止抓包后只保留了最后几个文件,如果需要完整时长,可以把“下一个文件大小”调大,或者不用环形缓冲,而是单独定时手动停止。

5.5 手机流量有了,但看到的全是ARP和广播包

现象是:包列表里大量蓝紫色的 ARP 请求、NetBIOS 广播,真正关心业务流量占比很小。这些广播包是局域网环境的正常协议噪音,在 Wi-Fi 和有线混跑的网络里尤其多。它们会干扰视线,也会占文件空间。

解决方法是给过滤条件加白名单。抓取阶段在“捕获过滤器”里填not arp and not icmp,把交互式网络探测流量直接排除;分析阶段用ip.addr == 手机IP只看目标设备的业务包。不要把这两个过滤器混在一起用,捕获过滤器是 BPF 语法,显示过滤器是 Wireshark 语法,写法不一样,直接复制ip.addr ==到捕获过滤器里会报错。

6. 抓完包之后把流量看懂:SNI过滤、导出对象与命令行剪包

抓包文件已经躺在界面里了,接下来才是真正体现差异的部分:怎么从一堆看似杂乱的流量里,快速找出这个 App 到底访问了哪些域名、下载了哪些资源、请求了哪些路径。这里给三个落后但有效的技巧。

6.1 用TLS的SNI字段快速定位App连了哪些域名

即使是 HTTPS 加密流量,TLS 握手阶段客户端也会明文发送一个叫做 SNI 的字段,用来告诉服务端它想访问哪个域名。这个字段没加密,Wireshark 可以直接过滤出来。

tls.handshake.extensions_server_name

把这条显示过滤器填进去,包列表只剩下 TLS 握手包,展开某个包,在 “Server Name Indication extension” 里就能看到域名。如果抓包文件里 App 的 HTTPS 流量较多,另一个更快的方式是过滤 DNS 查询:

dns.qry.name

DNS 查询通常发生在 HTTPS 连接之前,能看到手机访问过哪些域名,包括被系统拦截的、连接失败的。把这两个结果合并,就能拼出一个大致的技术服务调用关系图。

6.2 用“导出对象”把App加载的图片和脚本恢复出来

Wireshark 有一个容易被忽略的功能:文件 → 导出对象 → HTTP。它会扫描抓包文件里的 HTTP 响应,把所有能还原的文件列出来,包括图片、CSS、JS、接口返回的 JSON。选中某个对象,点击保存,文件就被恢复成原始资源。

这个功能只对明文 HTTP 生效,HTTPS 流量如果没有解密,Wireshark 看不到 HTTP 层面的响应体,导出列表就是空的。所以在调试静态资源时,如果被测环境允许,优先切换到 HTTP 明文测试地址,或者接口本来就用 HTTP,这个功能会非常顺手。对于 HTTPS 接口,可以通过 DNS 和 TLS SNI 判断调用关系,但拿不到完整响应体。

6.3 用tshark把大抓包文件剪成请求清单

抓包文件动辄几百 MB,在图形界面里翻页很慢。Wireshark 自带命令行工具 tshark,可以在不打开界面的情况下直接读取文件并输出字段。下面的命令会把所有 HTTP 请求的主机和路径打出来:

# 从 pcapng 文件里提取所有 HTTP 请求,只输出主机和 URI tshark -r phone.pcapng -Y http.request -T fields -e http.host -e http.request.uri | head -20

-r指定读取的抓包文件,-Y是显示过滤器,http.request只保留 HTTP 请求包。-T fields表示按字段输出,后面用-e声明要打印的字段名,这里分别是http.host和http.request.uri。最后用head -20限制只输出前 20 行,避免终端刷屏。如果你想导出成一个文本文件,把末尾改成> requests.txt即可。

如果是 HTTPS 流量,把过滤条件换成tls.handshake.extensions_server_name,-e字段换成tls.handshake.extensions_server_name,就能从 pcapng 里抽出全部 TLS 目标域名。-Y和-T的组合在 Wireshark 图形界面里同样能找到对应操作,但命令行的优势是快,几百 MB 文件秒出结果。

说一个我自己一直保留的习惯:开始抓包之前,永远先用命令行确认当前接口的名字,再回 Wireshark 里选接口。宁可多花十秒钟确认,也不要抓到一半发现接口选错。遇到 HTTPS 看不到明文时,不死磕证书和私钥,而是从 SNI 和 DNS 反推域名关系,这条路既省时间又不碰加密边界。抓包这件事,最大的坑不是工具不好用,而是没搞清楚流量从哪条路过来。希望这篇笔记能让你从“打开 Wireshark 却不知道抓什么”走到“抓到之后能快速定位问题”,那就够了。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询