Skynet520 发表于 2023-5-12 10:43

Python WiFi link

这段代码是基于 PyWiFi 库来实现 Python WiFi 自动连接的案例

[*]初始化 PyWiFi 实例和 wifi 网卡接口
[*]将 wifi 网卡接口断开当前连接
[*]扫描周围可用的 WiFi 热点,并获取热点名称和密码(通过命令行参数传递)
[*]遍历扫描到的热点列表,找到与输入的热点名称匹配的热点
[*]如果找到了符合条件的热点,根据热点的安全配置信息创建一个 WiFi 配置文件对象,并将密码加入到配置文件中
[*]清除 wifi 网卡接口中已有的所有 WiFi 配置文件,并将新的 WiFi 配置文件添加到 wifi 网卡接口中
[*]连接指定的 WiFi 热点,并等待 5 秒钟,检查是否连接成功。
[*]如果连接成功,则输出 "Link:OK";否则输出 "WifiPassword:NG" 或 "Link:NG"





import pywifi
import time
import sys

from pywifi import const

def main() -> object:
    wifi = pywifi.PyWiFi()
    ifaces = wifi.interfaces()[0]
    ifaces.disconnect()
    time.sleep(1)
    wifistatus = ifaces.status()
    if wifistatus == const.IFACE_DISCONNECTED:
      ifaces.scan()
      time.sleep(2)
      SSIDS = ifaces.scan_results()
      ssid =(sys.argv[1])
      pswd =(sys.argv[2])
      for SSID in SSIDS:
            #检查是否扫描到对于wifi
            if SSID.ssid== ssid:
                profile = pywifi.Profile()
                profile.ssid = SSID.ssid
                profile.auth = const.AUTH_ALG_OPEN
                profile.akm.append(const.AKM_TYPE_WPA2PSK)
                profile.cipher = const.CIPHER_TYPE_CCMP
                profile.key = pswd
                ifaces.remove_all_network_profiles()
                tep_profile = ifaces.add_network_profile(profile)
                ifaces.connect(tep_profile)
                time.sleep(5)
                if ifaces.status() == const.IFACE_CONNECTED:
                  print("Link:OK")
                  return
                else:
                  print("WifiPassword:NG")
                  return
    print("Link:NG")

if __name__ == ("__main__"):
    main()

law.liu 发表于 2023-5-12 17:45

这段 Python 代码似乎是一个用于连接 Wi-Fi 的脚本。代码中引用了 pywifi 库,但是代码中缺少 pywifi 库的导入语句。如果你运行这段代码时遇到了 ImportError,缺少 pywifi 库

pip install pywifi

另外,代码中有一些语法问题:

def main() -> object: 中的 -> object 这一语法可以省略,直接写成 def main(): 即可。

if __name__ == ("__main__"): 中的双引号写错了,应该使用单引号或双双引号

修复后代码如下:

import pywifi
import time
import sys
from pywifi import const

def main():
    wifi = pywifi.PyWiFi()
    ifaces = wifi.interfaces()
    ifaces.disconnect()
    time.sleep(1)
    wifistatus = ifaces.status()
    if wifistatus == const.IFACE_DISCONNECTED:
      ifaces.scan()
      time.sleep(2)
      SSIDS = ifaces.scan_results()
      ssid = sys.argv
      pswd = sys.argv
      for SSID in SSIDS:
            #检查是否扫描到对于wifi
            if SSID.ssid == ssid:
                profile = pywifi.Profile()
                profile.ssid = SSID.ssid
                profile.auth = const.AUTH_ALG_OPEN
                profile.akm.append(const.AKM_TYPE_WPA2PSK)
                profile.cipher = const.CIPHER_TYPE_CCMP
                profile.key = pswd
                ifaces.remove_all_network_profiles()
                tep_profile = ifaces.add_network_profile(profile)
                ifaces.connect(tep_profile)
                time.sleep(5)
                if ifaces.status() == const.IFACE_CONNECTED:
                  print("Link:OK")
                  return
                else:
                  print("WifiPassword:NG")
                  return
    print("Link:NG")

if __name__ == "__main__":
    main()

在运行代码之前,你需要在命令行中传递两个参数,分别是 Wi-Fi 的 SSID 和密码。例如,如果你要连接一个名为 "MyWifi" 的 Wi-Fi,密码为 "password123",则可以在命令行中输入以下命令来运行该脚本
python your_script.py MyWifi password123

其中,"your_script.py" 是你保存该脚本的文件名。

yang0318 发表于 2023-5-19 14:19

这个我试过。速度太慢了。
页: [1]
查看完整版本: Python WiFi link