diff --git a/wifi_manger.py b/wifi_manger.py deleted file mode 100644 index ed92f9e..0000000 --- a/wifi_manger.py +++ /dev/null @@ -1,169 +0,0 @@ -# 逻辑: -# 1. 检测 Wi-Fi 连接状态,若已连接,则退出程序 -# 2. 扫描 Wi-Fi 网络并获取Wi-Fi列表 -# 3. 关闭Wi-Fi,并启动热点和web服务器 -# 4. 等待用户选择 Wi-Fi 网络并输入密码 -# 5. 关闭热点并重新扫描 Wi-Fi,连接到用户选择的 Wi-Fi 网络 - -import subprocess -import re -import os -import time -from flask import Flask, render_template, request, redirect, url_for, make_response - -app = Flask(__name__) - -# 检测 Wi-Fi 连接状态 -def check_wifi_connection(): - try: - # 使用nmcli命令检查Wi-Fi连接状态 - output = subprocess.check_output(['nmcli', 'device', 'status']).decode('utf-8') - - # 分析输出以查找Wi-Fi连接状态 - for line in output.split('\n'): - if 'wifi' in line and 'connected' in line: - return True - except subprocess.CalledProcessError as e: - print(f"Error checking Wi-Fi status: {e}") - - return False - -def restart_hotspot(): - try: - # sudo systemctl stop dnsmasq - # sudo systemctl restart NetworkManager - # sudo nmcli radio wifi off - # sudo nmcli radio wifi on - # nohup sudo create_ap wlan0 eth0 Takway-Toys --no-virt > create_ap.log 2>&1 & - subprocess.run(['sudo', 'systemctl', 'stop', 'dnsmasq'], check=True) - subprocess.run(['sudo', 'systemctl', 'restart', 'NetworkManager'], check=True) - subprocess.run(['sudo', 'nmcli', 'radio', 'wifi', 'off'], check=True) - subprocess.run(['sudo', 'nmcli', 'radio', 'wifi', 'on'], check=True) - subprocess.Popen('sudo nohup create_ap wlan0 eth0 Takway-Toys --no-virt > create_ap.log 2>&1 &', shell=True) - except subprocess.CalledProcessError as e: - print(f"Error setting up hotspot: {e}") - - -def scan_wifi(): - try: - subprocess.run(['nmcli', 'dev', 'wifi', 'rescan'], check=True) - time.sleep(1) - output = subprocess.check_output(['nmcli', 'dev', 'wifi']) - wifi_list = [] - lines = output.decode().splitlines() - for idx, line in enumerate(lines[1:]): - print(f"{idx}: {line}") - - # 分割字符串以空格为分隔符 - columns = line.split() - - # 提取第一列和第三列的值 - mac_address = columns[0] - - ssid = " ".join(columns[1:3]) - if "Infra" in ssid: - ssid = ssid.replace(" Infra", "") - if ":" in ssid: - # "72:A6:CC:8C:89:6C Takway-AI" - # 去除字符串中的MAC地址 - ssid = re.sub(r'\b\w{2}(:\w{2}){5}\b', '', ssid) - - # 提取第六列的强度值 - last_info = columns[4:8] - # 去除所有的空格 - columns = line.replace(" ", "") - # 提取"Mbit/s"后的三位以内数字 - strength = int(columns[columns.index("Mbit/s")+6:columns.index("Mbit/s")+8]) - - - # print("MAC地址:", mac_address) - # print("SSID:", ssid) - # print("强度:", strength) - - wifi_list.append({'ssid': ssid, 'signal': strength}) - if len(wifi_list) == 15: - break - - return wifi_list - except subprocess.CalledProcessError as e: - print(f"Error scanning for Wi-Fi networks: {e}") - return [] - - -# 连接 Wi-Fi -def connect_wifi(ssid, password): - # 关闭热点 - try: - subprocess.run(['sudo', 'create_ap', '--stop', 'wlan0'], check=True) - print("Stopping create_ap service") - except subprocess.CalledProcessError as e: - print(f"Error stopping hotspot: {e}") - - time.sleep(1) - - # 扫描 Wi-Fi 网络 - # scan_wifi() - - time.sleep(1) - - # 连接到用户选择的 Wi-Fi 网络 - try: - subprocess.run(['nmcli', 'dev', 'wifi', 'connect', ssid, 'password', password], check=True) - print(f"Successfully connected to Wi-Fi: {ssid}") - return True - except subprocess.CalledProcessError as e: - print(f"Error connecting to Wi-Fi: {e}") - return False - -# 主页 -@app.route('/') -def index(): - global wifi_list - print(wifi_list) - - response = make_response(render_template('index.html', wifi_list=wifi_list)) - response.headers.set('Content-Type', 'text/html') - response.headers.set('Apple-Web-App-Capable', 'yes') - response.headers.set('Apple-Mobile-Web-App-Status-Bar-Style', 'black-translucent') - return response - -# 提交 Wi-Fi 信息 -@app.route('/submit', methods=['POST']) -def submit(): - ssid = request.form['ssid'] - password = request.form['password'] - print(f"Connecting to Wi-Fi: {ssid} with password {password}") - connected = connect_wifi(ssid, password) - - time.sleep(5) - # 检查是否成功连接Wi-Fi - if check_wifi_connection() and connected: - os._exit(0) # 成功连接后退出程序 - else: - print("Wi-Fi连接失败。") - - return redirect(url_for('index')) - - -if __name__ == '__main__': - debug_mode = False # 设置为 True 以跳过 Wi-Fi 连接状态检测 - - if not debug_mode: - if check_wifi_connection(): - print("已连接到 Wi-Fi 网络") - else: - print("未连接到 Wi-Fi 网络") - - print("Starting Flask server") - print("----------------------------") - wifi_list = scan_wifi() - print("----------------------------") - # save wifi_list to file - with open('wifi_list.txt', 'w') as f: - for wifi in wifi_list: - f.write(f"{wifi['ssid']},{wifi['signal']}\n") - - restart_hotspot() - # 启动 Flask 服务器 - app.run(host='0.0.0.0', port=80) - \ No newline at end of file