Contrôle de carte réseau sans fil 3-python library-pywifi

Lorsque vous effectuez des tests de routeur, vous devez contrôler la carte réseau sans fil pour lui permettre de se déconnecter automatiquement et d'autres opérations. Pywifi peut réaliser cette fonction. À cette époque, seules la fenêtre et les plates-formes Linux étaient disponibles, et la plate-forme mac n'était pas disponible.

installer pip pywifi

pip installer les comtypes

1. Obtenez l'interface de la carte réseau sans fil

Parfois, il y a plusieurs cartes réseau sur un ordinateur, pour le moment, nous devons sélectionner la carte réseau dont nous avons besoin pour la liaison SSID.

Lorsque vous utilisez l' pywifi.PyWiFiinterface pour créer une instance, il sera de retour que nous avons détecté quelques cartes réseau, puis nous wifi.interfaces.name()pouvons obtenir le nom de chaque carte réseau , puis nous choisirons la carte réseau correspondante en fonction de nos propres besoins.

def get_wifi_interfaces():
    wifi = pywifi.PyWiFi()  # 创建一个无限对象
    num = len(wifi.interfaces())
    if num <= 0:
        logging.info("未找到无线网卡接口!\n")
        exit()
    if num == 1:
        wifi_iface = wifi.interfaces()[0]  # 取一个无限网卡
        logging.info(u"无线网卡接口: %s\n" % (wifi_iface.name()))
        return wifi_iface
    else:
        logging.info('%-4s   %s\n' % (u'序号', u'网卡接口名称'))
        for i, w in enumerate(wifi.interfaces()):
            logging.info('%-4s   %s' % (i, w.name()))
        while True:
            iface_no = input('请选择网卡接口序号:'.encode('utf-8').decode('gbk'))
            no = int(iface_no)
            if no >= 0 and no < num:
                return wifi.interfaces()[no]

2. Scannez le SSID existant autour

Après avoir sélectionné la carte réseau, nous lierons le SSID du point chaud. À ce stade, nous devons généralement analyser l'environnement environnant d'abord pour confirmer l'existence du SSID que nous voulons lier.

# 扫描周围wifi
def scan_wifi(self):
    self.scan()   # 扫描
    time.sleep(3)
    wifi_info = self.scan_results()
    wifi_list = []
    for i in wifi_info:
        if i.signal > -90:  # 信号强度<-90的wifi几乎连不上
            wifi_list.append((i.ssid, i.signal, i.freq, i.bssid, i.akm))  # 添加到wifi列表
            logging.info("ssid: %s, 信号: %s, freq: %s, mac: %s, 加密方式: %s",
                         i.ssid.encode('raw_unicode_escape', 'strict').decode('utf-8'), i.signal, i.freq, i.bssid, i.akm)

    return sorted(wifi_list, key=lambda x: x[1], reverse=True)  # 按信号强度由高到低排序

Utilisez la fonction scan () pour numériser, attendez quelques secondes, utilisez scan_results () pour obtenir les résultats de la numérisation, puis enregistrez les informations sur le périphérique pour notre correspondance.

3. Connectez le SSID WIFI

Après avoir trouvé le SSID WIFI correspondant, vous pouvez utiliser le mot de passe correspondant au SSID et la méthode de cryptage pour vous connecter (méthode de cryptage, nous pouvons l'obtenir dans les résultats de l'analyse ci-dessus)

Après la connexion, vous pouvez utiliser l'interface status () pour déterminer si la connexion a réussi.

# 连接wifi
def connect_wifi(self):
    profile_info = pywifi.profile.Profile()  # 配置文件
    profile_info.ssid = "TEST_24G"  # wifi名称
    profile_info.key = "12345678"   # wifi密码
    profile_info.auth = pywifi.const.AUTH_ALG_OPEN
    profile_info.akm.append(pywifi.const.AKM_TYPE_WPA2PSK)  # 加密类型
    profile_info.cipher = pywifi.const.CIPHER_TYPE_CCMP     # 加密单元

    self.remove_all_network_profiles()  # 删除其他配置文件
    logging.info("删除其他配置文件")
    time.sleep(2)  # 删除其他配置文件
    tmp_profile = self.add_network_profile(profile_info)  # 加载配置文件

    self.connect(tmp_profile)  # 连接
    time.sleep(10)  # 尝试10秒能否成功连接

    logging.info(self.status())
    if self.status() == pywifi.const.IFACE_CONNECTED:
        logging.info("成功连接")
        return True
    else:
        logging.info("失败")
        self.disconnect()  # 断开连接
        time.sleep(2)
        return False

4. Déconnectez

La déconnexion est relativement simple, comme suit:

# 断开无线网卡已连接状态
def disconnect_wifi(self):
    self.disconnect()
    time.sleep(2)
    if self.status() in [pywifi.const.IFACE_DISCONNECTED, pywifi.const.IFACE_INACTIVE]:
        logging.info(u'无线网卡:%s 已断开。' % self.name())
        return True
    else:
        logging.info(u'无线网卡:%s 未断开。' % self.name())
        return False

5. Exemple complet

En utilisant l'interface ci-dessus, vous pouvez écrire la logique de connexion approximative:

def start_connect_wifi(info):
    wifi = get_wifi_interfaces()
    if check_interfaces(wifi):
        disconnect_wifi(wifi)

    scan_i = 0
    scan_result = False
    while scan_i < 5:
        wifi_list = scan_wifi(wifi)
        scan_i += 1
        for wifi_i in wifi_list:
            if wifi_i[0] == info["ssid"]:
                logging.info("find ssid:%s", info["ssid"])
                scan_result = True
                scan_i = 5
                break

    if not scan_result:
        logging.info("find ssid:%s fail", info["ssid"])
        return False

    conn_result = connect_wifi(wifi)
    time.sleep(2)
    if check_interfaces(wifi):
        disconnect_wifi(wifi)

    return conn_result

https://github.com/awkman/pywifi

API WLAN:
https://www.cnblogs.com/gaidao/p/4086850.html

https://blog.csdn.net/qq_38882327/article/details/89349399

Publié 106 articles originaux · loué 76 · 130 000 visites +

Je suppose que tu aimes

Origine blog.csdn.net/Creator_Ly/article/details/104410927
conseillé
Classement