目录

循环死锁的问题把我们带向未知的深渊

2 16.5~21.2 分钟 7436

假设你想学习制作MMD:中国知名的油管哔哩哔哩视频平台有成千上万个教程。但不管怎么说,你拥有一个明确的目的,而系统学习MMD的制作流程是极其复杂和劳累的。抱着面向具体问题的解决心态,你游弋于各种视频图文教程按图索骥,不乏诸多旁门左道,你发现解决一个问题的途中总会冒出新的问题,使之偏离教程和正常运行的预期。

在ChatGPT广为大众可用之前,解决此类问题的办法无非在搜索引擎打上问题相关的关键词的集合,然后在stackoverflow(已路边)、csdn(已付费查看)、*度知道(它不资道啊)、博客园&各种神奇的个人博客(相当一部分可能打不开了,或者图床炸了)遍历回答,尝试所有可能的解法,直到获得成功。这就是我高中周末想要体验各种神奇的AI项目时,比如换脸、生图——好吧,也只有这些,所采取的通行方法。

是的,现在我们有赫尔墨斯代理人、开放龙虾、工作伙计等许多神奇伙伴,你可以把问题丢给他,看着他重复上面的过程,直到获得一个答案,一个结论,一段正确运行的代码,无论什么。

https://www.bilibili.com/video/BV13mVL6YEDQ/

前两天,这个视频勾起了我对初高中将周末下午全部浪费在跟着教程配置环境、解决pip各种神秘莫测的报错,最终程序成功运行,玩一会儿就再也不会打开,然后急头白脸补作业的美好时光的回忆。许多博客性质的网站中的教程,往往都具有该视频同样面向问题、解决所有分支问题直到达成目标的特质,有时候我只是从中获得了某个分支问题的答案,帮助我在另一个通往目标的道路上走得更远。

我认为AI并没有强大到能自行解决所有问题,更重要的是,我们很少真正赋予了它们全部的权限。但总之,我们可以和它合砍三千。

什么是“循环死锁”的问题?假设我们对问题A有三种解决方案,各自有问题B、C、D,由于各种因素,你哪个都解决不了,这是死锁;或者你发现解决问题B时需要解决问题C,而无法解决问题C是你选择解决问题B的原因,这就陷入了死循环。

但我们说的问题无法解决,也可能是问题解决的成本太高,或涉及到了未知的领域,令我们心生退却之意。循环死锁的问题把我们带向未知的深渊。


尽管涉及剧透,我认为这并不影响你游玩Metal Garden时受到的震撼。

游戏《Metal Garden》描绘了如何在绝境中寻求一线生机。穿行于被巨型结构完全封闭的世界,所有人期望的仅剩下逃出。然而,在钢筋水泥交织的庞大造物间攀跃穿梭,我们见证意图破坏与掩藏出口,维持现状与希望逃离的人群间的分歧,直到我们逃出生天,却在高墙外眺望见一颗深红色的行星旋转不息,有些残酷的真相是,出口外的终端机记录揭示了我们仅仅离开了一座承重梁,而配重世界已延展到太阳系外,柯伯伊带。最终,你走入一旁的电梯,拉下拉杆,在齿轮久未运转的嘎吱声响中,第一次亲眼感知到所试图逃离的配重世界的庞大,新的旅途开始了。这个充满悲观的结局仿佛你解决了一个循环死锁的问题,但并未触及目标的核心。当然,我们可以像这款游戏的介绍视频那样为其赋予升华的、阳光普照的积极内核,即每一步都有意义。诚然我们向达成目标更近了,但从更广泛的尺度,用1米和1光年比较没有意义,即你其实清楚,在有生之年达成这个目标毫无可能,“Out”或者说“成功”这个终极目的是虚无的。

网友十枪中九曾经说过:“我将,我将挣扎,我将溃败,但我生命中没有投降二字。“

哦对了,所以这个问题是什么嘞?


我正在下载Kali live iso镜像,然后用rufus写到U盘,希望能抓包得到校园网的CA证书。别急,尽管kali在你刷到最出圈的黑客视频中扮演着网络渗透神必fifa工具的角色,我的目的完全纯良,和雷德王降临地球的目的差球不多,只是想连上校园网。

