• 用Python脚本能获取Wifi密码么?能。


    注意,本文不是破解 WIFI 密码,当然你把程序发给别人再获取对方密码,那是社会工程学

    ⛳️ 实战场景与 subprocess 模块介绍

    这篇博客给大家带来一个小小的案例,使用 Python 脚本获取本地电脑记录的所有 Wifi 密码。

    先介绍一下用到的模块 subprocess,看模块名就知道这是进程模块,它可以让我们生成新的进程,并对进行进行管理。

    模块中的常用函数,如下所示。

    • subprocess.run():执行指定命令,等待执行完成后返回一个包含执行结果的 CompletedProcess 类对象;
    • subprocess.call():执行指定命令,返回命令执行状态,与 os.system(cmd) 功能类似;
    • subprocess.check_call():执行指定命令,如果执行成功返回状态码,否则抛出异常;
    • subprocess.check_output() :执行指定命令,如果执行状态码为 0,返回执行结果,否则抛出异常;
    • subprocess.getoutput():接收字符串格式的命令,执行并返回执行结果,与之相同的函数有 os.popen(cmd).read()
    • subprocess.getstatusoutput():执行命令,返回一个元组(命令执行状态,命令执行结果)。

    使用这个模块还有一些注意事项。

    1. 官方建议最新版本的 Python,优先使用 subprocess.run()
    2. 上述所有函数都是通过封装 subprocess.Popen() 实现的高级函数,所以想实现复杂功能,可以通过它来实现;
    3. subprocess.getoutput()subprocess.getstatusoutput() 安全性较低。

    既然优先使用 subprocess.run() 方法,那我们看一下其语法格式。

    subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
    
    • 1

    参数说明如下:

    • args:要执行的 shell 命令,需要传入字符串或者字符串参数列表;
    • stdinstdoutstderr:子进程的标准输入,输出和错误;
    • timeout:命令超时时间;
    • check:默认为 False,如果设置为 True,则当进程退出状态码不是 0 的时候,抛出 CalledProcessError 异常;
    • encoding:如果设置该参数,则 stdinstdoutstderr 可以接收字符串数据,并以该编码进行编码,否则只接收字节类型数据;
    • shell:设置命令是否通过 Shell 执行。

    有些这些基础参数说明之后,就可以调用最简单的 Shell 命令了,例如查看本地 pip 包安装清单。

    import subprocess
    
    subprocess.run(["pip","list"])
    
    • 1
    • 2
    • 3

    运行代码,自行查看结果,当然也可以把返回值捕获到一个变量中,查看一下返回对象类型。

    import subprocess
    
    ret = subprocess.run(["pip","list"])
    print(ret)
    
    • 1
    • 2
    • 3
    • 4

    输出结果如下所示:

    CompletedProcess(args=['pip', 'list'], returncode=0)
    
    • 1

    此时返回的是 CompletedProcess 类的对象实例,它表示的是结束进程之后的状态心虚,包含如下属性。

    • args:该进程执行的命令;
    • returncode:退出状态码,为 0 表示进程成功运行,负值-N 表示进程被信号 N 终止;
    • stdout:从进程捕获到的输出信息;
    • stderr:从进程捕获到的错误信息。

    🍁 有了上述知识铺垫之后,就可以完成 Python 获取本地 Wifi 密码案例了 🍁

    ⛳️ Python 获取本地 Wifi 密码

    获取本地 wifi 密码,先通过 CMD 命令实现,分为两步,如下所示。
    第一步,获取所有用户配置文件,其结果为当前电脑连接过的 wifi 名称。

    netsh wlan show profiles
    
    • 1

    得到的结果如下所示。
    在这里插入图片描述
    这里仅在本机中找到了一个配置文件 realme GT Neo2T,然后通过下述命令查看 Wifi 密码。
    第二步,获取上述配置文件对应的密码。

    netsh wlan show profile name="realme GT Neo2T" key=clear
    
    • 1

    可以在运行结果中找到保存密码,如下所示。
    在这里插入图片描述
    有了上述两条 CMD 命令,我们将其应用到 Python 中,就实现了本案例诉求。

    将 CMD 命令翻译为 Python 代码,首先获取所有 wifi 信息。

    import subprocess
    
    # 获取本机wifi列表
    output = subprocess.run(['netsh', 'wlan', 'show', 'profiles'], capture_output=True).stdout.decode('gbk').split('\n')
    print(output)
    wifi_list = [item.split(':')[1][1:-1] for item in output if "所有用户配置文件" in item]
    
    print(wifi_list)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    接下来执行第二条命令,获取指定 wifi 密码。

    # 获取 wifi 密码
    for wifi in wifi_list:
        ret = subprocess.run(['netsh', 'wlan', 'show', 'profile', f'name={wifi}', 'key=clear'],
                                 capture_output=True).stdout.decode('gbk', errors='ignore').split('\n')
    
        print(ret)
        results = [item.split(':')[1][1:-1] for item in ret if "关键内容" in item]
        print(f'{wifi} 密码:{results[0] if len(results)>0 else "无" }')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    最终的运行结果如下所示。

    realme GT Neo2T 密码:12345678
    
    • 1

    💰💰 完成本案例!

    📢📢📢📢📢📢
    💗 你正在阅读 【梦想橡皮擦】 的博客
    👍 阅读完毕,可以点点小手赞一下
    🌻 发现错误,直接评论区中指正吧
    📆 橡皮擦的第 752 篇原创博客

    从订购之日起,案例 5 年内保证更新

  • 相关阅读:
    公众号查题:一步一步搭建自己的查题公众号(内含永久接口)
    亲测有效|处理风控数据特征缺失的一种方法
    vue3+elementui实现表格样式可配置
    Java安全之深入了解SQL注入
    虚拟机搭建负载均衡,mysql主从复制和读写分离(二、克隆虚拟机)
    SELinux零知识学习十八、SELinux策略语言之类型强制(3)
    2-Python程序执行机制
    活动预约报名小程序已优化点与待优化点
    SEO推广-SEO推广软件-SEO推广工具
    联通数科赋能中国联通DCMM5级评估!
  • 原文地址:https://blog.csdn.net/hihell/article/details/127857650