如何使用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,并像连接到已知网络一样连接到该网络。