Чтобы подключиться к сети 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")