1. 程式人生 > >python黑科技:還在為沒有wifi而煩心嗎?這篇文章解決你的困擾

python黑科技:還在為沒有wifi而煩心嗎?這篇文章解決你的困擾

python 爬蟲 程序員 編程

python作為一門高級編程語言,它的定位是優雅、明確和簡單。閱讀Python編寫的代碼感覺像在閱讀英語一樣,這讓使用者可以專註於解決問題而不是去搞明白語言本身。Python雖然是基於C語言編寫,但是摒棄了C中復雜的指針,使其變得簡明易學。並且作為開源軟件,Python允許對代碼進行閱讀,拷貝甚至改進。這些性能成就了Python的高效率,有“人生苦短,我用Python”之說,是一種十分精彩又強大的語言。

技術分享圖片

在最近的公司項目開發中接觸到python語言及wifi相關的一些知識,正好將最近學到的和大家分享一下。

0x0001 開發環境:

windows 10+python2.7.15

0x0002 開發目標:

開發基於字典破解wifi熱點密碼的小工具

在開發這個工具的時候筆者現在網上搜索到了一些項目,但都是linux下的,不能直接用於windows平臺,因此就決定結合找到的linux下的項目,修改成windows下可運行的。

技術分享圖片

首先找到文章《一個非常簡單易懂的WIFI密碼爆破python腳本》但是文章中說使用了pywifi模塊,“這個模塊在win下有點雞肋,作者在調用WLANAPI時沒有做好WLAN_SECURITY_ATTRIBUTES的封裝,所以推薦在linux下跑,我測試所使用的是Kali 2.0 自帶python 2.7.6 ,可直接通過 pip install pywifi 安裝。”但筆者在測試的時候發現,在windows下還是可以運行的,因為要對這個模塊的源代碼進行一些修改,所以就沒有安裝模塊,而是直接拷貝模塊的源代碼到項目目錄下。

0x0003 模塊的修改:

在使用模塊自帶的測試用例時候,發現print輸出了很多無用的信息,因此在_wifiutil_win.py的335行去掉對“show_my_need_info”的調用。

0x0004 程序執行流程

功能需求比較清晰,因此我們的步驟如下:

1、獲得本機無線網卡信息

2、掃描周圍wifi熱點

3、使用字典嘗試連接wifi熱點

4、輸出掃描結果

按照上面的流程就可以編寫代碼了。

0x0005 代碼實現

獲得無線網信息

引用模塊後,主要使用interfaces函數獲取本機無線網卡信息,具體代碼封裝如下:

技術分享圖片

掃描周圍熱點

主要通過scan函數獲得scan_results結果,具體代碼封裝如下,這裏sleep(2)是因為測試的時候本機的無線網卡返回信息需要一些時間,當然如果你的網卡性能好,可以去掉這個sleep:

技術分享圖片

嘗試連接(破解密碼)

密碼破解這裏先要定義一個Profile,然後再將Profile作為參數調用connect進行連接嘗試,使用status函數取連接結果的返回值,如果是const.IFACE_CONNECTED則連接成功,顯示結果,如果是其他則為失敗。

技術分享圖片

主要代碼如上,運行效果如下:

技術分享圖片

問題

這裏有一個問題,就是pywifi模塊的windows版本的代碼裏並沒有實現獲取wifi熱點的加密狀態信息,比如是使用WPA、WPA2、WPA2PSK還是WPAPSK方式加密認證的,因此我就默認將所有的wifi熱點看作是開啟了加密認證的,並在破解的時候視為“profile.akm.append(const.AKM_TYPE_WPA2PSK)”進行破解嘗試。

開始學註意幾點:

1.代碼規範,這本身就是一個非常好的習慣,如果開始不養好好的代碼規劃,以後會很痛苦

2.多動手,少看書,很多人學Python就一味的看書,這不是學數學物理,你看例題可能就會了,學習Python主要是學習編程思想。

3.勤練習,學完新的知識點,一定要記得如何去應用,不然學完就會忘,學我們這行主要都是實際操作。

4.學習要有效率,如果自己都覺得效率非常低,那就停不停,找一下原因,去問問過來人這是為什麽

我有一個微信公眾號,經常會分享一些python技術相關的幹貨;如果你喜歡我的分享,可以用微信搜索“python語言學習”關註

python黑科技:還在為沒有wifi而煩心嗎?這篇文章解決你的困擾