ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

利用Python提取无线网络密码信息

2022-06-10 08:31:14  阅读:156  来源: 互联网

标签:__ Python self wifi 密码 result output 无线网络 networks


 

  

import subprocess
import sys
import json
import os
import optparse
import re

class WiFiNetworksCredentials:
    def __init__(self) -> None:
        self.filename = self.get_params()

    def get_params(self):
        parser = optparse.OptionParser('Usage: <Program> -o output fielname')
        parser.add_option('-o', '--output', dest='output', type='string', help='Specify filename to output')
        options, args = parser.parse_args()
        if options.output is None:
            print(parser.usage)
            sys.exit()
        if os.path.exists(options.output):
            print("[-] The file exists")
            sys.exit()
        return options.output
    

    def retrieve_all_wifi_networks(self):
        try:
            command = 'netsh wlan show profiles'
            result = subprocess.check_output(command, shell=True, encoding='gbk')  #这里需要注意,加上gbk编码,否则会报错
            pattern = r'(?:所有用户配置文件\s*:\s*)(.*)'
            wifi_networks_list = re.findall(pattern, result)
            if len(wifi_networks_list)>0:               
                return wifi_networks_list
            else:
                return False
        except Exception as e:
            print(e)
            sys.exit()
    
    def retrieve_password(self, wifi_name):
        try:
            command = 'netsh wlan show profiles "%s" key=clear' % wifi_name   #这里的字符串需要用双引号包裹,否则因为在windows中有些wifi名称很奇葩,有各种符号,会导致命令执行失败
            result = subprocess.check_output(command, shell=True, encoding='gbk')           

            pattern = r'(?:关键内容\s*:\s*)(.*)'
            search_result = re.search(pattern, result)
            if search_result:
                print(search_result.group(1))
                return wifi_name, search_result.group(1)
        except:
            pass
    
    def run(self):
        wifi_networks_list = self.retrieve_all_wifi_networks()
        wifi_credentials = {}
        if wifi_networks_list:
            for wifi in wifi_networks_list:
                
                res = self.retrieve_password(wifi)
                if res:
                    wifi_name, key_info = res
                    wifi_credentials[wifi_name] = key_info
        
        print(wifi_credentials)
        with open(self.filename, 'w') as f:
            f.write(json.dumps(wifi_credentials))

    

if __name__ == '__main__':
    wifiobj = WiFiNetworksCredentials()
    wifiobj.run()

 

标签:__,Python,self,wifi,密码,result,output,无线网络,networks
来源: https://www.cnblogs.com/jason-huawen/p/16361862.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有