LISHUZUOXUN_yangjiang/LSZXNetWork/NetworkDriverWin32/wifi.py

121 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import re
import time
import psutil
import pywifi
from pywifi import const
from LogRecord.log_recorder import GLOBAL_LOG
def get_wifi_name():
echo = os.popen("netsh wlan show interfaces | findstr /C:\"SSID\"").read()
wifi_name_re = re.search(r"(?<=:\s).*", echo)
if wifi_name_re:
return wifi_name_re.group()
else:
return None
class WIFI:
def __init__(self) -> None:
super().__init__()
self.iface = None
self.wifi_device_initial()
self.log = GLOBAL_LOG
# WiFi驱动初始化
def wifi_device_initial(self):
while True:
try:
wifi = pywifi.PyWiFi()
self.iface = wifi.interfaces()[0] # acquire the first Wlan card,maybe not
break
except Exception as e:
self.log.write(f"WiFi驱动初始化失败原因是{e.args}")
time.sleep(1)
continue
def get_connected_wifi_name(self):
try:
if self.wifi_connect_status():
wifi_name = get_wifi_name()
return wifi_name
except Exception as e:
self.log.write(f"获取连接的WiFi出错原因是{e.args}")
return None
def wifi_connect_status(self):
try:
if self.iface.status() in [const.IFACE_CONNECTED, const.IFACE_INACTIVE]:
return True
else:
return False
except Exception as e:
self.log.write(f"获取WiFi状态出错原因是{e.args}")
self.wifi_device_initial()
return False
def disconnect(self):
try:
while self.wifi_connect_status():
self.iface.disconnect()
except Exception as e:
self.log.write(f"断开WiFi出错原因是{e.args}")
self.wifi_device_initial()
return False
@staticmethod
def get_ip():
dic = psutil.net_if_addrs()
container = {}
for adapter in dic:
snic_list = dic[adapter]
ipv4 = '无 ipv4 地址'
for snic in snic_list:
if snic.family.name == 'AF_INET':
ipv4 = snic.address
container[str(adapter)] = str(ipv4)
return container
def scan_wifi(self):
try:
self.iface.scan()
time.sleep(5)
base_wifi = self.iface.scan_results()
wifi_list = [str(wifi.ssid) for wifi in base_wifi]
return wifi_list
except Exception as e:
self.log.write(f"扫描WiFi出错原因是{e.args}")
self.wifi_device_initial()
return []
def connect_wifi(self, ssid, password):
try:
self.disconnect()
for i in range(10):
time.sleep(1)
if not self.wifi_connect_status():
break
profile = pywifi.Profile() # 配置文件
profile.ssid = ssid # wifi名称
profile.auth = const.AUTH_ALG_OPEN # 需要密码
profile.akm.append(const.AKM_TYPE_WPA2PSK) # 加密类型
profile.cipher = const.CIPHER_TYPE_CCMP # 加密单元
profile.key = password # wifi密码
# self.iface.remove_all_network_profiles() # 删除其它配置文件
tmp_profile = self.iface.add_network_profile(profile) # 加载配置文件
self.iface.connect(tmp_profile)
for i in range(20):
time.sleep(1)
if self.iface.status() == const.IFACE_CONNECTED:
return True
return False
except Exception as e:
self.log.write(f"链接WiFi出错原因是{e.args}")
self.wifi_device_initial()
return False