ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-12 23:57:32  阅读:347  来源: 互联网

标签:pywin32 python python-3-x python-2-7 winapi


我正在尝试使用WlanGetAvailableNetworkList获取所有可用网络的列表.扫描返回一个包含NumberOfItems的对象.当我遍历基于NumberOfItems的网络数组时,它仅向我显示第一个网络,并且超出此范围的所有内容都会给我IndexError:无效索引.
这是我的代码

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有关

解决方法:

我在评论中讲得太早了(所以我删除了它).显然,win32wifi.Win32Wifi提供了许多包装ctypes的功能,但是由于诸如win32wifi.Win32NativeWifiApi import *这样的语句,命名空间被污染了.无论如何,这是一个例子.

code.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.")

输出:

06001

@ EDIT0:

尽管与该问题无关,但我在[SO]: How to connect to WiFi network using Python 3? (@CristiFati’s answer)上工作时发现(并修复了)一些Win32WiFi错误.可能想看看.

标签:pywin32,python,python-3-x,python-2-7,winapi
来源: https://codeday.me/bug/20191012/1904087.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有