import os import re import sys from LogRecord.log_recorder import GLOBAL_LOG os.popen("sudo systemctl start NetworkManager").read() def get_device_name(): while True: GLOBAL_LOG.write("正在搜索无线网卡名称。。。") echo = os.popen("nmcli -t -f DEVICE,TYPE,STATE dev | awk -F: '$2==\"wifi\"{print $1}'").read() if echo: return echo.strip() # 获得默认Wi-Fi网卡名称 DEFAULT_DEVICE = get_device_name() # 获得有线网卡名称 def get_eth_device_name(): while True: GLOBAL_LOG.write("正在搜索有线网卡名称。。。") echo = os.popen( "nmcli -t -f DEVICE,TYPE,STATE dev | awk -F: '$2==\"ethernet\"{print $1}'" ).read() if echo: return echo.strip() LAN_DEVICE = get_eth_device_name() if not DEFAULT_DEVICE or not LAN_DEVICE: sys.exit() # 获得自身的ip地址 def get_self_ip_address(): echo = os.popen(f"ip -4 addr show {DEFAULT_DEVICE}" +" | grep -oP '(?<=inet\s)\d+(\.\d+){3}'").read() if echo: return echo.strip() else: return "0.0.0.0" def get_wifi_name(): echo = os.popen(f"iwgetid {DEFAULT_DEVICE} -r").read() if echo.strip(): return echo.strip() class WIFI: def __init__(self) -> None: super().__init__() self.wifi_device_initial() @staticmethod def wifi_device_initial(): os.popen("sudo systemctl stop hostapd").read() os.popen("sudo systemctl stop udhcpd").read() os.popen("sudo systemctl start NetworkManager").read() os.popen("sudo nmcli dev").read() os.popen("sudo nmcli r wifi on").read() os.popen(f"sudo ifconfig {DEFAULT_DEVICE} up") @staticmethod def get_connected_wifi_name(): return get_wifi_name() @staticmethod def wifi_connect_status(): if get_wifi_name(): return True else: return False @staticmethod def disconnect(): os.popen(f"sudo nmcli dev disconnect {DEFAULT_DEVICE}") @staticmethod def get_ip(): return get_self_ip_address() @staticmethod def scan_wifi(): os.popen("sudo systemctl stop hostapd") os.popen("sudo systemctl stop udhcpd") os.popen("sudo nmcli dev") os.popen("sudo nmcli r wifi on") os.popen(f"sudo ifconfig {DEFAULT_DEVICE} up") echo = os.popen(f"sudo iwlist {DEFAULT_DEVICE} scan | grep ESSID").read() wifi_name_re = re.findall(r"(?<=ESSID:\").*(?=\")", echo) if wifi_name_re: return wifi_name_re else: return [] @staticmethod def connect_wifi(ssid, password): os.popen(f"sudo nmcli dev wifi connect {ssid} password {password}")