【问题标题】:connect wifi with python or linux terminal [closed]用python或linux终端连接wifi [关闭]
【发布时间】:2014-03-06 21:46:38
【问题描述】:

我正在尝试通过 python 和 linux 终端连接到 wifi,但在这两种情况下它都不适合我。

对于python,我正在使用这个库https://wifi.readthedocs.org/en/latest/scanning.html 扫描和保存方案工作正常,但每当我输入这行代码时 scheme.activate() 我没有输出

您知道这个库有什么问题吗?您以前是否使用过它?

我还尝试使用 CLI 连接到 WiFi 网络。我google了一下,发现我应该做这三个语句 1- iwlist wlan0 scan // 扫描无线网络 2- iwconfig wlan0 essid "Mywirelessnetwork" // 与网络关联 3- dhclient wla0 // 获取 UP

每当我执行第 2 步然后检查 iwconfig wlan0 时,我发现无线接口没有关联!

有什么想法吗???

我想做的是有一个库,最好是通过 python 函数或库连接到 wifi,并在树莓派上进行测试,因为我正在构建一些需要网络连接的应用程序。

【问题讨论】:

    标签: python linux networking wifi raspberry-pi


    【解决方案1】:

    这是使用 python os 模块和 Linux iwlist 命令搜索 wifi 设备列表和 nmcli 命令以连接到预期设备的一般方法。

    在此代码中,run 函数查找与您指定的名称(可以是正则表达式模式或服务器名称的唯一部分)匹配的设备的 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()
    

    【讨论】:

    • 如果 server_name 名称中有空格,那么 connection 函数中的 os.system 会将其作为不同的参数。所以这是您代码中的错误。
    【解决方案2】:

    首先尝试查看这些链接: http://packages.ubuntu.com/raring/python-wicd https://wifi.readthedocs.org/en/latest/

    如果您想通过 python 使用 bash 命令,请尝试以下代码:

    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.stdin.write(b'wifi_password\n')
    while handle.poll() == None:
        print handle.stdout.readline().strip()  # print the result
    

    但请确保您在 Linux 中以超级用户身份运行,但在 Windows 中没有问题。

    【讨论】:

    • wicd 库看起来很有希望,但我找不到任何关于如何将它与 python 一起使用的文档。你有任何好的教程或任何类型的文档! ?? PS:我谷歌了:)
    • 您可以在 wicd.sourceforge.net> 上查看 wicd 主页,在那里您可以找到有关它的任何信息,或者在您的 python shell 中简单地使用help('wicd')
    • 我检查了 help('wicd') 除了模块的内容,wicd.sourceforge.net/moinmoin> 已关闭,这是 wicd 的 wiki
    • 那里没有问题。你的国家在哪里?尝试使用VPN查看。我现在正在看。
    • 我来自埃及...我认为这不是 VPN 问题...这就是我得到的结果 tinypic.com/r/6zyctz/8> 看起来他们的 wiki 无法正常工作
    猜你喜欢
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2015-09-29
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多