如何利用python和DOS获取wifi密码
作者:Giopi 发布时间:2021-12-15 20:10:50
目录
CMD命令获取电脑里配置过的wifi信息
用python脚本来实现这一操作,并获取所有配置过的wifi密码
CMD命令获取电脑里配置过的wifi信息
设定一个场景,假如我忘记了自家的wifi密码,这时候小伙伴来家里跟我开黑,问我wifi密码是多少?我就抓住了这个小秀一波的机会。
上才艺:
按下win+R键,输入CMD打开DOS窗口,然后输入以下命令查看电脑里配置过的wifi。
netsh wlan show profiles
这是电脑连过的wifi,假设我家里的wifi是CMCC-CMCC,接下来我需要查看CMCC-CMCC的信息,上代码:
netsh wlan show profiles CMCC-CMCC
可以看到,安全密钥这里显示的是存在,说明这个wifi是有密码的,接下来,我们用在上面的代码基础上加上"key=clear",密码就会显示了。(不用担心这个clear,不会删除你的wifi密码的,只是一个显示作用)
netsh wlan show profiles CMCC-CMCC key=clear
这个就是我的wifi密码了!
用python脚本来实现这一操作,并获取所有配置过的wifi密码
首先导入两个库subprocess、re
subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
re 模块使 Python 语言拥有全部的正则表达式功能。
我们建立一个通道来执行DOS命令,列出所有的连接过的wifi,并且用profile_names来存下这些WIFI名称,输出采用字典的形式,每个wifi名和密码为一个字典中的键值对,并且先定义一个列表用来存下这些字典。
command_output = subprocess.run(['netsh','wlan','show','profiles'],capture_output= True).stdout.decode(encoding='gbk')
profile_names = re.findall('所有用户配置文件 :(.*)\r',command_output)#返回一个列表
wifi_list=list()
将下一个命令即“查看wifi是否存在密钥”写进代码
if len(profile_names) != 0:
for name in profile_names:
wifi_profile = dict()
profile_info = subprocess.run(['netsh','wlan','show','profiles',name],capture_output=True).stdout.decode(encoding='gbk')
如果安全密钥的内容不是存在的话,说明wifi是没有密码的,我们就不用去瞎搞了,直接continue了。如果是存在的话,我们才进行下一步操作,就是进行下一个命令:加上key=clear,查看密码。这里解释一下为什么要用name[1:],可能是因为编码的原因,通过正则得来的name前面包含了一个空格,如果直接用这个name的话,电脑会告诉你没有这个wifi。例如上文中,我的wifi是“CMCC-CMCC”,当是通过正则获取的wifi名就是“ CMCC-CMCC”多了一个空格。电脑会以为这两个东西它不一样。。。
if re.search('安全密钥 : 不存在',profile_info):
continue
else:
wifi_profile['ssid'] = name[1:]
profile_info_pass = subprocess.run(['netsh','wlan','show','profiles',name[1:],'key=clear'],capture_output=True).stdout.decode(encoding='gbk')
password = re.search('关键内容 :(.*)\r',profile_info_pass)
if password == None:
wifi_profile["password"]=None
else:
wifi_profile["password"] = password[1]
wifi_list.append(wifi_profile)
最后,只要把列表(wifi_list)中的内容打印出来就行了,我把所有代码跟在后面,方便大家理解。
import subprocess
import re
command_output = subprocess.run(['netsh','wlan','show','profiles'],capture_output= True).stdout.decode(encoding='gbk')
profile_names = re.findall('所有用户配置文件 :(.*)\r',command_output)
wifi_list=list()
print(type(profile_names))
if len(profile_names) != 0:
for name in profile_names:
wifi_profile = dict()
profile_info = subprocess.run(['netsh','wlan','show','profiles',name],capture_output=True).stdout.decode(encoding='gbk')
if re.search('安全密钥 : 不存在',profile_info):
continue
else:
wifi_profile['ssid'] = name[1:]
profile_info_pass = subprocess.run(['netsh','wlan','show','profiles',name[1:],'key=clear'],capture_output=True).stdout.decode(encoding='gbk')
password = re.search('关键内容 :(.*)\r',profile_info_pass)
if password == None:
wifi_profile["password"]=None
else:
wifi_profile["password"] = password[1]
wifi_list.append(wifi_profile)
for x in range(len(wifi_list)):
print(wifi_list[x])
如果大家有什么高见请批评指正
来源:https://blog.csdn.net/m0_46344235/article/details/115035934


猜你喜欢
- 本文假设你在 GitHub 上已经有一个想要打包和发布的项目。第 0 步:获取项目许可证在做其他事之前,由于你的项目要开源,因此应该有一个许
- 废话不多说,直接给大家贴代码了,具体代码如下所示,关键代码如下:<!DOCTYPE html> <html lang=&q
- 比如要在一个列表中利用ajax插入一个li的时候,我会直接把数据跟html标签拼接成一句完整的html,然后插入到ul中。无论数据是从服务器
- 在Vue做项目时,做了一个div[contenteditable=true]的组件作为文本输入框在非手动输入值后,光标会丢失,经测试以下这段
- 1、下载地址:MySQL官网2、解压解压之后的文件里边是没有data文件的,需要创建一个空文件夹命名为data(后面需要用),并且需要创建一
- 参数strSQL 要导出的SQL查询语句strFields 字段名称列表,如果为空字符,则使用SQL语句中的字段名用法示例:1:export
- 前言前面我们介绍了 pandas 的基础语法操作,下面我们开始介绍 pandas 的数据读写操作。pandas 的 IO API 是一组顶层
- 基本映射映射使用在根据不同URLs请求来产生相对应的返回内容.Bottle使用route() 修饰器来实现映射.from bottle im
- 引子:今天在蓝点看了Yang的博客《CSS样式表中继承关系的空格与不空格》,思考了一下,本来想写《CSS样式的复合定义与复合调用及简单的模块
- 1. ... 对象没错,你没看错,就是 "..."在Python中 ... 代表着一个名为 
- 今天在使用MySQL时却不知如何处理,插入记录后不知怎样获得刚刚插入的id,查过文档后发现了select last_insert_id(),
- 1 作用注意此处Tensorflow版本是2.0+。由于本人是Pytorch用户,对Tensorflow不是很熟悉,在读到用tf写的代码时就
- 本文实例讲述了JS实现点击li标签弹出对应的索引功能。分享给大家供大家参考,具体如下:需求:点击li标签,弹出对应的索引先看效果:html结
- 我的理解为什么会用到python-docx,因为近段时间下载了大量网文,但格式都是html的,我个人习惯使用word处理文字,于是就想法设法
- 引言:本人从小白自学python,为了测试基础学习效果,增加一定的促进,想通过参加全国计算机等级考试二级python来检验基础学习情况。在学
- 本文实例讲述了Python 面向对象之封装、继承、多态操作。分享给大家供大家参考,具体如下:封装、继承、多态 是面向对象的3大特性为啥要封装
- 形参可以设置参数默认值,设置遵循从右至左原则例如:fun(x=0,y=1),fun(x,y=1),但不可以是fun(x=1,y)形参设置可以
- 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较
- 本文实例讲述了javascript面向对象三大特征之封装。分享给大家供大家参考,具体如下:封装封装(Encapsulation):就是把对象
- 随着因特网的发展,在网络环境中,数据库应用渐渐向操作简单、功能实用的方向发展。本文介绍如何利用ASP技术实现对数据库进行在线维护的方法,并给