python : Windows WiFi wlan list
来源:互联网 发布:算法帝国 原版 编辑:程序博客网 时间:2024/06/05 07:32
在Windows XP上,可使用Wlan API,它提供了 WlanGetAvailableNetworkList()
在Windows 7 上,cmd 使用 netsh wlan show networks
需要先安装 pywin32
wlanlist.py
from ctypes import *from ctypes.wintypes import *from sys import exitdef customresize(array, new_size): return (array._type_*new_size).from_address(addressof(array))wlanapi = windll.LoadLibrary('wlanapi.dll')ERROR_SUCCESS = 0class GUID(Structure): _fields_ = [ ('Data1', c_ulong), ('Data2', c_ushort), ('Data3', c_ushort), ('Data4', c_ubyte*8), ]WLAN_INTERFACE_STATE = c_uint(wlan_interface_state_not_ready, wlan_interface_state_connected, wlan_interface_state_ad_hoc_network_formed, wlan_interface_state_disconnecting, wlan_interface_state_disconnected, wlan_interface_state_associating, wlan_interface_state_discovering, wlan_interface_state_authenticating) = map(WLAN_INTERFACE_STATE, xrange(0, 8))class WLAN_INTERFACE_INFO(Structure): _fields_ = [ ("InterfaceGuid", GUID), ("strInterfaceDescription", c_wchar * 256), ("isState", WLAN_INTERFACE_STATE) ]class WLAN_INTERFACE_INFO_LIST(Structure): _fields_ = [ ("NumberOfItems", DWORD), ("Index", DWORD), ("InterfaceInfo", WLAN_INTERFACE_INFO * 1) ]WLAN_MAX_PHY_TYPE_NUMBER = 0x8DOT11_SSID_MAX_LENGTH = 32WLAN_REASON_CODE = DWORDDOT11_BSS_TYPE = c_uint(dot11_BSS_type_infrastructure, dot11_BSS_type_independent, dot11_BSS_type_any) = map(DOT11_BSS_TYPE, xrange(1, 4))DOT11_PHY_TYPE = c_uintdot11_phy_type_unknown = 0dot11_phy_type_any = 0dot11_phy_type_fhss = 1dot11_phy_type_dsss = 2dot11_phy_type_irbaseband = 3dot11_phy_type_ofdm = 4dot11_phy_type_hrdsss = 5dot11_phy_type_erp = 6dot11_phy_type_ht = 7dot11_phy_type_IHV_start = 0x80000000dot11_phy_type_IHV_end = 0xffffffff DOT11_AUTH_ALGORITHM = c_uintDOT11_AUTH_ALGO_80211_OPEN = 1DOT11_AUTH_ALGO_80211_SHARED_KEY = 2DOT11_AUTH_ALGO_WPA = 3DOT11_AUTH_ALGO_WPA_PSK = 4DOT11_AUTH_ALGO_WPA_NONE = 5DOT11_AUTH_ALGO_RSNA = 6DOT11_AUTH_ALGO_RSNA_PSK = 7DOT11_AUTH_ALGO_IHV_START = 0x80000000DOT11_AUTH_ALGO_IHV_END = 0xffffffffDOT11_CIPHER_ALGORITHM = c_uintDOT11_CIPHER_ALGO_NONE = 0x00DOT11_CIPHER_ALGO_WEP40 = 0x01DOT11_CIPHER_ALGO_TKIP = 0x02DOT11_CIPHER_ALGO_CCMP = 0x04DOT11_CIPHER_ALGO_WEP104 = 0x05DOT11_CIPHER_ALGO_WPA_USE_GROUP = 0x100DOT11_CIPHER_ALGO_RSN_USE_GROUP = 0x100DOT11_CIPHER_ALGO_WEP = 0x101DOT11_CIPHER_ALGO_IHV_START = 0x80000000DOT11_CIPHER_ALGO_IHV_END = 0xffffffff WLAN_AVAILABLE_NETWORK_CONNECTED = 1WLAN_AVAILABLE_NETWORK_HAS_PROFILE = 2WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES = 0x00000001WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES = 0x00000002class DOT11_SSID(Structure): _fields_ = [ ("SSIDLength", c_ulong), ("SSID", c_char * DOT11_SSID_MAX_LENGTH) ]class WLAN_AVAILABLE_NETWORK(Structure): _fields_ = [ ("ProfileName", c_wchar * 256), ("dot11Ssid", DOT11_SSID), ("dot11BssType", DOT11_BSS_TYPE), ("NumberOfBssids", c_ulong), ("NetworkConnectable", c_bool), ("wlanNotConnectableReason", WLAN_REASON_CODE), ("NumberOfPhyTypes", c_ulong), ("dot11PhyTypes", DOT11_PHY_TYPE * WLAN_MAX_PHY_TYPE_NUMBER), ("MorePhyTypes", c_bool), ("wlanSignalQuality", c_ulong), ("SecurityEnabled", c_bool), ("dot11DefaultAuthAlgorithm", DOT11_AUTH_ALGORITHM), ("dot11DefaultCipherAlgorithm", DOT11_CIPHER_ALGORITHM), ("Flags", DWORD), ("Reserved", DWORD) ]class WLAN_AVAILABLE_NETWORK_LIST(Structure): _fields_ = [ ("NumberOfItems", DWORD), ("Index", DWORD), ("Network", WLAN_AVAILABLE_NETWORK * 1) ]WlanOpenHandle = wlanapi.WlanOpenHandleWlanOpenHandle.argtypes = (DWORD, c_void_p, POINTER(DWORD), POINTER(HANDLE))WlanOpenHandle.restype = DWORDWlanEnumInterfaces = wlanapi.WlanEnumInterfacesWlanEnumInterfaces.argtypes = (HANDLE, c_void_p, POINTER(POINTER(WLAN_INTERFACE_INFO_LIST)))WlanEnumInterfaces.restype = DWORDWlanGetAvailableNetworkList = wlanapi.WlanGetAvailableNetworkListWlanGetAvailableNetworkList.argtypes = (HANDLE, POINTER(GUID), DWORD, c_void_p, POINTER(POINTER(WLAN_AVAILABLE_NETWORK_LIST)))WlanGetAvailableNetworkList.restype = DWORDWlanFreeMemory = wlanapi.WlanFreeMemoryWlanFreeMemory.argtypes = [c_void_p]if __name__ == '__main__': NegotiatedVersion = DWORD() ClientHandle = HANDLE() ret = WlanOpenHandle(1, None, byref(NegotiatedVersion), byref(ClientHandle)) if ret != ERROR_SUCCESS: exit(FormatError(ret)) # find all wireless network interfaces pInterfaceList = pointer(WLAN_INTERFACE_INFO_LIST()) ret = WlanEnumInterfaces(ClientHandle, None, byref(pInterfaceList)) if ret != ERROR_SUCCESS: exit(FormatError(ret)) try: ifaces = customresize(pInterfaceList.contents.InterfaceInfo, pInterfaceList.contents.NumberOfItems) # find each available network for each interface for iface in ifaces: print "Interface: %s" % (iface.strInterfaceDescription) pAvailableNetworkList = pointer(WLAN_AVAILABLE_NETWORK_LIST()) ret = WlanGetAvailableNetworkList(ClientHandle, byref(iface.InterfaceGuid), 0, None, byref(pAvailableNetworkList)) if ret != ERROR_SUCCESS: exit(FormatError(ret)) try: avail_net_list = pAvailableNetworkList.contents networks = customresize(avail_net_list.Network, avail_net_list.NumberOfItems) for network in networks: print "SSID: %s, quality: %02d%%" % ( network.dot11Ssid.SSID[:network.dot11Ssid.SSIDLength], network.wlanSignalQuality) finally: WlanFreeMemory(pAvailableNetworkList) finally: WlanFreeMemory(pInterfaceList)
阅读全文
0 0
- python : Windows WiFi wlan list
- windows 电脑设置wlan网络 虚拟WiFi 创建 启动命令
- WAP GPRS WIFI WLAN
- WIFI与WLAN简介
- WIFI与WLAN简介
- wifi与wlan区别
- Wlan与WiFi
- wifi,WLAN,wpa_supplicant,wpa_cli
- WLAN and WiFI
- List of WLAN channels
- WLAN与WIFI的区别
- [自扫盲]WLAN 与 WIFI
- WLAN与WIFI的区别
- Ubuntu wlan/wifi 上网设置
- wlan和wifi的区别
- WLAN与WIFI的区别
- WiFi(WLAN)测试设备
- python 自动重连wifi windows
- HDU
- IntelliJ
- 1059. C语言竞赛(20)
- 2017年08月05日
- Java 并发编程笔记(一)
- python : Windows WiFi wlan list
- Linux 高级编程
- linux初学者-swap分区篇
- UI 一一 自定义View的封装和xib文件的使用详解
- 公司到底要不要无偿加班
- 微信公众号开1-准备工作
- 第12期 《用双手托起明天的太阳》8月刊
- Hibernate学习笔记(三)
- padding的使用技巧(持续更)