这个问题诞生的背景是,安卓11开始,谷歌要求链接到WPA2 Business加密的WiFi时,不能在CA证书选择“不验证”,必须填写一个认证域名。尽管你打开你的手机,哪怕已经基于安卓16,却大概率还是有这个选项,不过是又一个为了兼容性而牺牲安全性的决定。

通常校园网采取PEAP+MSCHAPV2的认证模式,输入学号和密码就能实现后续无感链接。对于CA证书,部分学校会向受信任的证书颁发机构购买,正如你当前访问的网站证书是由Let‘s Encrypt颁发的,它们被预载在各种发行系统中;另一些学校决定自己搭建一套认证系统,自签自发。问题是,我能在学校既没有提供radius认证域名,又没有分发自签证书的情况下,让搭载安卓13类原生系统的设备连接到校园网WiFi吗?

这个问题立即被拆解为了两条路径:要么找到这个认证域名,要么想办法得到ca证书,安装到设备中。当我在网上查找相关资料时,又发现了第三条路径:root设备,然后就可以跳过这个认证。需要说明,我的设备是Bigme Hibreak Pro Color,一台墨水屏手机。正因为是小厂,解除bootloader获取root权限反而是真正可行的。但Bigme的系统稳定性实在不敢恭维,和原生鸿蒙类似,系统更新基本都是无脑冲新版本的优化阶段,一旦root,每次OTA都要重新连接电脑线刷,想想就麻烦。往好处想,至少我们已经找到了一条切实可行的路径,只是成本太高了。

心存侥幸地问了问Kimi,adb赋予的权限显然不足以修改系统文件,此路不通。

于是回到第一层,能不能抓包获得这个CA证书呢?参考这篇资料,理论可行。兴冲冲地下载wireshark后,抓了个寂寞。结合文章下方的评论区,需要打开monitor mode,Intel AX211网卡不支持,寄了。但这里 Kimi 与之产生了分歧,认为你的 AX211 虽然不支持 monitor mode,但在关联阶段抓 EAPOL 帧完全不需要 monitor mode。WPA2-Enterprise 的证书交换发生在 802.1X 认证阶段,此时你还没有获得网络访问权限,但无线帧是可以直接捕获的。没懂他们谁说得对,但多次尝试确实无法截获EAPOL帧。

从其他已经成功连接到该校园网WiFi的设备中提取ca证书的尝试也是失败的。你猜我是怎么连接上的?我拥有的其他设备都支持选择“不验证”,因此这个自签发的证书从未保存到设备本地。只有iOS设备会在首次链接时要求信任自签发证书,购买苹果属鸡的成本显著高于Root路线,不作考虑。

然后事情开始彻底脱离我的控制。Wireshark有一个十分友好的GUI,不需要什么额外的教程就能够开始一次抓包。但对于使用Linux Live USB进行网络抓包,就是完全陌生的领域了。非要说,在为FNOS配置无线网卡驱动链接WiFi时,几乎彻底是复制各处论坛帖中的指令。我对当下各种LLM厂商推出Code CLI工具的做法很不理解,似乎CLI成为了某种大众必须掌握的先进玩意。实际上,如果只是为了编辑linux系统中的文档,对于vim只需要知道:wq是保存并退出,或者干脆用nano。难道不应该让人用GUI交互,AI用CLI或更底层的API通信,各自活在各自的舒适区吗?对大部分非专业的人,学习使用CLI并不能提高什么生产力或效率。

Kali Live ISO下好了,但是我忘记了我拥有的是一块损坏的U盘。从购买外物来解决的角度,我可以买一个新的U盘,也可以买一个支持Monitor Mode的USB无线网卡。但这还要考虑网购的时间成本。或者,我可以带一台已经root了的K50U来学校,只是为了抓取到证书或认证地址。

看看绝望的Kimi想了什么:

思考过程:

用户问能否在 VM Workstation 虚拟机里用 Linux 来抓包。

关键问题:VM Workstation 的虚拟机通常使用虚拟网卡(NAT/桥接),而不是直接直通物理无线网卡。AX211 是物理无线网卡,虚拟机默认看不到它。

但是,有几种可能性:

USB 直通 (USB Passthrough):如果主机是 Windows,VMware Workstation 可以将 USB 无线网卡直通给虚拟机。但 AX211 是内置 PCIe 网卡,不是 USB 网卡,所以无法通过 USB 直通。

