【问题标题】:Linux wifi extract scriptLinux wifi 提取脚本
【发布时间】:2020-12-13 19:14:26
【问题描述】:

我刚刚编写了一个从系统中提取 wifi 密码的脚本,如何改进该脚本并使其更简洁?

import subprocess
import shlex
import os


file_path = "/etc/NetworkManager/system-connections/"
wifi_data = os.listdir(file_path)
print("    ")
data = []
for file in wifi_data:
    spaceless_wifi_path_data  = file.replace(" ", "\\ ")
    cmd = f"cat /etc/NetworkManager/system-connections/{spaceless_wifi_path_data}"
    args = shlex.split(cmd)
    p = subprocess.Popen(args,
              stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    data.append(p)

parsed_data = str([data[i].communicate() for i in range(len(data))]).split("\\")
wifi_id_list = [line[4:] for line in parsed_data if 'nid' in line]


keys = [keys[5:] for keys in parsed_data if "npsk" in keys]


gap = len(wifi_id_list) - len(keys)


for missing in range(gap):
    keys.append("No keys has found")


results = list(zip(wifi_id_list[::-1], keys))


for ID, PASS in results:
    print(f"WiFi ID: {ID},  Password: {PASS}")

如何在较少使用的变量和更多列表理解方面改进此代码。只是感觉不方便阅读。

【问题讨论】:

    标签: python linux subprocess wifi extract


    【解决方案1】:

    您不需要使用 cat 并启动子进程来读取文件的内容。这稍微简化了脚本。我还认为列表推导不适合此任务,您应该在迭代文件时构建结果。

    import os
    path = "/etc/NetworkManager/system-connections/"
    wifi_id = []
    keys = []
    for file in os.listdir(path):
        with open(path + file, 'r') as f:
            content = f.read()
            for line in content.split('\n'):
                if line.startswith("nid"):
                    wifi_id.append(line[4:])
                if line.startswith("npsk"):
                    keys.append(line[5:])
            if len(keys) != len(wifi_id):
                keys.append("Keys not found")
    
    results = list(zip(wifi_id, keys))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 2023-03-12
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多