无法使用Python中的WlanGetAvailableNetworkList获取所有可用网络

2024-10-03 00:25:25 发布

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

我正在尝试使用WlanGetAvailableNetworkList获取所有可用网络的列表。扫描返回一个包含NumberOfItems的对象。当我在基于NumberOfItems的网络阵列上循环时,它只显示第一个网络以及其他任何网络之外的内容。 这是我的密码

from win32wifi.Win32Wifi import WlanScan, WlanOpenHandle, WlanGetProfileList, WlanEnumInterfaces, WlanGetAvailableNetworkList, WlanCloseHandle, WlanConnect

handle =WlanOpenHandle()
interfaces = WlanEnumInterfaces(handle).contents
g= interfaces.InterfaceInfo[0].InterfaceGuid
WlanScan(handle, g)
networks= WlanGetAvailableNetworkList(handle, g).contents
print("Number of networks : ", networks.NumberOfItems)
for i in range(networks.NumberOfItems):
    print('Network : ', networks.Network[i].dot11Ssid.SSID )

WlanCloseHandle(handle)

此问题与this question有关


Tags: 对象网络列表contentsnetworkinterfaceshandleprint
1条回答
网友
1楼 · 发布于 2024-10-03 00:25:25

我在评论中说得太快了(所以我把它删掉了)。显然,win32wifi.Win32Wifi提供了很多包装ctypes的功能,但是由于from win32wifi.Win32NativeWifiApi import *之类的语句,名称空间被污染了。总之,这里有个例子。在

代码.py

#!/usr/bin/env python3

import sys
from win32wifi import Win32Wifi as ww


def main():
    interfaces = ww.getWirelessInterfaces()
    print("WLAN Interfaces: {:d}".format(len(interfaces)))
    for idx0, interface in enumerate(interfaces):
        print("\n  {:d}\n  GUID: [{:s}]\n  Description:  [{:s}]\n  State: [{:s}]".format(idx0, interface.guid_string, interface.description, interface.state_string))
        networks = ww.getWirelessAvailableNetworkList(interface)
        print("\n  Networks: {:d}".format(len(networks)))
        for idx1, network in enumerate(networks):
            print("\n    {:d}\n    SSID: [{:s}]\n    Profile: [{:}]\n    Connectable: {:}\n    Signal quality: {:d}\n    Flags: {:d}\n    Security: {:}\n    Auth: {:}".format(
                idx1, network.ssid.decode(), network.profile_name, network.connectable, network.signal_quality, network.flags, network.security_enabled, network.auth))


if __name__ == "__main__":
    print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
    main()
    print("\nDone.")

输出

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q056703966]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32

WLAN Interfaces: 1

  0
  GUID: [{0C58E048-BC0B-4D5F-A21F-FCD4E4B31806}]
  Description:  [Intel(R) Dual Band Wireless-AC 8260]
  State: [wlan_interface_state_connected]

  Networks: 4

    0
    SSID: [D****l Software]
    Profile: [D****l Software]
    Connectable: True
    Signal quality: 91
    Flags: 3
    Security: True
    Auth: DOT11_AUTH_ALGO_RSNA_PSK

    1
    SSID: []
    Profile: []
    Connectable: True
    Signal quality: 85
    Flags: 0
    Security: True
    Auth: DOT11_AUTH_ALGO_RSNA_PSK

    2
    SSID: [sec]
    Profile: []
    Connectable: True
    Signal quality: 33
    Flags: 0
    Security: True
    Auth: DOT11_AUTH_ALGO_RSNA_PSK

    3
    SSID: [D****l Software]
    Profile: []
    Connectable: True
    Signal quality: 91
    Flags: 0
    Security: True
    Auth: DOT11_AUTH_ALGO_RSNA_PSK

Done.

@EDIT0

虽然它与这个问题无关,但我在处理[SO]: How to connect to WiFi network using Python 3? (@CristiFati's answer)时发现(并修复了)一些Win32WiFi错误。我想看看。在

相关问题 更多 >