Подключение к Wi-Fi с использованием Python: несколько методов с примерами кода

Чтобы подключиться к сети Wi-Fi с помощью Python, существует несколько способов. Ниже я приведу несколько примеров:

Метод 1: использование модуля subprocess

import subprocess
def connect_to_wifi(ssid, password):
    subprocess.run(["netsh", "wlan", "connect", "ssid=" + ssid, "name=" + ssid, "interface=Wi-Fi", "keyMaterial=" + password])
# Usage
connect_to_wifi("Your_SSID", "Your_Password")

Метод 2: использование библиотеки pywifi

import pywifi
from pywifi import const
def connect_to_wifi(ssid, password):
    wifi = pywifi.PyWiFi()
    iface = wifi.interfaces()[0]
    profile = pywifi.Profile()
    profile.ssid = ssid
    profile.auth = const.AUTH_ALG_OPEN
    profile.akm.append(const.AKM_TYPE_WPA2PSK)
    profile.cipher = const.CIPHER_TYPE_CCMP
    profile.key = password
    iface.remove_all_network_profiles()
    tmp_profile = iface.add_network_profile(profile)
    iface.connect(tmp_profile)
# Usage
connect_to_wifi("Your_SSID", "Your_Password")

Метод 3. Использование модуля wlanapi(только для Windows)

import ctypes
from ctypes import wintypes
def connect_to_wifi(ssid, password):
    wlanapi = ctypes.WinDLL("wlanapi.dll")
    class GUID(ctypes.Structure):
        _fields_ = [
            ("Data1", wintypes.DWORD),
            ("Data2", wintypes.WORD),
            ("Data3", wintypes.WORD),
            ("Data4", wintypes.BYTE * 8)
        ]
    class WLAN_CONNECTION_PARAMETERS(ctypes.Structure):
        _fields_ = [
            ("wlanConnectionMode", wintypes.DWORD),
            ("strProfile", wintypes.LPWSTR),
            ("pDot11Ssid", wintypes.POINTER(wintypes.c_ubyte)),
            ("pDesiredBssidList", ctypes.c_void_p),
            ("dot11BssType", wintypes.DWORD),
            ("dwFlags", wintypes.DWORD)
        ]
    ssid_bytes = ssid.encode("utf-8")
    wlanapi.WlanOpenHandle.argtypes = [
        wintypes.DWORD,
        ctypes.POINTER(ctypes.c_void_p)
    ]
    wlanapi.WlanOpenHandle.restype = wintypes.DWORD
    wlanapi.WlanConnect.argtypes = [
        wintypes.HANDLE,
        ctypes.POINTER(GUID),
        ctypes.POINTER(WLAN_CONNECTION_PARAMETERS),
        ctypes.c_void_p
    ]
    wlanapi.WlanConnect.restype = wintypes.DWORD
    client_handle = ctypes.c_void_p()
    negotiated_version = wintypes.DWORD()
    wlanapi.WlanOpenHandle(2, None, ctypes.byref(negotiated_version), ctypes.byref(client_handle))
    connection_params = WLAN_CONNECTION_PARAMETERS()
    connection_params.wlanConnectionMode = 0
    connection_params.strProfile = ssid_bytes
    connection_params.pDot11Ssid = ctypes.cast(ssid_bytes, wintypes.POINTER(wintypes.c_ubyte))
    connection_params.dot11BssType = 1
    wlanapi.WlanConnect(client_handle, ctypes.byref(GUID()), ctypes.byref(connection_params), None)
# Usage
connect_to_wifi("Your_SSID", "Your_Password")