подключить Wi-Fi с терминалом Python или Linux [закрыт]

1

Я пытаюсь подключиться к Wi-Fi через терминал python и linux, но в обоих случаях он не работает со мной.

Для python я использую эту библиотеку https://wifi.readthedocs.org/en/latest/scanning.html  сканирование и сохранение схемы работает нормально, но всякий раз, когда я набираю эту строку кода schem.activate(), и я не получаю выход

Любые идеи, что не так с библиотекой, и если вы использовали ее раньше или нет?

Я также попытался подключиться к сетям Wi-Fi, используя CLI. Я googled и обнаружил, что должен делать эти три заявления 1- iwlist wlan0 scan//для сканирования беспроводных сетей 2- iwconfig wlan0 essid "Mywirelessnetwork" // связать с сетью 3- dhclient wla0//Чтобы получить UP

Всякий раз, когда я делаю шаг 2, а затем проверяю iwconfig wlan0, я обнаружил, что беспроводной интерфейс не связан!!

Любые идеи???

То, что я пытаюсь сделать, это иметь библиотеку для подключения к Wi-Fi, предпочтительно через функцию или библиотеку python, и тестировать на малиновый PI, потому что я создаю некоторые приложения, требующие сетевого подключения.

Теги:
networking
wifi
raspberry-pi

2 ответа

1

Сначала попробуйте посмотреть на эти ссылки: http://packages.ubuntu.com/raring/python-wicd https://wifi.readthedocs.org/en/latest/

И если вы хотите использовать команды bash через python, попробуйте этот код:

from subprocess import Popen, STDOUT, PIPE
from time import sleep

handle = Popen('netsh wlan connect wifi_name', stdout=PIPE, stdin=PIPE, shell=True,  stderr=STDOUT)

sleep(10)

handle.stdint.write('wifi_password\n')
while handle.poll() == None:
    print handle.stdout.readline().strip()  # print the result

Но убедитесь, что вы работаете как суперпользователь в Linux, но в Windows нет проблем.

Изменить: здесь вы можете найти что-нибудь о python: http://pythonwifi.wikispot.org/Front_Page

  • 0
    библиотека wicd выглядит многообещающе, но я не могу найти документацию о том, как я могу использовать ее с python. У вас есть хороший учебник или документация! ?? PS: я погуглил :)
  • 1
    Вы можете взглянуть на домашнюю страницу wicd по адресу < wicd.sourceforge.net > и там вы можете найти что-нибудь об этом или просто воспользоваться help('wicd') в вашей оболочке python!
Показать ещё 6 комментариев
0

Ниже приведен общий подход с использованием модуля python os и команды Linux iwlist для поиска по списку устройств wifi и команды nmcli для подключения к предполагаемому устройству.

В этом коде функция запуска находит SSID устройств, которые соответствуют указанному имени (который может быть шаблоном регулярного выражения или уникальной частью имени сервера), затем подключается ко всем устройствам, которые соответствуют вашим ожидаемым критериям, вызывая функцию connection.

"""
Search for a specific wifi ssid and connect to it.
written by kasramvd.
"""
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()
  • 0
    Если имя_сервера содержит пробелы в имени, то ваша os.system в функции connection примет его как разные параметры ... так что это ошибка в вашем коде.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню