purebasic.info

PureBasic forum
Текущее время: Пн авг 20, 2018 2:36 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: вывод MAC адреса WiFi
СообщениеДобавлено: Чт окт 13, 2016 7:39 am 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Пн авг 15, 2016 4:12 pm
Сообщений: 24
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Здравствуйте. Необходимо во время транспортировки планшета записывать данные о WiFi вышках, а именно MAC адрес и уровень сигнала. Собственно и вопрос. Как получить список WiFi сетей которые ловит на данный момент планшет, а так-же уровень сигнала. Будь эта Wifi сеть защищенная или нет. Заранее огромное спасибо :)

P.S Планшет - обычный Windows компьютер на полноценной операционной сети Windows 10, по этому сам девайс роли не играет :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Чт окт 13, 2016 8:08 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
GreenBytes писал(а):
Здравствуйте. Необходимо во время транспортировки планшета записывать данные о WiFi вышках, а именно MAC адрес и уровень сигнала. Собственно и вопрос. Как получить список WiFi сетей которые ловит на данный момент планшет, а так-же уровень сигнала. Будь эта Wifi сеть защищенная или нет. Заранее огромное спасибо :)

P.S Планшет - обычный Windows компьютер на полноценной операционной сети Windows 10, по этому сам девайс роли не играет :)

https://habrahabr.ru/post/76888/
Оказывается в выньде есть целый набор функций для работы с WI-FI

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Чт окт 13, 2016 8:34 am 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Пн авг 15, 2016 4:12 pm
Сообщений: 24
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
я уже разбираюсь с этой библиотекой.

накопал какой-то код в сети, НО MAC адрес он не выводит... Есть какие советы ? Уровень шкалы выводит хорошо.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
 
 
#DOT11_SSID_MAX_LENGTH = 32
#WLANAPI_USE_LIB = 0
 
;- ENUMS
Enumeration ;DOT11_BSS_TYPE
  #dot11_BSS_type_infrastructure = 1
  #dot11_BSS_type_independent = 2
  #dot11_BSS_type_any = 3
EndEnumeration
 
Enumeration ;DOT11_AUTH_ALGORITHM
  #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 ; used in NatSTA only
  #DOT11_AUTH_ALGO_RSNA = 6
  #DOT11_AUTH_ALGO_RSNA_PSK = 7
  #DOT11_AUTH_ALGO_IHV_START = $80000000
  #DOT11_AUTH_ALGO_IHV_END = $ffffffff
EndEnumeration
 
Enumeration ;DOT11_CIPHER_ALGORITHM
  #DOT11_CIPHER_ALGO_NONE = $00
  #DOT11_CIPHER_ALGO_WEP40 = $01
  #DOT11_CIPHER_ALGO_TKIP = $02
  #DOT11_CIPHER_ALGO_CCMP = $04
  #DOT11_CIPHER_ALGO_WEP104 = $05
  #DOT11_CIPHER_ALGO_WPA_USE_GROUP = $100
  #DOT11_CIPHER_ALGO_RSN_USE_GROUP = $100
  #DOT11_CIPHER_ALGO_WEP = $101
  #DOT11_CIPHER_ALGO_IHV_START = $80000000
  #DOT11_CIPHER_ALGO_IHV_END = $ffffffff
EndEnumeration
 