PCIe 直通:VMware Workstation 对 PCIe 直通支持非常有限,通常需要 VT-d/IOMMU 且消费级主板/CPU 支持不稳定,Workstation 本身也不原生支持像 ESXi 那样的 PCIe 直通。

Monitor mode 在虚拟网卡上:虚拟网卡(如 e1000, vmxnet3)是模拟的有线网卡,不支持无线功能,更不支持 monitor mode。

所以结论是:不能直接通过 VM Workstation 虚拟机让 Linux 控制 AX211 并进入 monitor mode。

但是,用户没有 U 盘,还有其他方案:

WSL2:不行,虚拟网卡看不到物理无线,且 WSL2 内核通常不支持 monitor mode。

双系统/硬盘安装 Linux:如果没有 U 盘,可以用硬盘安装(比如分区安装,或者通过 Windows 的 GRUB 引导 ISO 文件),但这比较复杂。

Android 手机本身抓包:如果用户有 Android 手机,可以用 termux + aircrack-ng(需要 root 和 monitor mode 支持的 USB 网卡)。

用另一台设备:比如同学的电脑、图书馆电脑等。

从已连接设备导出证书:虽然 Windows 不保存证书,但也许可以通过事件查看器或 netsh wlan show profile 看到某些信息?不,证书不会保存在 profile 里。

直接联系学校:这是最简单的方法,既然已经知道是 Ecust 自签名证书。

等等,我需要重新思考。用户之前提到 Windows 连接时弹出了证书(截图显示 Ecust)。虽然不能导出,但也许有其他方式在 Windows 上获取证书信息?

实际上,Windows 在连接 WPA2-Enterprise 时,即使不保存证书到存储区,证书内容在 TLS 握手过程中确实会经过系统。问题在于 WinPcap/Npcap 抓不到 EAPOL。

但是,有一个重要的替代方案我忽略了:在 Windows 上使用 Npcap 的 "Support raw 802.11 traffic" 选项配合特定网卡? 不,AX211 在 Windows 下不支持 monitor mode,这是硬件/驱动限制。

回到虚拟机问题:

VM Workstation + 内置 AX211:不可行,因为 AX211 是 PCIe 设备,VM Workstation 无法将其直通给 VM。

VM Workstation + USB 无线网卡:可行,如果用户有一个 USB 无线网卡,可以直通给 VM。但用户只有 AX211。

我需要明确回答:

不能直接装在 VM Workstation 里抓包,因为 AX211 是内置 PCIe 网卡,VM 无法直通它,虚拟网卡也不支持无线 monitor mode。

解释原因:虚拟机看到的是虚拟有线网卡(通过主机的网络桥接/NAT),不是物理无线网卡。

提供可行的替代方案,考虑到用户没有 U 盘。

替代方案:

Windows 下用 Acrylic WiFi / Microsoft Network Monitor? Microsoft Network Monitor 也抓不到 EAPOL,和 Wireshark 一样受限于 Npcap。

Android 手机 + Termux:如果手机已 root,可以尝试用支持 monitor mode 的 USB 网卡(但用户没有)。

直接从已连接的 Windows 电脑提取证书:虽然 certmgr.msc 里没有,但 Windows 事件日志或 wlan 诊断日志里可能有证书指纹或服务器地址。或者,如果 Windows 电脑曾经通过浏览器下载过 .cer 文件?

使用 WSL1:WSL1 不是真正的虚拟机,它共享 Windows 内核,但同样无法直接操作无线网卡进入 monitor mode。

硬盘安装 Linux:如果没有 U 盘,可以用 ISO 直接硬盘引导(比如 EasyBCD 或 grub4dos),但这太复杂了。

等等,我突然想到一个关键点:如果用户只是要获取证书,而不一定需要进入 monitor mode 抓 EAPOL,有没有办法在 Windows 上直接获取?

Windows 在连接 PEAP 时,证书验证失败会弹出对话框。这个对话框背后的证书数据实际上在内存中。有没有工具可以提取?

有一些工具如 eapol_test 在 Windows 上可以通过 Cygwin 或 WSL 编译运行?但 WSL 没有无线网卡访问权限。

使用 wpa_supplicant for Windows:Windows 版本存在,但它使用的是 Windows 原生 API,不一定能绕过证书验证来抓取证书。

另一个思路:从 TLS 握手日志中提取。Windows 的 WLAN 诊断或 netsh trace 可能包含证书信息?

或者,最简单的方法:既然已经知道是 Ecust 自签名证书,且知道服务器指纹,用户可以直接:

在 Android 上选择 "不验证"(如果系统允许,但 Android 11+ 通常不允许完全不验证)

或者,尝试在 Android 上输入域名 "Ecust",然后看是否能连接?不,没有证书的话 Android 11+ 还是会拒绝。

让我重新思考用户的核心需求:获得 Ecust 的 CA 证书文件。

既然 Windows 弹出了证书警告,说明证书在握手过程中传输了。问题在于:

Wireshark 在 Windows 上抓不到 EAPOL(驱动层限制)

没有 Linux 环境来驱动 AX211 进入 monitor mode

有没有可能在 Windows 上绕过 Npcap 限制?

使用 Microsoft Message Analyzer(已停产)或 Netsh trace 配合特定解析器?

Netsh trace 抓的是 ETL 文件,可以用 Microsoft Network Monitor 或 Windows Performance Analyzer 打开。但它是否能抓到 EAPOL?ETL 是驱动层跟踪,理论上可以抓到驱动看到的所有帧,包括 EAPOL。

我之前建议过方案二(netsh trace),用户说无效。可能是因为 ETL 解析复杂,或者默认 scenario 不包含 EAPOL。

等等,用户说"方案二无效",是指 netsh trace 抓不到,还是抓到了但找不到证书?

我应该:

明确回答 VM Workstation 不可行(AX211 无法直通)

既然没有 U 盘,提供其他零成本方案

重新审视 Windows 本身的可能性

一个重要的 Windows 工具:Acrylic WiFi Professional / WiFi Analyzer? 这些商业工具可能使用专用驱动来捕获 802.11 帧,但通常也要求网卡支持 monitor mode。

另一个思路:使用 Android 手机本身

如果用户的 Android 手机已经 root,可以直接在手机上用 wpa_supplicant 调试模式来抓取证书,或者安装证书为系统级。但用户说 Android 11+ 不允许不验证,所以可能需要证书。

最实际的方案:

既然用户已经知道证书是 Ecust 自签名,且 Windows 连接时能看到指纹,那么:

方案 A:联系学校网络中心获取证书

这是最直接、最合法的途径。学校网络中心一定有这个 .cer 文件。

方案 B:使用 Windows 上的 OpenSSL 或 PowerShell 尝试连接 RADIUS 服务器

如果能从 Windows 事件日志或 netsh trace 中找到 RADIUS 服务器 IP(即使方案二没抓到证书,也许有日志记录了服务器地址?),可以用 OpenSSL 连接其 RadSec 端口(通常是 TCP 2083 或 443)来获取证书。

方案 C:在 Windows 上安装 Linux 子系统(不是 WSL)

比如使用 VirtualBox + 内部网络?不,同样的问题。

方案 D:硬盘安装 Linux(无需 U 盘)

如果用户有一个空闲分区,可以直接把 ISO 解压到硬盘,通过 Windows 引导菜单进入 Live 环境。但这需要一些操作。

方案 E:使用室友/同学的已连接设备

如果室友有 Mac 或已连接该 WiFi 的 Android 旧版手机,可以直接导出证书。

方案 F:Windows 上可能遗漏的抓包方法

实际上,有一个工具叫 OmniPeek 或 TamoSoft CommView for WiFi,它们使用自己的驱动来支持某些网卡的 monitor mode。但 AX211 很新,这些工具可能不支持。

让我回到最根本的问题:用户没有 U 盘,VM 不可行,还有什么办法?

我突然想到:Windows 10/11 本身是否可以通过修改注册表或组策略来导出 PEAP 证书?

不,证书只是临时会话状态。

另一个关键点:用户可能不需要抓 EAPOL 也能获得证书。

如果学校使用 PEAP,RADIUS 服务器通常也会在其他端口(如 443 用于管理界面,或 2083 用于 RadSec)使用同一张证书。如果能扫描学校内网找到 RADIUS 服务器 IP,用浏览器或 OpenSSL 访问即可下载证书。

如何找到 RADIUS 服务器 IP?

