[PYTHON] 어떻게하면 파이썬을 사용하여 Windows에서 가까운 무선 LAN 네트워크의 신호 강도를 검색 할 수 있습니까?
PYTHON어떻게하면 파이썬을 사용하여 Windows에서 가까운 무선 LAN 네트워크의 신호 강도를 검색 할 수 있습니까?
어떻게하면 파이썬을 사용하여 Windows에서 가까운 무선 LAN 네트워크의 신호 강도를 검색 할 수 있습니까?
나는 값을 보여 주거나 그래프로 나타내기를 원한다.
해결법
-
==============================
1.Windows 사용자 인 경우 'WlanGetAvailableNetworkList ()'기능을 제공하는 WLAN API를 사용하고 싶을 것입니다 (사용 방법은 API 문서를 참조하십시오). 내가 WLANAPI.DLL에 대한 파이썬 래퍼를 인식하지 못하기 때문에 ctypes를 사용하여 직접 래핑해야 할 수도 있습니다. 이 작업을 수행하는 예비 스크립트가 있지만 작업이 힘들 수 있습니다. 모든 필드의 의미를 이해하기 위해 문서를 읽는 것이 좋습니다.
Windows 사용자 인 경우 'WlanGetAvailableNetworkList ()'기능을 제공하는 WLAN API를 사용하고 싶을 것입니다 (사용 방법은 API 문서를 참조하십시오). 내가 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, range(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, range(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), ("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.WlanOpenHandle WlanOpenHandle.argtypes = (DWORD, c_void_p, POINTER(DWORD), POINTER(HANDLE)) WlanOpenHandle.restype = DWORD WlanEnumInterfaces = wlanapi.WlanEnumInterfaces WlanEnumInterfaces.argtypes = (HANDLE, c_void_p, POINTER(POINTER(WLAN_INTERFACE_INFO_LIST))) WlanEnumInterfaces.restype = DWORD WlanGetAvailableNetworkList = wlanapi.WlanGetAvailableNetworkList WlanGetAvailableNetworkList.argtypes = (HANDLE, POINTER(GUID), DWORD, c_void_p, POINTER(POINTER(WLAN_AVAILABLE_NETWORK_LIST))) WlanGetAvailableNetworkList.restype = DWORD WlanFreeMemory = wlanapi.WlanFreeMemory WlanFreeMemory.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: {}".format(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: {}, quality: {:2d}%".format( network.dot11Ssid.SSID[:network.dot11Ssid.SSIDLength].decode(), network.wlanSignalQuality)) finally: WlanFreeMemory(pAvailableNetworkList) finally: WlanFreeMemory(pInterfaceList)
리눅스에서는 몇 가지 선택을 할 수 있습니다 :
표준 옵션은 iwlist -scan의 출력을 구문 분석하는 것입니다. 그러나 현재 wlan에 연결되어 있고 루트로 실행 중이 지 않으면 현재 연결된 wlan 만 반환합니다.
이보다 더 많은 정보가 필요하다면 가장 좋은 방법은 무선 관리자 데몬을 쿼리하는 것입니다. 현대 리눅스에서는 wicd가 점점 대중화되고 있지만 보통 NetworkManager입니다. 이 두 관리자는 모두 dbus를 사용하여 질의 할 수 있습니다. 클라이언트가 자신의 시스템에 가지고있는 것을 제어 할 수 없다면,이 두 옵션 모두를 지원하거나 적어도 하나의 옵션을 지원해야하며 iwlist를 대체해야 할 수도 있습니다.
-
==============================
2.Windows API를 다루지 않으려면 여기에 표시된 메소드를 약간 수정하면됩니다.
Windows API를 다루지 않으려면 여기에 표시된 메소드를 약간 수정하면됩니다.
이 명령을 사용할 수 있습니다 :
netsh wlan show networks mode=Bssid
이 코드를 사용하여
import subprocess results = subprocess.check_output(["netsh", "wlan", "show", "network", "mode=Bssid"])
그러면 추가 "신호"정보가 백분율로 표시됩니다. 이 방법을 사용하여 RSSI로 변환 할 수 있습니다.
-
==============================
3.시스템 명령을 호출하여 해당 정보 (Linux = iwlist)를 가져 와서 결과를 파싱하고 표시 할 수 있습니다.
시스템 명령을 호출하여 해당 정보 (Linux = iwlist)를 가져 와서 결과를 파싱하고 표시 할 수 있습니다.
-
==============================
4.@fmark이 멋진 게시물에 대해 감사 드리고 싶습니다. 제 작품에서 저는 Windows에서 연결된 AP로부터 RSSI를 얻으려고 노력했습니다. 현재 모든 AP를 나열하고 있지만 수정 중이 야. 나는 당신의 코드에 대한 권고안을 제시하고자했다. 나는 C 나 파이썬 CTypes 모듈에 대해서는 경험이별로 없지만 가능한 버그를 발견했을지도 모른다. 나는 그것이 무슨 차이가 있는지 정말로 모르지만 나는 알아 차렸다 :
@fmark이 멋진 게시물에 대해 감사 드리고 싶습니다. 제 작품에서 저는 Windows에서 연결된 AP로부터 RSSI를 얻으려고 노력했습니다. 현재 모든 AP를 나열하고 있지만 수정 중이 야. 나는 당신의 코드에 대한 권고안을 제시하고자했다. 나는 C 나 파이썬 CTypes 모듈에 대해서는 경험이별로 없지만 가능한 버그를 발견했을지도 모른다. 나는 그것이 무슨 차이가 있는지 정말로 모르지만 나는 알아 차렸다 :
열거 형을 다음과 같이 정의합니다.
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_PHY_TYPE = c_uint (dot11_phy_type_unknown, dot11_phy_type_any, dot11_phy_type_fhss, dot11_phy_type_dsss, dot11_phy_type_irbaseband, dot11_phy_type_ofdm, dot11_phy_type_hrdsss, dot11_phy_type_erp, dot11_phy_type_ht, dot11_phy_type_IHV_start, dot11_phy_type_IHV_end) = map(DOT11_PHY_TYPE, [0,0,1,2,3,4, 5,6,7,0x80000000, 0xffffffff])
이렇게하면 해당 값이 DOT11_PHY_TYPE에 올바르게 매핑됩니다. 아마도 나는 완전히 잘못되었지만 나 자신과 같은 미래의 사람들을 위해, 나는 단지 여기에 비틀 거리는 것이 맞는지 원했을 뿐이다. :) 다시 한 번 감사드립니다. @fmark.
-
==============================
5.그래서 .. 나는 자신을 @fmarks 코드 (나에게 더 안전했다)에 기반을 두었고 WlanScan 함수를 추가해야한다. 그렇지 않으면 RSSI 값이 새로 고쳐지지 않는다.
그래서 .. 나는 자신을 @fmarks 코드 (나에게 더 안전했다)에 기반을 두었고 WlanScan 함수를 추가해야한다. 그렇지 않으면 RSSI 값이 새로 고쳐지지 않는다.
여기 확장 코드가 있습니다!
@fmarks의 모든 소품!
__author__ = 'Pedro Gomes' import time 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), ("dot11DefaultCipherAlgorithm", DOT11_CIPHER_ALGORITHM), ("Flags", DWORD), ("Reserved", DWORD) ] class WLAN_AVAILABLE_NETWORK_LIST(Structure): _fields_ = [ ("NumberOfItems", DWORD), ("Index", DWORD), ("Network", WLAN_AVAILABLE_NETWORK * 1) ] DOT11_MAC_ADDRESS = c_ubyte * 6 DOT11_CIPHER_ALGORITHM = c_uint DOT11_CIPHER_ALGO_NONE = 0x00 DOT11_CIPHER_ALGO_WEP40 = 0x01 DOT11_CIPHER_ALGO_TKIP = 0x02 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 class WLAN_RATE_SET(Structure): _fields_ = [ ("uRateSetLength", c_ulong), ("usRateSet", c_ushort * 126) ] class WLAN_BSS_ENTRY(Structure): _fields_ = [ ("dot11Ssid",DOT11_SSID), ("uPhyId",c_ulong), ("dot11Bssid", DOT11_MAC_ADDRESS), ("dot11BssType", DOT11_BSS_TYPE), ("dot11BssPhyType", DOT11_PHY_TYPE), ("lRssi", c_long), ("uLinkQuality", c_ulong), ("bInRegDomain", c_bool), ("usBeaconPeriod",c_ushort), ("ullTimestamp", c_ulonglong), ("ullHostTimestamp",c_ulonglong), ("usCapabilityInformation",c_ushort), ("ulChCenterFrequency", c_ulong), ("wlanRateSet",WLAN_RATE_SET), ("ulIeOffset", c_ulong), ("ulIeSize", c_ulong)] class WLAN_BSS_LIST(Structure): _fields_ = [ ("TotalSize", DWORD), ("NumberOfItems", DWORD), ("NetworkBSS", WLAN_BSS_ENTRY * 1) ] class WLAN_AVAILABLE_NETWORK_LIST_BSS(Structure): _fields_ = [ ("TotalSize", DWORD), ("NumberOfItems", DWORD), ("Network", WLAN_BSS_ENTRY * 1) ] WlanOpenHandle = wlanapi.WlanOpenHandle WlanOpenHandle.argtypes = (DWORD, c_void_p, POINTER(DWORD), POINTER(HANDLE)) WlanOpenHandle.restype = DWORD WlanCloseHandle = wlanapi.WlanCloseHandle WlanCloseHandle.argtypes = (HANDLE, c_void_p) WlanCloseHandle.restype = DWORD WlanEnumInterfaces = wlanapi.WlanEnumInterfaces WlanEnumInterfaces.argtypes = (HANDLE, c_void_p, POINTER(POINTER(WLAN_INTERFACE_INFO_LIST))) WlanEnumInterfaces.restype = DWORD WlanGetAvailableNetworkList = wlanapi.WlanGetAvailableNetworkList WlanGetAvailableNetworkList.argtypes = (HANDLE, POINTER(GUID), DWORD, c_void_p, POINTER(POINTER(WLAN_AVAILABLE_NETWORK_LIST))) WlanGetAvailableNetworkList.restype = DWORD WlanGetNetworkBssList = wlanapi.WlanGetNetworkBssList WlanGetNetworkBssList.argtypes = (HANDLE, POINTER(GUID),POINTER(GUID),POINTER(GUID), c_bool, c_void_p, POINTER(POINTER(WLAN_BSS_LIST))) WlanGetNetworkBssList.restype = DWORD WlanFreeMemory = wlanapi.WlanFreeMemory WlanFreeMemory.argtypes = [c_void_p] WlanScan = wlanapi.WlanScan WlanScan.argtypes = (HANDLE, POINTER(GUID),c_void_p,c_void_p, c_void_p) WlanScan.restype = DWORD def get_interface(): 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) interface = iface.strInterfaceDescription finally: WlanFreeMemory(pInterfaceList) return interface class MAC_BSSID_POWER: """Classe para os valores retirados""" def __init__(self, mac, bssid): self.mac = str(mac) self.bssid = str(bssid) self.valores = [] def addPower(self,power): self.valores.append(int(power)) def getBssid(self): return self.bssid def getPowers(self): return self.valores def getMac(self): return self.mac def get_BSSI(): BSSI_Values={} 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) pAvailableNetworkList2 = pointer(WLAN_BSS_LIST()) ret2 = WlanGetNetworkBssList(ClientHandle, byref(iface.InterfaceGuid), None, None,True,None, byref(pAvailableNetworkList2)) if ret2 != ERROR_SUCCESS: exit(FormatError(ret2)) try: retScan = WlanScan(ClientHandle,byref(iface.InterfaceGuid),None,None,None) if retScan != ERROR_SUCCESS: exit(FormatError(retScan)) avail_net_list2 = pAvailableNetworkList2.contents networks2 = customresize(avail_net_list2.NetworkBSS, avail_net_list2.NumberOfItems) for network in networks2: SSID = str(network.dot11Ssid.SSID[:network.dot11Ssid.SSIDLength]) BSSID = ':'.join('%02x' % b for b in network.dot11Bssid).upper() signal_strength = str(network.lRssi) # print "SSID: " + SSID + " BSSID: "+ BSSID+ " SS: "+signal_strength BSSI_Values[BSSID] = [SSID,signal_strength] #print "Total "+str(len(networks2)) #print BSSI_Values finally: WlanFreeMemory(pAvailableNetworkList2) WlanCloseHandle(ClientHandle,None) finally: WlanFreeMemory(pInterfaceList) return BSSI_Values def get_BSSI_times_and_total_seconds(times,seconds): BSSI_to_return = {} for i in range(0,seconds*times): time_to_sleep = float(1.0/times) time.sleep(time_to_sleep) got_bssi_temp = get_BSSI() for bssi in got_bssi_temp: if not BSSI_to_return.get(bssi): BSSI_to_return[bssi] = MAC_BSSID_POWER(bssi,got_bssi_temp[bssi][0]) BSSI_to_return[bssi].addPower( got_bssi_temp[bssi][1] ) #BSSI_to_return[bssi] = [got_bssi_temp[bssi][1]] else: BSSI_to_return[bssi].addPower( got_bssi_temp[bssi][1] ) #BSSI_to_return[bssi].append(got_bssi_temp[bssi][1]) print "Medicao "+str(i)+" de "+str(seconds*times) print BSSI_to_return return BSSI_to_return if __name__ == '__main__': #print get_interface() import time test = get_BSSI() for i in range(0,10): time.sleep(0.5) oldTest = test test = get_BSSI() print "Teste: "+str(i) if oldTest == test: print "IGUAL" else: print "DIFERENTE" print test print "End"
from https://stackoverflow.com/questions/2851233/how-can-i-retrieve-the-signal-strength-of-nearby-wireless-lan-networks-on-window by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 :리스트의 가장 긴 공통 부분 시퀀스의 길이 (0) | 2018.11.18 |
---|---|
[PYTHON] 이미지 크기 조정 웹 서비스 [닫힘] (0) | 2018.11.18 |
[PYTHON] 기능 후에 tkinter를 중지하려면 어떻게합니까? (0) | 2018.11.18 |
[PYTHON] 파이썬에서 XML을 CSV로 (0) | 2018.11.18 |
[PYTHON] 어떻게 프록시를 통해 POP 또는 IMAP을 통해 이메일을 가져올 수 있습니까? (0) | 2018.11.18 |