如何使用Python模块wpa_-uplicant连接到安全的WiFi?

2024-10-01 17:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用wpa_supplicantpython模块通过wpa连接到wifi。在API中,我发现了一个名为select_network的函数,它似乎可以帮助我关联wifi AP,但我不理解输入参数的含义。在

输入参数被称为到所需网络的D-bus对象路径。 在谷歌搜索之后,我找不到任何关于使用这个函数的例子。在

更新

我使用d-feet查看/fi/w1/wpasupplicant1下的对象路径。 如下所示:

/fi/w1/wpa_supplicant1
/fi/w1/wpa_supplicant1/interfaces/7
/fi/w1/wpa_supplicant1/interfaces/7/BSSs/14
/fi/w1/wpa_supplicant1/interfaces/7/Networks/0
/fi/w1/wpa_supplicant1/interfaces/7/Networks/1

更新-1

还不知道如何处理选择网络这个功能。 但是我发现了以下链接:

http://www.programcreek.com/python/example/10250/dbus.Dictionary

这个链接描述了如何使用dbus模块直接连接到wifi。在

如有任何提示,我们将不胜感激。在


Tags: 模块对象函数路径参数链接interfaceswifi
1条回答
网友
1楼 · 发布于 2024-10-01 17:24:01

除此之外,对于那些努力工作的人来说,您需要通过添加-u(enable DBUS)在wpa\u请求应用程序守护程序上启用DBUS功能

关于如何使用它的快速示例,只是一个粗略的编程示例。在

from wpa_supplicant.core import WpaSupplicantDriver
from twisted.internet.selectreactor import SelectReactor
import threading
import time
import errno
import sys
import types
import netifaces
import dbus

class PythonWifiScanner:

    wifiAccessPoints = []

    def __init__(self,reactor):
        self._reactor = reactor
        threading.Thread(target=self._reactor.run, kwargs={'installSignalHandlers': 0}).start()
        time.sleep(0.2)  # let reactor start
        self.driver = WpaSupplicantDriver(reactor)
        self.supplicant = self.driver.connect()

        # get network interfaces

        self.net_iface = netifaces.interfaces()

    def get_configured_networks(self,interfaceNumber):
        return self.supplicant.get_interface(self.net_iface[interfaceNumber].decode()).get_networks()

    def get_single_wpa_interface(self,interfaceNumber):
        return self.supplicant.get_interface(self.net_iface[interfaceNumber].decode())

    def get_interfaces(self):
        return self.net_iface

    def select_network(self,network_path,interfaceNumber):
        return self.supplicant.get_interface(self.net_iface[interfaceNumber].decode()).select_network(network_path)

    def add_network(self,network_cfg,interfaceNumber):
        return self.supplicant.get_interface(self.net_iface[interfaceNumber].decode()).add_network(network_cfg)

    def scan_interface_for_networks(self,interfaceNumber):
        # Get interface and scan the network
        interface = self.supplicant.get_interface(self.net_iface[interfaceNumber].decode())
        wifiNetworks = interface.scan(block=True)
        self.wifiAccessPoints = [] 
        for singleWifi in wifiNetworks:
            self.wifiAccessPoints.append(singleWifi.get_ssid())
        return wifiNetworks

# Start a simple Twisted SelectReactor

sample_network_cfg  = {}
sample_network_cfg['psk'] = "EnterYourKeyHere"
sample_network_cfg['ssid'] = "EnterYourWifiHere"
sample_network_cfg['key_mgmt'] = "WPA-PSK"
reactor = SelectReactor()
dave=PythonWifiScanner(reactor)
value = None
bus = dbus.SystemBus()


print "Interface:" + dave.get_interfaces()[3]

# scan for available networks

for singleWifi in dave.scan_interface_for_networks(3):
    print "Wifi SSID:" + singleWifi.get_ssid()
    print "Wifi Network Type:" + singleWifi.get_network_type()

# Add network configuration to wpa_supplicant 

configpath = dave.add_network(sample_network_cfg,3)

# Attach and Select your network (will need to setip address)
dave.select_network(configpath.get_path(),3)
reactor.stop()

相关问题 更多 >

    热门问题