在 Windows 已连接状态下,netsh wlan show interfaces 看不到 RADIUS IP。

但 netsh trace 或事件查看器可能会记录认证服务器信息。

或者,从之前失败的 Wireshark 抓包中,虽然看不到 EAPOL,但认证完成后是否有 RADIUS 服务器的流量?不,RADIUS 是 AP 和服务器之间的,客户端看不到。

等等,PEAP 是客户端和 AP 之间建立 TLS 隧道,AP 作为中转。所以证书是 RADIUS 服务器发给客户端的,客户端确实拥有过这张证书。

有没有可能在 Windows 上通过 .NET 或 PowerShell 的 API 来导出当前会话的证书?

Windows 的 WLAN API (WlanGetProfile, WlanQueryInterface) 可以获取连接信息,但不包括服务器证书。

最终可行的建议:

VM Workstation 不可行 — 明确告知原因(PCIe 网卡无法直通,虚拟网卡不支持 monitor mode)。

零成本替代方案(无需 U 盘):

方案 F:在 Windows 上安装 Scoop/Chocolatey,然后安装 OpenSSL,尝试从已知信息推断服务器地址。但这太碰运气了。

方案 G:使用 Android 手机 + Termux(无需 root) — 虽然不能抓 EAPOL,但如果知道 RADIUS 服务器域名/IP,可以用 Termux 的 openssl 连接测试。但用户不知道地址。

方案 H:直接联系学校网络中心。这是目前最现实、零成本、无需技术操作的方案。既然已经知道证书名称是 Ecust,学校网管应该能提供 .cer 文件。

如果一定要技术方案且无 U 盘:

硬盘引导 Linux ISO:把 ISO 文件放在硬盘某个分区,用 grub4dos 或 EasyUEFI 添加启动项。进入 Live 系统后直接用 AX211 抓包。但这需要一定的动手能力。

或者,在 Windows 上安装 Npcap 的 "802.11 raw packet" 模式? 不,AX211 不支持。

我觉得应该诚实告诉用户 VM 不可行,然后推荐最直接的方法:联系学校网络中心。同时提供一个稍微进阶的 Windows 内可能性:检查 Windows 事件查看器中是否有 RADIUS 服务器 IP,然后用 OpenSSL 拉取证书。

让我检查一下 Windows 事件查看器中 WPA2-Enterprise 认证的相关事件:

Microsoft-Windows-WLAN-AutoConfig/Operational 日志中,事件 ID 12007 (EAP negotiation), 12013 (EAP authentication), 8001/8003 (connection success/failure)

这些事件可能包含 RADIUS 服务器名称或 IP?

实际上,Windows 事件日志中可能包含 EAP 服务器名称(即证书的 CN),但不一定是 IP。不过,如果用户能拿到服务器名称(比如 radius.ecust.edu.cn),可以用 nslookup 解析 IP,然后用 OpenSSL 连接 2083 端口测试。

或者,如果学校有 802.1X 配置助手(如 SecureW2, XpressConnect),这些工具通常会内置证书。但 Ecust 看起来是自建的。

另一个思路:从 Windows 的 "证书" 弹窗入手。

当 Windows 弹出 "无法验证服务器的标识" 时,点击 "查看证书" 或 "证书详细信息",虽然无法导出,但可以手动复制证书的 Base64 内容!

在证书详情窗口中,通常有 "详细信息" 标签页,选择 "复制到文件" 是灰色的(因为是会话证书)。

但有些弹窗允许点击 "查看证书" 打开证书查看器,里面有 "公钥"、"指纹" 等。虽然不能直接导出,但可以手动记录关键信息?

不,用户需要的是完整证书文件来安装到 Android。

等等,我突然想到一个非常重要的点:

用户之前说 Windows 弹出了证书警告,截图显示 "颁发给: Ecust"。

如果用户在弹窗时点击了 "连接"(临时信任),Windows 虽然没把证书存到持久存储,但可能把 该服务器的指纹或证书信息记录在了 WLAN profile 的缓存中?

或者,更关键的是:Android 11+ 的 WiFi 设置中,"CA 证书" 下拉菜单里是否有 "使用系统证书" 的选项,然后域名填 Ecust?

