Самый простой способ подключения WiFi Python - PullRequest
0 голосов
/ 01 февраля 2019

Я хотел бы подключиться к моей сети Wi-Fi, используя Python.Я знаю SSID и ключ для сети, и он зашифрован в безопасности WPA2.Я видел некоторые библиотеки, такие как wireless и pywifi, но первая не работала, а вторая была слишком сложной.Какой самый простой способ подключения к Wi-Fi?Какова лучшая библиотека / путь?

Мой сбойный код с использованием беспроводной библиотеки (конечно, я установил его через pip):

from wireless import Wireless

wire = Wireless()
wire.connect(ssid='myhome',password='password')

вывод интерпретатора:

Traceback (most recent call last):
File "C:/Users/Aviv/PycharmProjects/Networks/WiFi/1/1.py", line 4, in 
<module>
wire = Wireless()
File "C:\Python27\lib\site-packages\wireless\Wireless.py", line 23, in 
__init__
self._driver_name = self._detectDriver()
File "C:\Python27\lib\site-packages\wireless\Wireless.py", line 50, in 
_detectDriver
compare = self.vercmp(ver, "0.9.9.0")
File "C:\Python27\lib\site-packages\wireless\Wireless.py", line 71, in vercmp
return cmp(normalize(actual), normalize(test))
File "C:\Python27\lib\site-packages\wireless\Wireless.py", line 70, in 
normalize
return [int(x) for x in re.sub(r'(\.0+)*$', '', v).split(".")]
ValueError: invalid literal for int() with base 10: 'file'

1 Ответ

0 голосов
/ 03 апреля 2019

Простой способ подключения Wi-Fi без каких-либо модулей:

import os


class Finder:
    def __init__(self, *args, **kwargs):
        self.server_name = kwargs['server_name']
        self.password = kwargs['password']
        self.interface_name = kwargs['interface']
        self.main_dict = {}

    def run(self):
        command = """sudo iwlist wlp2s0 scan | grep -ioE 'ssid:"(.*{}.*)'"""
        result = os.popen(command.format(self.server_name))
        result = list(result)

        if "Device or resource busy" in result:
                return None
        else:
            ssid_list = [item.lstrip('SSID:').strip('"\n') for item in result]
            print("Successfully get ssids {}".format(str(ssid_list)))

        for name in ssid_list:
            try:
                result = self.connection(name)
            except Exception as exp:
                print("Couldn't connect to name : {}. {}".format(name, exp))
            else:
                if result:
                    print("Successfully connected to {}".format(name))

    def connection(self, name):
        try:
            os.system("nmcli d wifi connect {} password {} iface {}".format(name,
       self.password,
       self.interface_name))
        except:
            raise
        else:
            return True

if __name__ == "__main__":
    # Server_name is a case insensitive string, and/or regex pattern which demonstrates
    # the name of targeted WIFI device or a unique part of it.
    server_name = "example_name"
    password = "your_password"
    interface_name = "your_interface_name" # i. e wlp2s0  
    F = Finder(server_name=server_name,
               password=password,
               interface=interface_name)
    F.run()
...