Python在Windows获取附近的无线局域网网络的信号强度RSSI

 

 

 

1. 如果你是在Windows上,你可能想使用WLAN API,它提供了“WlanGetAvailableNetworkList()函数(参见API文档,我不知道有任何Python包装的WLANAPI.DLL所以你可能需要把它包ctypes的。我做这个(作品-)初步的脚本,但它可能是这些混沌。您将要阅读理解所有的字段:

from ctypes import *
from ctypes.wintypes import *
from sys import exit

def customresize(array, new_size):
 return (array._type_*new_size).from_address(addressof(array))

wlanapi = windll.LoadLibrary('wlanapi.dll')

ERROR_SUCCESS = 0

class 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 = 0x8
DOT11_SSID_MAX_LENGTH = 32
WLAN_REASON_CODE = DWORD
DOT11_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_uint
dot11_phy_type_unknown  = 0
dot11_phy_type_any   = 0
dot11_phy_type_fhss   = 1
dot11_phy_type_dsss   = 2
dot11_phy_type_irbaseband = 3
dot11_phy_type_ofdm   = 4
dot11_phy_type_hrdsss  = 5
dot11_phy_type_erp   = 6
dot11_phy_type_ht   = 7
dot11_phy_type_IHV_start = 0x80000000
dot11_phy_type_IHV_end  = 0xffffffff 

DOT11_AUTH_ALGORITHM = c_uint
DOT11_AUTH_ALGO_80211_OPEN   = 1
DOT11_AUTH_ALGO_80211_SHARED_KEY = 2
DOT11_AUTH_ALGO_WPA    = 3
DOT11_AUTH_ALGO_WPA_PSK   = 4
DOT11_AUTH_ALGO_WPA_NONE   = 5
DOT11_AUTH_ALGO_RSNA    = 6
DOT11_AUTH_ALGO_RSNA_PSK   = 7
DOT11_AUTH_ALGO_IHV_START   = 0x80000000
DOT11_AUTH_ALGO_IHV_END   = 0xffffffff

DOT11_CIPHER_ALGORITHM = c_uint
DOT11_CIPHER_ALGO_NONE   = 0x00
DOT11_CIPHER_ALGO_WEP40   = 0x01
DOT11_CIPHER_ALGO_TKIP   = 0x02
DOT11_CIPHER_ALGO_CCMP   = 0x04
DOT11_CIPHER_ALGO_WEP104   = 0x05
DOT11_CIPHER_ALGO_WPA_USE_GROUP = 0x100
DOT11_CIPHER_ALGO_RSN_USE_GROUP = 0x100
DOT11_CIPHER_ALGO_WEP    = 0x101
DOT11_CIPHER_ALGO_IHV_START  = 0x80000000
DOT11_CIPHER_ALGO_IHV_END   = 0xffffffff 

WLAN_AVAILABLE_NETWORK_CONNECTED = 1
WLAN_AVAILABLE_NETWORK_HAS_PROFILE = 2

WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES = 0x00000001
WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES = 0x00000002

class 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),
  (&
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值