如果 Ecust 证书恰好被某个 Android ROM 预装(可能性极低),或者学校有专用 App 来配置 WiFi(很多学校用 "哆点" 或 "Wenet" 或自研 App),这些 App 可能会通过系统 API 绕过限制。

但用户说学校没有提供 CA 凭证的域名,说明学校可能没做 Android 11+ 的适配。

回到问题本身:VM Workstation 能行吗?

答案是:不行。VMware Workstation 无法将内置的 Intel AX211 PCIe 无线网卡直通给虚拟机。虚拟机只能看到虚拟网卡(通过主机的网络共享),无法执行 802.11 monitor mode 抓包。

我应该给出的建议:

明确 VM Workstation 不可行。

既然没有 U 盘,最现实的方法是:

a. 联系学校网络中心(零成本,最合法,最省事)。

b. 如果坚持自己解决:在 Windows 上尝试通过 OpenSSL 连接学校可能的 RADIUS 服务器(需要知道 IP 或域名,可以从 Windows 事件日志尝试找线索,或者从之前抓包的 DHCP/网关信息推断学校网段,扫描 2083/1812/443 端口)。

c. 硬盘安装 Linux Live:无需 U 盘,直接把 ISO 放到硬盘启动。

关于 b,我可以给用户一个 PowerShell 命令,尝试从 Windows 事件日志中提取 EAP/RADIUS 相关信息:

powershell

Get-WinEvent -LogName 'Microsoft-Windows-WLAN-AutoConfig/Operational' |

Where-Object { $_.Id -in 12012,12013,8001,8002,8003 } |

Select-Object TimeCreated, Id, LevelDisplayName, Message

如果日志中有 RADIUS 服务器 FQDN,就可以用 openssl s_client -connect server:2083 -starttls radius 或 openssl s_client -connect server:443 来获取证书。

但说实话,对于普通用户,联系网管是最好的建议。我应该明确说明这一点,同时提供技术备选。

等等,还有一个方案:使用 Windows 上的 "移动热点" 功能?

不,这没用。

或者:在已连接的 Windows 电脑上,用 arp -a 和路由表分析,找到网关,然后扫描网关所在网段的 2083 端口?

RADIUS 服务器通常和 AP 管理网在同一个网段。但这需要知道学校网络拓扑。

我觉得我应该这样组织回答:

VM Workstation 不可行:解释 PCIe 直通和虚拟网卡限制。

没有 U 盘时的最佳方案:联系学校网络中心(信息化办公室),说明 Android 11+ 需要 CA 证书,请求提供 .cer 文件。这是零成本且最合法的途径。

如果学校不配合:提供一个在 Windows 上尝试提取 RADIUS 服务器信息的脚本,然后用 OpenSSL 拉取证书的技术方案(有一定成功率)。

最后的备选:硬盘引导 Linux(提供简要步骤)。

让我再确认一下:用户说"方案二无效",是指 netsh trace 抓不到 EAPOL 还是抓到了没有证书?应该是抓不到或没有有用信息。

对于 OpenSSL 拉取证书,我需要提醒用户:PEAP 的证书通常在 RadSec 端口(TCP 2083)或标准的 TLS 端口(443)上。如果学校 RADIUS 服务器同时提供管理界面,证书可能是同一张。

如何找到 RADIUS 服务器?

从 Windows 事件日志:Microsoft-Windows-WLAN-AutoConfig/Operational 中搜索 "RADIUS" 或服务器名称。

或者,如果用户知道学校网络中心的电话,直接问:"WPA2-Enterprise 的 RADIUS 服务器地址是多少?"

总结我的回答结构:

直接回答:VM 不行。

原因:AX211 是 PCIe 内置网卡,VM Workstation 无法直通;虚拟网卡不支持无线 monitor mode。

推荐:直接联系学校网络中心要证书(最现实)。

备选技术方案:Windows 事件日志 + OpenSSL 扫描(给具体命令)。

最后备选:硬盘安装 Linux(给链接/简要步骤)。

这样比较全面且诚实。

所以我要去咨询网管了。在期待信管中心公众号有人解答我的问题的同时,我也可以向Bigme客服反馈,让他们学习其他国产定制ROM加回“不验证”选项。无论如何,这都需要时间。正如等待龙虾帮你完成任务中的一次次试错需要时间——也可能是达到Token Plan周限额了,说的就是你MInimax。