如何使用Python连接Wi-Fi

如何使用Python连接Wi-Fi

在现如今找到一个没有活动互联网连接的电脑几乎是不可能的。在21世纪,互联网变得至关重要。有多种方式可以将系统连接到互联网。第一种是使用传统的电缆,即以太网,另一种是使用现代的无线保真系统,也被称为Wi-Fi。Wi-Fi让我们的生活变得更加方便和快速。只需点击鼠标和触摸拇指,我们就可以立即连接到一个无限的数据和资源海洋。在接下来的教程中,我们将了解如何使用Python这样的高级编程语言连接Wi-Fi。

那么,让我们开始吧。

连接已知的Wi-Fi网络

在接下来的部分中,我们将讨论连接到以前连接的Wi-Fi网络的过程。为了完成这个任务,我们将按照以下描述的方法进行:

方法:

我们将按照以下简单的步骤进行此程序:

步骤1: 首先,我们将导入所需的库。

步骤2: 其次,我们将使用 cmd 命令和一个名为 OS 的Python库扫描和显示所有可用的SSID。

步骤3: 然后,我们将选择要连接的已知Wi-Fi网络,并等待连接成功。

既然我们已经理解了这个过程,让我们开始编码部分。我们将利用Windows命令提示符的一些命令来访问可用的Wi-Fi网络列表并连接到已知的Wi-Fi网络。不过,我们如何在Python脚本中编写和执行Windows命令提示符的命令呢。

Python编程语言提供了一个名为 OS 的内置库。这个库通过Python脚本直接与操作系统通信,使用诸如 path()、getcwd()、system() 等多种方法。我们甚至可以使用OS库的函数来执行cmd命令。

让我们考虑以下实现来理解上述说明。

示例:

# importing the os library
import os
# scanning the available Wi-Fi networks
os.system('cmd /c "netsh wlan show networks"')
# providing the Wi-Fi name as input
router_name = input('Input Name/SSID of the Wi-Fi network we would like to connect: ')
# connecting to the provided Wi-Fi network
os.system(f'''cmd /c "netsh wlan connect name = {router_name}"''')
print("If the system is not connected yet, try reconnecting to an earlier connected SSID!")

输出:

Interface name : Wi-Fi
There are 11 networks currently visible. 
SSID 1 : Benny
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 2 : Honest
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 3 : Sushii
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 4 : Amazon
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 5 : Unagi91
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 6 : Printer.5G
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 7 : Printer 2.4G
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 8 : Willett
    Network type            : Infrastructure
    Authentication          : WPA-Personal
    Encryption              : CCMP
SSID 9 : MARK1
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 10 : Disconnect
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 11 : MARK1_5G
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
Input Name/SSID of the Wi-Fi network we would like to connect: MARK1_5G  
Connection request was completed successfully.
If the system is not connected yet, try reconnecting to an earlier connected SSID! 

解释:

在上面的代码片段中,我们使用import关键字导入了OS库。然后,我们使用os.system()方法来执行以下命令: 命令:

'cmd /c "netsh wlan show networks"'

上述命令帮助扫描所有可用的SSID,并将它们与其基础设施、认证和加密类型一起作为输出显示。然后,我们定义了一个变量 router_name ,将用户输入的SSID值存储为字符串。

然后将这个字符串变量替换为另一个 cmd 命令,我们应该提供SSID的名称。

命令:

f'''cmd /c "netsh wlan connect name = {router_name}"'''

我们现在成功连接到特定的SSID。

建立与新的Wi-Fi网络的连接

在接下来的部分中,我们将讨论建立与新的Wi-Fi网络连接的方法,只需几个简单的步骤即可。此外,还需要通过一个XML文件将新的Wi-Fi网络配置文件添加到系统中,以便连接到新网络。这将使Wi-Fi网络成为一个已知的SSID,并且我们将能够通过以下步骤成功连接它:

方法论:

步骤1: 我们将首先导入所需的库,即 OS 库。

步骤2: 然后,我们将设置新的Wi-Fi网络的XML配置。

步骤3: 配置设置完成后,我们将选择Wi-Fi网络。

步骤4: 然后,我们将把Wi-Fi网络的配置文件添加到系统中。

步骤5: 最后,我们将连接到Wi-Fi网络。

让我们通过以下示例来看一下上述过程的实际操作:

示例:

# importing the os module
import os
# defining the function to establish a new connection
def create_new_connection(name, SSID, password):
    config = """<?xml version=\"1.0\"?>
<WLANProfile xmlns = "http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>""" + name + """</name>
    <SSIDConfig>
        <SSID>
            <name>""" + SSID + """</name>
        </SSID>
    </SSIDConfig>
    <connectionType> ESS </connectionType>
    <connectionMode> auto </connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication> WPA2PSK </authentication>
                <encryption> AES </encryption>
                <useOneX> false </useOneX>
            </authEncryption>
            <sharedKey>
                <keyType> passPhrase </keyType>
                <protected> false </protected>
                <keyMaterial>""" + password + """</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>"""
    wlan_command = "netsh wlan add profile filename =\"" + name + ".xml\"" + " interface = Wi-Fi"
    with open(name + ".xml", 'w') as file:
        file.write(config)
    os.system(wlan_command)
# defining function to connect to a network
def wlan_connect(name, SSID):
    wlan_command = "netsh wlan connect name =\"" + name + "\" ssid =\"" + SSID + "\" interface = Wi-Fi"
    os.system(wlan_command)
# defining function to display avavilabe Wi-Fi networks   
def display_available_networks():
    wlan_command = "netsh wlan show networks interface = Wi-Fi"
    os.system(wlan_command)
# displaying the available netwroks
display_available_networks()
# inputing the Wi-Fi name and password
name = input("Enter the Name of Wi-Fi: ")
password = input("Enter the Password: ") 
# establishing a new connection
create_new_connection(name, name, password)
# connecting to the Wi-Fi network
wlan_connect(name, name)
print("If the system is not connected to this network, try connecting with the correct password!")

输出:

Interface name : Wi-Fi
There are 11 networks currently visible. 
SSID 1 : Benny
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 2 : Honest
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 3 : Sushii
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 4 : Amazon
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 5 : Unagi91
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 6 : Printer.5G
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 7 : Printer 2.4G
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 8 : Willett
    Network type            : Infrastructure
    Authentication          : WPA-Personal
    Encryption              : CCMP
SSID 9 : MARK1
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 10 : Disconnect
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
SSID 11 : MARK1_5G
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
Enter the Name of Wi-Fi: MARK1_5G
Enter the Password: Thereisnopassword.
Connection request was completed successfully.
If the system is not connected to this network, try connecting with the correct password!   

解释:

在上面的代码片段中,我们导入了 OS(操作系统 模块并定义了 create_new_connection(创建新连接) 函数,该函数接受 name(名称)、SSID(网络名称)password(密码) 作为参数。这些参数都是字符串,我们必须完成以便 配置 变量。该 配置 变量是一个字符串,允许程序员定义新的Wi-Fi网络的XML配置。

然后,我们接受用户对SSID名称和密码的输入。然后将它们添加到XML代码中,然后使用以下代码将其作为配置文件包含进去:

语法:

my_command = "netsh wlan add profile filename =\"" + name + ".xml\"" + " interface = Wi-Fi"
with open(name+".xml", 'w') as file:
    file.write(config)
os.system(my_command)

现在我们可以借助之前在教程中使用的相同命令连接到Wi-Fi,并像连接到已知网络一样连接到该网络。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程