2013-07-05 65 views
0

我正在嘗試驗證WPA連接的用戶對SSID和WPA密碼的輸入。我的程序是一個在嵌入式Linux平臺上運行的Python程序。我可以通過解析iwlist scan子進程的輸出來驗證存在SSID的接入點。然而,驗證密碼短語並不那麼簡單。到目前爲止,我已經拿出了唯一的解決辦法是解析的如何在Linux上編程驗證WPA密碼?

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

輸出尋找

「預共享密鑰可能不正確」

或內核消息

「OnDeAuth原因代碼(15)」

(根據的wpa_supplicant源,這意味着WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT)。

解釋握手超時視爲無效口令似乎完全錯誤的。除此之外,該方法需要等待子進程的某些輸出,並假定沒有錯誤消息表示密碼短語有效。

解決此谷歌搜索只返回了我很多關於如何破解一個WPA連接問題和建議!在目標平臺的yum存儲庫中沒有wpa_cliiwevent,我不確定如何去獲取在我的目標上運行的第三方python軟件包。

問題:什麼是驗證在WiFi WPA密碼的最簡單的方法?

回答

0

那麼,一個並不那麼簡單(但唯一可能)的方式來滿足您的需求將啓動與AP的四方握手。
由於您使用Python進行編碼,因此Scapy將是您製作EAPOL消息數據包的最佳選擇。
你必須知道EAPOL包的結構,並在代碼中完全實現。
您還必須重新編寫,在Python中,該密鑰生成功能,大部分(如果不是全部),這是**的PRF(僞隨機函數);或者,您可以導入現成的.DLL文件來爲您編碼。

但是,僅管理來自四次握手的前3個消息就足夠了:
如果在多次連接嘗試後,AP不發送第三個密鑰消息,則MIC(消息完整性檢查)與AP生成的不匹配,因此密碼無效。
否則,它是。

注:的wpa_supplicant遵循驗證和連接相同的過程,但它仍然對獲得相同的IP地址並沒有什麼額外的信息......這就是爲什麼我說這是唯一可能方式。