;- STRUCTURES
Structure DOT11_SSID
  uSSIDLength.l
  ucSSID.a[#DOT11_SSID_MAX_LENGTH]
EndStructure
 
Enumeration ;DOT11_PHY_TYPE
  #dot11_phy_type_unknown = 0
  #dot11_phy_type_any = #dot11_phy_type_unknown
  #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 = $80000000
  #dot11_phy_type_IHV_end = $ffffffff
EndEnumeration
 
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
  #WLAN_LIB_PATH = "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\wlanapi.lib"
CompilerElse
  #WLAN_LIB_PATH = "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\wlanapi.lib"
CompilerEndIf
 
#WLAN_MAX_NAME_LENGTH = 256
 
;-ENUMS
Enumeration ;WLAN_INTERFACE_STATE
  #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
EndEnumeration
 
Structure WLAN_INTERFACE_INFO
  InterfaceGuid.GUID
  strInterfaceDescription.u[#WLAN_MAX_NAME_LENGTH]
  isState.l
EndStructure
 
Structure WLAN_INTERFACE_INFO_LIST
  dwNumberOfItems.l
  dwIndex.l
  InterfaceInfo.WLAN_INTERFACE_INFO[1]
EndStructure
 
#WLAN_MAX_PHY_TYPE_NUMBER = 8
 
Structure WLAN_AVAILABLE_NETWORK
  strProfileName.u[#WLAN_MAX_NAME_LENGTH]
  dot11Ssid.DOT11_SSID
  dot11BssType.l
  uNumberOfBssids.l
  bNetworkConnectable.l
  wlanNotConnectableReason.l
  uNumberOfPhyTypes.l
  dot11PhyTypes.l[#WLAN_MAX_PHY_TYPE_NUMBER]
  ; bMorePhyTypes is set To TRUE If the PHY types For the network
  ; exceeds WLAN_MAX_PHY_TYPE_NUMBER.
  ; In this Case, uNumerOfPhyTypes is WLAN_MAX_PHY_TYPE_NUMBER And the
  ; first WLAN_MAX_PHY_TYPE_NUMBER PHY types are returned.
  bMorePhyTypes.l
  wlanSignalQuality.l
  bSecurityEnabled.l
  dot11DefaultAuthAlgorithm.l
  dot11DefaultCipherAlgorithm.l
  dwFlags.l
  dwReserved.l
EndStructure
 
Structure WLAN_AVAILABLE_NETWORK_LIST
  dwNumberOfItems.l
  dwIndex.l
  Network.WLAN_AVAILABLE_NETWORK[1]
EndStructure
 
 
CompilerIf #WLANAPI_USE_LIB = 1
 
Import #WLAN_LIB_PATH
  WlanOpenHandle(dwClientVersion.i, *pReserved, *pdwNegotiatedVersion, *phClientHandle)
  WlanCloseHandle(hClientHandle.i, *pReserved)
 
  WlanEnumInterfaces(hClientHandle.i, *pReserved, *ppInterfaceList)
  WlanFreeMemory(*pMemory)
 
  WlanGetAvailableNetworkList(hClientHandle.i, *pInterfaceGuid, dwFlags.i, *pReserved, *ppAvailableNetworkList)
EndImport
 
CompilerElse
 
Prototype PROTO_WlanOpenHandle(dwClientVersion.i, *pReserved, *pdwNegotiatedVersion, *phClientHandle)
Prototype PROTO_WlanCloseHandle(hClientHandle.i, *pReserved)
Prototype PROTO_WlanEnumInterfaces(hClientHandle.i, *pReserved, *ppInterfaceList)
Prototype PROTO_WlanFreeMemory(*pMemory)
Prototype PROTO_WlanGetAvailableNetworkList(hClientHandle.i, *pInterfaceGuid, dwFlags.i, *pReserved, *ppAvailableNetworkList)
 
Global WlanOpenHandle.PROTO_WlanOpenHandle
Global WlanCloseHandle.PROTO_WlanCloseHandle
Global WlanEnumInterfaces.PROTO_WlanEnumInterfaces
Global WlanFreeMemory.PROTO_WlanFreeMemory
Global WlanGetAvailableNetworkList.PROTO_WlanGetAvailableNetworkList
 
CompilerEndIf
 
 
Macro IsValidIndex(index, linkedlist)
  (index >= 0 And index < ListSize(linkedlist))
EndMacro
 
Structure WLAN_Adapter
  Interface_GUID.s
  Interface_Description.s
  Interface_State.s
  InterfaceInfo.WLAN_INTERFACE_INFO
EndStructure
 
Global WinVersion.i
Global dwMaxClient.l
 
 
Procedure LoadAdapters(bLoad.b, List Adapters.WLAN_Adapter())
  Protected *pIfList.WLAN_INTERFACE_INFO_LIST
  Protected *pIfInfo.WLAN_INTERFACE_INFO
  Protected dwResult.l, dwCurVersion.i, hClient.i
  Protected Interface_GUID.s, Interface_Desc.s, Interface_State.s
  Protected TmpGUID.s{78}
  Protected iRet.i = 0
 
  dwResult = WlanOpenHandle(dwMaxClient, 0, @dwCurVersion, @hClient)
 
  If dwResult = #ERROR_SUCCESS
    dwResult = WlanEnumInterfaces(hClient, 0, @*pIfList)
   
    If dwResult = #ERROR_SUCCESS
 
      For i.i = 0 To *pIfList\dwNumberOfItems-1
        DisableDebugger
        *pIfInfo = *pIfList\InterfaceInfo[i]
        EnableDebugger
 
        If StringFromGUID2_(*pIfInfo\InterfaceGuid, @TmpGUID, 39)
          CompilerIf #PB_Compiler_Unicode
            Interface_GUID = TmpGUID
          CompilerElse
            Interface_GUID = PeekS(@TmpGUID, -1, #PB_Unicode)
          CompilerEndIf
        EndIf
       
        Interface_Desc.s = PeekS(@*pIfInfo\strInterfaceDescription, -1, #PB_Unicode)
       
        Select *pIfInfo\isState
          Case #wlan_interface_state_not_ready
            Interface_State = "Not ready"
          Case #wlan_interface_state_connected
            Interface_State = "Connected"
          Case #wlan_interface_state_ad_hoc_network_formed
            Interface_State = "First node in a ad hoc network"
          Case #wlan_interface_state_disconnecting
            Interface_State = "Disconnecting"
          Case #wlan_interface_state_disconnected
            Interface_State = "Not connected"
          Case #wlan_interface_state_associating
            Interface_State = "Attempting to associate with a network"
          Case #wlan_interface_state_discovering
            Interface_State = "Auto configuration is discovering settings for the network"
          Case #wlan_interface_state_authenticating
            Interface_State = "In process of authenticating"
          Default
            Interface_State = "Unknown state "+Str(*pIfInfo\isState)
        EndSelect
       
        If bLoad = #True
          AddElement(Adapters())
          Adapters()\Interface_GUID = Interface_GUID
          Adapters()\Interface_Description = Interface_Desc
          Adapters()\Interface_State = Interface_State
          CopyMemory(*pIfInfo, Adapters()\InterfaceInfo, SizeOf(WLAN_INTERFACE_INFO))
        EndIf
       
        PrintN("[" + Str(i) + "] " + Interface_Desc)
        PrintN(#TAB$+"Interface GUID: " + Interface_GUID)
        PrintN(#TAB$+"Interface State: " + Interface_State)
        PrintN("")
        iRet+1
      Next
     
      If *pIfList
        WlanFreeMemory(*pIfList)
      EndIf
    Else
      PrintN("Error - WlanEnumInterfaces failed With error: "+Str(dwResult))
    EndIf
   
    WlanCloseHandle(hClient,0)
  Else
    PrintN("Error - WlanOpenHandle failed With error: "+Str(dwResult))
  EndIf
 
  ProcedureReturn iRet
EndProcedure
 
Procedure.s FormatSecurity(AuthAlgorithm.l, CipherAlgorithm.l)
  Protected sResult.s
 
 
  If AuthAlgorithm = #DOT11_AUTH_ALGO_80211_OPEN And CipherAlgorithm = #DOT11_CIPHER_ALGO_NONE
    sResult = "Open"
  ElseIf AuthAlgorithm = #DOT11_AUTH_ALGO_RSNA_PSK And CipherAlgorithm = #DOT11_CIPHER_ALGO_CCMP
    sResult = "WPA2-Personal"
  ElseIf AuthAlgorithm = #DOT11_AUTH_ALGO_RSNA And CipherAlgorithm = #DOT11_CIPHER_ALGO_CCMP
    sResult = "WPA2"
  ElseIf AuthAlgorithm = #DOT11_AUTH_ALGO_WPA And CipherAlgorithm = #DOT11_CIPHER_ALGO_TKIP
    sResult = "WPA"
  ElseIf CipherAlgorithm = #DOT11_CIPHER_ALGO_WEP40
    sResult = "WEP-40"
  ElseIf CipherAlgorithm = #DOT11_CIPHER_ALGO_WEP104
    sResult = "WEP-104"
  ElseIf CipherAlgorithm = #DOT11_CIPHER_ALGO_WEP
    sResult = "WEP"
  Else
    sResult = "Other"
  EndIf
 
  ProcedureReturn sResult
EndProcedure
 
Procedure ListNetworks(*Adapter.WLAN_Adapter)
  Protected *pBssList.WLAN_AVAILABLE_NETWORK_LIST
  Protected *pBssEntry.WLAN_AVAILABLE_NETWORK
  Protected dwResult.l, dwCurVersion.i, hClient.i
  Protected SSID.s, NetType.s, Connectable.s, SigQuality.s, SecurityOn.s, Security.s
 
  dwResult = WlanOpenHandle(dwMaxClient, 0, @dwCurVersion, @hClient)
 
  If dwResult = #ERROR_SUCCESS
    dwResult = WlanGetAvailableNetworkList(hClient, *Adapter\InterfaceInfo\InterfaceGuid,0,0, @*pBssList)
   
    If dwResult = #ERROR_SUCCESS
      PrintN("")
      PrintN(Str(*pBssList\dwNumberOfItems) +" Networks found") : PrintN("")
     
      For i.i = 0 To *pBssList\dwNumberOfItems-1
        DisableDebugger
        *pBssEntry = @*pBssList\Network[i]
        EnableDebugger
       
        SSID = PeekS(@*pBssEntry\dot11Ssid\ucSSID, *pBssEntry\dot11Ssid\uSSIDLength, #PB_Ascii)
       
        Select *pBssEntry\dot11BssType
          Case #dot11_BSS_type_infrastructure
            NetType = "Network type: Infrastructure"
          Case #dot11_BSS_type_independent
            NetType = "Network type: Independent"
          Default
            NetType = "Network type: Other ("+Str(*pBssEntry\dot11BssType)+")"
        EndSelect
       
        If *pBssEntry\bNetworkConnectable
          Connectable = "Yes"
        Else
          Connectable = "Not connectable WLAN_REASON_CODE value: "+Str(*pBssEntry\wlanNotConnectableReason)
        EndIf
       
        If *pBssEntry\wlanSignalQuality = 0
          iRSSI = -100
        ElseIf *pBssEntry\wlanSignalQuality = 100
          iRSSI = -50
        Else
          iRSSI = -100 + (*pBssEntry\wlanSignalQuality/2)
        EndIf
       
        SigQuality = Str(*pBssEntry\wlanSignalQuality)+"% (RSSI: "+Str(iRSSI)+" dBm)"
       
        If *pBssEntry\bSecurityEnabled
          SecurityOn = "Yes"
        Else
          SecurityOn = "No"
        EndIf
       
        Security = FormatSecurity(*pBssEntry\dot11DefaultAuthAlgorithm,*pBssEntry\dot11DefaultCipherAlgorithm)
 
        PrintN("Index: " + #TAB$+#TAB$+#TAB$+"["+Str(i)+"]")
        PrintN("SSID: " + #TAB$+#TAB$+#TAB$+SSID+#TAB$+Str(*pBssEntry\bMorePhyTypes))
        PrintN("Connectable: "+#TAB$+#TAB$+Connectable)
        PrintN("Signal Quality: "+#TAB$+SigQuality)
        PrintN("Security Enabled: "+#TAB$+SecurityOn)
        PrintN("Security: "+#TAB$+#TAB$+Security)
        PrintN("")
      Next i
     
      If *pBssList
        WlanFreeMemory(*pBssList)
      EndIf
     
    Else
      PrintN("WlanGetAvailableNetworkList failed with error: "+Str(dwResult))
    EndIf
   
    WlanCloseHandle(hClient,0)
  Else
    PrintN("Error - WlanOpenHandle failed With error: "+Str(dwResult))
  EndIf
EndProcedure
 
Procedure ShowMenu()
  PrintN("[1] - List Wireless Adapters")
  PrintN("[2] - Show Wireless Networks")
  PrintN("[3] - Exit") : PrintN("")
 
EndProcedure
 
Procedure Load_WlanApi()
  Protected hLib.i
 
  hLib = OpenLibrary(#PB_Any, "Wlanapi.dll")
  If hLib
    WlanOpenHandle = GetFunction(hLib, "WlanOpenHandle")
    WlanCloseHandle = GetFunction(hLib, "WlanCloseHandle")
    WlanEnumInterfaces = GetFunction(hLib, "WlanEnumInterfaces")
    WlanFreeMemory = GetFunction(hLib, "WlanFreeMemory")
    WlanGetAvailableNetworkList = GetFunction(hLib, "WlanGetAvailableNetworkList")
  Else
    MessageRequester("Eror", "Failed to load Wlanapi.dll!", #MB_ICONERROR)
    End
  EndIf
 
EndProcedure
 
;- ENTRY POINT
If OpenConsole()
  CompilerIf #WLANAPI_USE_LIB = 0
    Load_WlanApi()
  CompilerEndIf
 
  NewList Adps.WLAN_Adapter()
 
  WinVersion = OSVersion()
 
  If WinVersion >= #PB_OS_Windows_XP And WinVersion < #PB_OS_Windows_Vista
    dwMaxClient = 1
  ElseIf WinVersion >= #PB_OS_Windows_Vista
    dwMaxClient = 2
  EndIf
 
  PrintN(" --- Scanning Wireless Networks in PureBasic --- ")
  PrintN("")
  ShowMenu()
  Print("Choose the option: ")
 
  iOption = Val(Input())
  PrintN("")
 
  If iOption = 1
    If Not LoadAdapters(#False, Adps())
      PrintN("No Wireless Adapters found.")
    EndIf
  ElseIf iOption = 2
    LoadAdapters(#True, Adps())
   
    If ListSize(Adps())
      Print("Choose the network adapter (index): ")
     
      iAdapter = Val(Input())
     
      ;Check if it's a valid index
      If IsValidIndex(iAdapter, Adps())
        SelectElement(Adps(), iAdapter)
        ListNetworks(@Adps())
      Else
        PrintN("Error - Invalid Adapter ("+Str(iAdapter)+")")
      EndIf
    Else
      PrintN("No Wireless Adapters found.")
    EndIf
   
  ElseIf iOption = 3
    End
  Else
    PrintN("Error - Invalid Option")
  EndIf
 
  PrintN("Press enter to exit...")
  Input()
EndIf
 



У меня есть установленная программа с маркета Windows 10 под названием: WiFi Analyzer - так вот она не то что MAC адреса получает, а также показывает какой канал использует WiFi сеть и прочие углубленную информацию :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Чт окт 13, 2016 9:13 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
GreenBytes писал(а):
я уже разбираюсь с этой библиотекой.

накопал какой-то код в сети, НО MAC адрес он не выводит... Есть какие советы ? Уровень шкалы выводит хорошо.

GetAdaptersInfo_()

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Чт окт 13, 2016 9:19 am 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Пн авг 15, 2016 4:12 pm
Сообщений: 24
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Цитата:
Функция GetNetworkParams позволяет узнать сетевые настройки сетевой карты локального компьютера.

А мне нужно получить адрес всех доступных WiFi сетей на девайсе.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Чт окт 13, 2016 6:52 pm 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Пн авг 15, 2016 4:12 pm
Сообщений: 24
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Если кому нужно будет
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
Prototype WlanOpenHandle(dwClientVersion,pReserved,pdwNegotiatedVersion, phClientHandle) 
Prototype WlanCloseHandle(hClientHandle,pReserved)
Prototype WlanEnumInterfaces(hClientHandle,pReserved,ppInterfaceList)
Prototype WlanFreeMemory(pMemory)
Prototype WlanQueryInterface(hClientHandle, pInterfaceGuid, OpCode, pReserved, pdwDataSize, ppData, pWlanOpcodeValueType)
Prototype WlanHostedNetworkQueryStatus(hClientHandle,ppWlanHostedNetworkStatus,pvReserved);
Prototype WlanGetAvailableNetworkList(hClientHandle, pInterfaceGuid, dwFlags, pReserved, ppAvailableNetworkList)
Prototype WlanScan(hClientHandle, pInterfaceGuid, pDot11Ssid, pIeData, pReserved)
Prototype WlanGetNetworkBssList(hClientHandle, pInterfaceGuid,pDot11Ssid, dot11BssType, bSecurityEnabled, pReserved, ppWlanBssList)
Prototype WlanReasonCodeToString(dwReasonCode, dwBufferSize, pStringBuffer, pReserved)
 
Global WlanOpenHandle.WlanOpenHandle
Global WlanCloseHandle.WlanCloseHandle
Global WlanEnumInterfaces.WlanEnumInterfaces
Global WlanFreeMemory.WlanFreeMemory
Global WlanQueryInterface.WlanQueryInterface
Global WlanHostedNetworkQueryStatus.WlanHostedNetworkQueryStatus
Global WlanGetAvailableNetworkList.WlanGetAvailableNetworkList
Global WlanScan.WlanScan
Global WlanGetNetworkBssList.WlanGetNetworkBssList
Global WlanReasonCodeToString.WlanReasonCodeToString
 
#WLAN_MAX_NAME_LENGTH = 256
 
Structure WLAN_INTERFACE_INFO
  InterfaceGuid.GUID
  strInterfaceDescription.u[#WLAN_MAX_NAME_LENGTH]
  isState.l
EndStructure
 
Structure WLAN_INTERFACE_INFO_LIST
  dwNumberOfItems.l
  dwIndex.l
  InterfaceInfo.WLAN_INTERFACE_INFO[1]
EndStructure
 
Structure _WLAN_BSS_LIST; {
  dwTotalSize.l;DWORD          dwTotalSize;
  dwNumberOfItems.l;DWORD          dwNumberOfItems;
  ;Array wlanBssEntries.WLAN_BSS_ENTRY(1);WLAN_BSS_ENTRY wlanBssEntries[1];
EndStructure;} WLAN_BSS_LIST, *PWLAN_BSS_LIST;
 
#DOT11_SSID_MAX_LENGTH  = 32
 
Structure  DOT11_SSID
  uSSIDLength.l
  ucSSID.b[#DOT11_SSID_MAX_LENGTH]
EndStructure
 
#DOT11_RATE_SET_MAX_LENGTH = 126
 
;#DOT11_SSID_MAX_LENGTH  = 32
Structure WLAN_RATE_SET; {
  uRateSetLength.l;ULONG  uRateSetLength;
  usRateSet.l[#DOT11_RATE_SET_MAX_LENGTH];USHORT usRateSet[DOT11_RATE_SET_MAX_LENGTH];
EndStructure;} WLAN_RATE_SET, *PWLAN_RATE_SET;
 
Structure WLAN_BSS_ENTRY; {
  dot11Ssid.DOT11_SSID;        dot11Ssid;
  uPhyId.l;ULONG             uPhyId;
  dot11Bssid.b[6]
  dot11BssType.l;DOT11_BSS_TYPE    dot11BssType;
  dot11BssPhyType.l;DOT11_PHY_TYPE    dot11BssPhyType;
  lRssi.l;LONG              lRssi;
  uLinkQuality.l;ULONG             uLinkQuality;
  bInRegDomain.l;BOOLEAN           bInRegDomain;
  usBeaconPeriod.l;USHORT            usBeaconPeriod;
  ullTimestamp.q;ULONGLONG         ullTimestamp;
  ullHostTimestamp.q;ULONGLONG         ullHostTimestamp;
  usCapabilityInformation.l;USHORT            usCapabilityInformation;
  ulChCenterFrequency.l;ULONG             ulChCenterFrequency;
  wlanRateSet.WLAN_RATE_SET;_WLAN_RATE_SET   wlanRateSet;
  ulIeOffset.l;ULONG             ulIeOffset;
  ulIeSize.l;ULONG             ulIeSize;
EndStructure;} WLAN_BSS_ENTRY, *PWLAN_BSS_ENTRY;
 
Procedure.s MacToString(*membuffer)
  Protected MAC.s=""
  Protected i
  For i=0 To 5
    MAC+RSet(Hex(PeekB(*membuffer+i)&$FF),2,"0")
    If i<5
      MAC+"-"
    EndIf
  Next
  ProcedureReturn MAC
 
EndProcedure
 
Procedure.s GetGUID(guid)
  Protected  lpsz.s{78}
  ProcedureReturn PeekS(@lpsz, StringFromGUID2_(guid, @lpsz, 78), #PB_Unicode)
EndProcedure
 
Procedure LoadWiFiInterface()
  Protected Result = OpenLibrary(#PB_Any, "wlanapi.dll")
 
  If Result
   
    WlanOpenHandle                = GetFunction(Result, "WlanOpenHandle")
    WlanCloseHandle               = GetFunction(Result, "WlanCloseHandle")
    WlanEnumInterfaces            = GetFunction(Result, "WlanEnumInterfaces")
    WlanFreeMemory                = GetFunction(Result, "WlanFreeMemory")
    WlanQueryInterface            = GetFunction(Result, "WlanQueryInterface")
    WlanHostedNetworkQueryStatus  = GetFunction(Result, "WlanHostedNetworkQueryStatus")
    WlanGetAvailableNetworkList   = GetFunction(Result, "WlanGetAvailableNetworkList")
    WlanScan                      = GetFunction(Result, "WlanScan")
    WlanGetNetworkBssList         = GetFunction(Result, "WlanGetNetworkBssList")
    WlanReasonCodeToString        = GetFunction(Result, "WlanReasonCodeToString")
   
    If  WlanOpenHandle = 0 Or  WlanCloseHandle = 0 Or WlanEnumInterfaces = 0 Or WlanFreeMemory = 0 Or WlanQueryInterface = 0 Or WlanHostedNetworkQueryStatus = 0 Or WlanGetAvailableNetworkList = 0 Or  WlanScan = 0 Or WlanGetNetworkBssList = 0 Or WlanReasonCodeToString = 0
      CloseLibrary(Result)
      Result = 0
    EndIf      
  EndIf
 
  Protected *pIfList.WLAN_INTERFACE_INFO_LIST
  Protected *pIfInfo.WLAN_INTERFACE_INFO
  Protected dwResult.l, dwCurVersion.i, hClient.i
  Protected allocate_m.l = AllocateMemory(SizeOf(GUID) + 4)
 
  dwResult = WlanOpenHandle(2, 0, @dwCurVersion, @hClient)
 
  If dwResult = #ERROR_SUCCESS
    dwResult = WlanEnumInterfaces(hClient, 0, @*pIfList)
   
    If dwResult = #ERROR_SUCCESS
     
      For i.i = 0 To *pIfList\dwNumberOfItems-1
       
        *pIfInfo = *pIfList\InterfaceInfo[i]
 
        CopyMemory(@*pIfInfo\InterfaceGuid, allocate_m, SizeOf(GUID))
 
      Next
     
      If *pIfList
       
        WlanFreeMemory(*pIfList)
       
      EndIf
     
    EndIf
 
    CopyMemory(@hClient, allocate_m + SizeOf(GUID), 4)
   
  EndIf
  ProcedureReturn allocate_m
EndProcedure
 
Procedure WiFiCount(iAdapter)
  Protected ppWlanBssList._WLAN_BSS_LIST
  Protected ppw.l=0, NEntry.l
  Protected nbss.WLAN_BSS_ENTRY
  Protected InterfaceGuid.GUID
  Protected SessinoID.l = PeekL(iAdapter + SizeOf(GUID))
  CopyMemory(iAdapter, @InterfaceGuid, SizeOf(GUID))
  Protected lRet.l = WlanGetNetworkBssList(SessinoID, InterfaceGuid, #Null, 3, #False, #Null, @ppw)
  CopyMemory(ppw, @ppWlanBssList, SizeOf(_WLAN_BSS_LIST))
  If ppWlanBssList\dwNumberOfItems > 0
    For NEntry = 0 To ppWlanBssList\dwNumberOfItems - 1
      CopyMemory((ppw + SizeOf(_WLAN_BSS_LIST)) + (NEntry * 360), @nbss, 360)
      Debug "Index: " + Str(NEntry)
      Debug "SSID: "+ PeekS(@nbss\dot11Ssid\ucSSID,-1,#PB_Ascii)
      Debug "Mac:  " + MacToString(@nbss\dot11Bssid)
      Debug "dBm:  " + Str(PeekB(@nbss\lRssi+2))
      Debug "------------"
    Next
  EndIf
EndProcedure
 
iAdapter = LoadWiFiInterface()
 
WiFiCount(iAdapter)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Чт окт 13, 2016 9:39 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
GreenBytes писал(а):
Если кому нужно будет

Пригодиться.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Пт окт 14, 2016 7:29 am 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Пн авг 15, 2016 4:12 pm
Сообщений: 24
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Хотя вопрос у меня все -же будет в том что размер структуры WLAN_BSS_ENTRY пурик показывает 610... проверял структуру... при этом у меня конечно же не совпадало смещение памяти.
Код:
1
CopyMemory((ppw + SizeOf(_WLAN_BSS_LIST)) + (NEntry * SizeOf(WLAN_BSS_ENTRY)), @nbss, SizeOf(WLAN_BSS_ENTRY))



по этому мне пришлось открыть сканер памяти в другой программе , забить начальный адрес... и тут я вижу что структура почти в двое меньше. после отсчетов у меня смещение получилось 360 байт, но PureBasic твердил что SizeOf(WLAN_BSS_ENTRY) равно 610 байтам... учитывая что структура полностью по документации https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms706839(v=vs.85).aspx

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
Structure WLAN_BSS_ENTRY; {
  dot11Ssid.DOT11_SSID;        dot11Ssid;
  uPhyId.l;ULONG             uPhyId;
  dot11Bssid.b[6]
  dot11BssType.l;DOT11_BSS_TYPE    dot11BssType;
  dot11BssPhyType.l;DOT11_PHY_TYPE    dot11BssPhyType;
  lRssi.l;LONG              lRssi;
  uLinkQuality.l;ULONG             uLinkQuality;
  bInRegDomain.l;BOOLEAN           bInRegDomain;
  usBeaconPeriod.l;USHORT            usBeaconPeriod;
  ullTimestamp.q;ULONGLONG         ullTimestamp;
  ullHostTimestamp.q;ULONGLONG         ullHostTimestamp;
  usCapabilityInformation.l;USHORT            usCapabilityInformation;
  ulChCenterFrequency.l;ULONG             ulChCenterFrequency;
  wlanRateSet.WLAN_RATE_SET;_WLAN_RATE_SET   wlanRateSet;
  ulIeOffset.l;ULONG             ulIeOffset;
  ulIeSize.l;ULONG             ulIeSize;
EndStructure;} WLAN_BSS_ENTRY, *PWLAN_BSS_ENTRY;
 



структуру писал не я, а нашел в интернете готовые кусочки, я лишь проверил правильность заполнения...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Пт окт 14, 2016 11:30 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11228
Благодарил (а): 4 раз.
Поблагодарили: 425 раз.
GreenBytes писал(а):
у меня смещение получилось 360 байт, но PureBasic твердил что SizeOf(WLAN_BSS_ENTRY) равно 610 байтам
Потому что USHORT это не LONG и похоже что структуру выравнивать нужно.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#DOT11_SSID_MAX_LENGTH  = 32
 
Structure  DOT11_SSID Align #PB_Structure_AlignC
  uSSIDLength.l
  ucSSID.a[#DOT11_SSID_MAX_LENGTH]
EndStructure
 
#DOT11_RATE_SET_MAX_LENGTH = 126
 
;#DOT11_SSID_MAX_LENGTH  = 32
Structure WLAN_RATE_SET Align #PB_Structure_AlignC ; {
  uRateSetLength.l;ULONG  uRateSetLength;
  usRateSet.u[#DOT11_RATE_SET_MAX_LENGTH];USHORT usRateSet[DOT11_RATE_SET_MAX_LENGTH];
EndStructure;} WLAN_RATE_SET, *PWLAN_RATE_SET;
 
Structure WLAN_BSS_ENTRY Align #PB_Structure_AlignC ; {
  dot11Ssid.DOT11_SSID;        dot11Ssid;
  uPhyId.l;ULONG             uPhyId;
  dot11Bssid.b[6]
  dot11BssType.l;DOT11_BSS_TYPE    dot11BssType;
  dot11BssPhyType.l;DOT11_PHY_TYPE    dot11BssPhyType;
  lRssi.l;LONG              lRssi;
  uLinkQuality.l;ULONG             uLinkQuality;
  bInRegDomain.l;BOOLEAN           bInRegDomain;
  usBeaconPeriod.u;USHORT            usBeaconPeriod;
  ullTimestamp.q;ULONGLONG         ullTimestamp;
  ullHostTimestamp.q;ULONGLONG         ullHostTimestamp;
  usCapabilityInformation.u;USHORT            usCapabilityInformation;
  ulChCenterFrequency.l;ULONG             ulChCenterFrequency;
  wlanRateSet.WLAN_RATE_SET;_WLAN_RATE_SET   wlanRateSet;
  ulIeOffset.l;ULONG             ulIeOffset;
  ulIeSize.l;ULONG             ulIeSize;
EndStructure;} WLAN_BSS_ENTRY, *PWLAN_BSS_ENTRY;
 
 
Debug SizeOf(WLAN_BSS_ENTRY)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вывод MAC адреса WiFi
СообщениеДобавлено: Ср май 16, 2018 7:36 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 264
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
Как быть с XP, там WlanGetNetworkBssList не проходит? Поглядываю в сторону DeviceIoControl но как-то смутно :roll:


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB