1

我正在尝试验证用户输入的 SSID 和 WPA 密码以进行 WPA 连接。我的程序是一个运行在嵌入式 Linux 平台上的 Python 程序。我可以通过解析子进程的输出来验证具有 SSID 的接入点是否存在iwlist scan。然而,验证密码短语并不那么直接。到目前为止,我想出的唯一解决方案是解析

wpa_supplicant -Dwext -iwlan0 -c/tmp/wpa_supplicant.conf

寻找

“预共享密钥可能不正确”

或内核消息

“OnDeAuth 原因代码 (15)”

(根据 wpa_supplicant 源,这意味着 WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT)。

将握手超时解释为无效的密码短语似乎是完全错误的。除此之外,该方法需要等待子进程的一些输出,并假设没有错误消息意味着密码是有效的。

谷歌搜索只会给我很多关于如何破解 WPA 连接的问题和建议!我的目标平台没有wpa_cliiwevent在 yum 存储库中,我不确定如何在我的目标上运行第三方 python 包。

问题:验证 Wifi WPA 密码的最简单方法是什么?

4

1 回答 1

0

好吧,满足您的需求的一种不太直接(但唯一可能的)方法是启动与 AP 的四次握手。
由于您使用 Python 进行编码,因此 Scapy 将是您制作 EAPOL 消息包的最佳选择。
不过,您必须了解 EAPOL 数据包的结构,并在您的代码中完全实现它。
您还必须在 Python 中重新编码用于密钥生成的函数,其中大多数(如果不是全部)是 PRF **(伪随机函数);或者,您可以导入已编译好的 .DLL 来为您进行编码。

但是,只管理来自四次握手的前 3 条消息就足够了:
如果在几次连接尝试后,AP 没有发送第三条密钥消息,那么来自 STA 的 MIC(消息完整性检查)没有'与AP生成的不匹配,密码无效。
否则,它是。

注意: wpa_supplicant 遵循相同的身份验证和连接程序,但是它会继续获取额外的信息,例如 IP 地址等等……这就是为什么我说这是唯一可能的方法。

于 2013-07-31T01:29:34.763 回答