Linux wifi提取脚本
Linux wifi extract script
我刚刚编写了一个从系统中提取 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}")
这段代码如何在较少使用的变量和更多的列表理解方面得到改进。就是感觉读起来不方便
您不需要使用 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))
我刚刚编写了一个从系统中提取 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}")
这段代码如何在较少使用的变量和更多的列表理解方面得到改进。就是感觉读起来不方便
您不需要使用 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))