• WlanGetAvailableNetworkList


    原文msdn链接地址:https://docs.microsoft.com/zh-cn/windows/desktop/api/wlanapi/nf-wlanapi-wlangetavailablenetworklist

      1 #ifndef UNICODE
      2 #define UNICODE
      3 #endif
      4 
      5 #include <windows.h>
      6 #include <wlanapi.h>
      7 #include <objbase.h>
      8 #include <wtypes.h>
      9 
     10 #include <stdio.h>
     11 #include <stdlib.h>
     12 
     13 // Need to link with Wlanapi.lib and Ole32.lib
     14 #pragma comment(lib, "wlanapi.lib")
     15 #pragma comment(lib, "ole32.lib")
     16 
     17 
     18 int wmain()
     19 {
     20 
     21     // Declare and initialize variables.
     22 
     23     HANDLE hClient = NULL;
     24     DWORD dwMaxClient = 2;      //    
     25     DWORD dwCurVersion = 0;
     26     DWORD dwResult = 0;
     27     DWORD dwRetVal = 0;
     28     int iRet = 0;
     29     
     30     WCHAR GuidString[39] = {0};
     31 
     32     unsigned int i, j, k;
     33 
     34     /* variables used for WlanEnumInterfaces  */
     35 
     36     PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
     37     PWLAN_INTERFACE_INFO pIfInfo = NULL;
     38 
     39     PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;
     40     PWLAN_AVAILABLE_NETWORK pBssEntry = NULL;
     41     
     42     int iRSSI = 0;
     43 
     44     dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
     45     if (dwResult != ERROR_SUCCESS) {
     46         wprintf(L"WlanOpenHandle failed with error: %u
    ", dwResult);
     47         return 1;
     48         // You can use FormatMessage here to find out why the function failed
     49     }
     50 
     51     dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
     52     if (dwResult != ERROR_SUCCESS) {
     53         wprintf(L"WlanEnumInterfaces failed with error: %u
    ", dwResult);
     54         return 1;
     55         // You can use FormatMessage here to find out why the function failed
     56     } else {
     57         wprintf(L"Num Entries: %lu
    ", pIfList->dwNumberOfItems);
     58         wprintf(L"Current Index: %lu
    ", pIfList->dwIndex);
     59         for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {
     60             pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
     61             wprintf(L"  Interface Index[%u]:	 %lu
    ", i, i);
     62             iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 
     63                 sizeof(GuidString)/sizeof(*GuidString)); 
     64             // For c rather than C++ source code, the above line needs to be
     65             // iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 
     66             //     sizeof(GuidString)/sizeof(*GuidString)); 
     67             if (iRet == 0)
     68                 wprintf(L"StringFromGUID2 failed
    ");
     69             else {
     70                 wprintf(L"  InterfaceGUID[%d]: %ws
    ",i, GuidString);
     71             }    
     72             wprintf(L"  Interface Description[%d]: %ws", i, 
     73                 pIfInfo->strInterfaceDescription);
     74             wprintf(L"
    ");
     75             wprintf(L"  Interface State[%d]:	 ", i);
     76             switch (pIfInfo->isState) {
     77             case wlan_interface_state_not_ready:
     78                 wprintf(L"Not ready
    ");
     79                 break;
     80             case wlan_interface_state_connected:
     81                 wprintf(L"Connected
    ");
     82                 break;
     83             case wlan_interface_state_ad_hoc_network_formed:
     84                 wprintf(L"First node in a ad hoc network
    ");
     85                 break;
     86             case wlan_interface_state_disconnecting:
     87                 wprintf(L"Disconnecting
    ");
     88                 break;
     89             case wlan_interface_state_disconnected:
     90                 wprintf(L"Not connected
    ");
     91                 break;
     92             case wlan_interface_state_associating:
     93                 wprintf(L"Attempting to associate with a network
    ");
     94                 break;
     95             case wlan_interface_state_discovering:
     96                 wprintf(L"Auto configuration is discovering settings for the network
    ");
     97                 break;
     98             case wlan_interface_state_authenticating:
     99                 wprintf(L"In process of authenticating
    ");
    100                 break;
    101             default:
    102                 wprintf(L"Unknown state %ld
    ", pIfInfo->isState);
    103                 break;
    104             }
    105             wprintf(L"
    ");
    106 
    107             dwResult = WlanGetAvailableNetworkList(hClient,
    108                                              &pIfInfo->InterfaceGuid,
    109                                              0, 
    110                                              NULL, 
    111                                              &pBssList);
    112 
    113             if (dwResult != ERROR_SUCCESS) {
    114                 wprintf(L"WlanGetAvailableNetworkList failed with error: %u
    ",
    115                         dwResult);
    116                 dwRetVal = 1;
    117                 // You can use FormatMessage to find out why the function failed
    118             } else {
    119                 wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface
    ");
    120 
    121                 wprintf(L"  Num Entries: %lu
    
    ", pBssList->dwNumberOfItems);
    122 
    123                 for (j = 0; j < pBssList->dwNumberOfItems; j++) {
    124                     pBssEntry =
    125                         (WLAN_AVAILABLE_NETWORK *) & pBssList->Network[j];
    126 
    127                     wprintf(L"  Profile Name[%u]:  %ws
    ", j, pBssEntry->strProfileName);
    128                     
    129                     wprintf(L"  SSID[%u]:		 ", j);
    130                     if (pBssEntry->dot11Ssid.uSSIDLength == 0)
    131                         wprintf(L"
    ");
    132                     else {   
    133                         for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++) {
    134                             wprintf(L"%c", (int) pBssEntry->dot11Ssid.ucSSID[k]);
    135                         }
    136                         wprintf(L"
    ");
    137                     }
    138                         
    139                     wprintf(L"  BSS Network type[%u]:	 ", j);
    140                     switch (pBssEntry->dot11BssType) {
    141                     case dot11_BSS_type_infrastructure   :
    142                         wprintf(L"Infrastructure (%u)
    ", pBssEntry->dot11BssType);
    143                         break;
    144                     case dot11_BSS_type_independent:
    145                         wprintf(L"Infrastructure (%u)
    ", pBssEntry->dot11BssType);
    146                         break;
    147                     default:
    148                         wprintf(L"Other (%lu)
    ", pBssEntry->dot11BssType);
    149                         break;
    150                     }
    151                                 
    152                     wprintf(L"  Number of BSSIDs[%u]:	 %u
    ", j, pBssEntry->uNumberOfBssids);
    153 
    154                     wprintf(L"  Connectable[%u]:	 ", j);
    155                     if (pBssEntry->bNetworkConnectable)
    156                         wprintf(L"Yes
    ");
    157                     else {
    158                         wprintf(L"No
    ");
    159                         wprintf(L"  Not connectable WLAN_REASON_CODE value[%u]:	 %u
    ", j, 
    160                             pBssEntry->wlanNotConnectableReason);
    161                     }        
    162 
    163                     wprintf(L"  Number of PHY types supported[%u]:	 %u
    ", j, pBssEntry->uNumberOfPhyTypes);
    164 
    165                     if (pBssEntry->wlanSignalQuality == 0)
    166                         iRSSI = -100;
    167                     else if (pBssEntry->wlanSignalQuality == 100)   
    168                         iRSSI = -50;
    169                     else
    170                         iRSSI = -100 + (pBssEntry->wlanSignalQuality/2);    
    171                         
    172                     wprintf(L"  Signal Quality[%u]:	 %u (RSSI: %i dBm)
    ", j, 
    173                         pBssEntry->wlanSignalQuality, iRSSI);
    174 
    175                     wprintf(L"  Security Enabled[%u]:	 ", j);
    176                     if (pBssEntry->bSecurityEnabled)
    177                         wprintf(L"Yes
    ");
    178                     else
    179                         wprintf(L"No
    ");
    180                         
    181                     wprintf(L"  Default AuthAlgorithm[%u]: ", j);
    182                     switch (pBssEntry->dot11DefaultAuthAlgorithm) {
    183                     case DOT11_AUTH_ALGO_80211_OPEN:
    184                         wprintf(L"802.11 Open (%u)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    185                         break;
    186                     case DOT11_AUTH_ALGO_80211_SHARED_KEY:
    187                         wprintf(L"802.11 Shared (%u)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    188                         break;
    189                     case DOT11_AUTH_ALGO_WPA:
    190                         wprintf(L"WPA (%u)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    191                         break;
    192                     case DOT11_AUTH_ALGO_WPA_PSK:
    193                         wprintf(L"WPA-PSK (%u)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    194                         break;
    195                     case DOT11_AUTH_ALGO_WPA_NONE:
    196                         wprintf(L"WPA-None (%u)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    197                         break;
    198                     case DOT11_AUTH_ALGO_RSNA:
    199                         wprintf(L"RSNA (%u)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    200                         break;
    201                     case DOT11_AUTH_ALGO_RSNA_PSK:
    202                         wprintf(L"RSNA with PSK(%u)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    203                         break;
    204                     default:
    205                         wprintf(L"Other (%lu)
    ", pBssEntry->dot11DefaultAuthAlgorithm);
    206                         break;
    207                     }
    208                         
    209                     wprintf(L"  Default CipherAlgorithm[%u]: ", j);
    210                     switch (pBssEntry->dot11DefaultCipherAlgorithm) {
    211                     case DOT11_CIPHER_ALGO_NONE:
    212                         wprintf(L"None (0x%x)
    ", pBssEntry->dot11DefaultCipherAlgorithm);
    213                         break;
    214                     case DOT11_CIPHER_ALGO_WEP40:
    215                         wprintf(L"WEP-40 (0x%x)
    ", pBssEntry->dot11DefaultCipherAlgorithm);
    216                         break;
    217                     case DOT11_CIPHER_ALGO_TKIP:
    218                         wprintf(L"TKIP (0x%x)
    ", pBssEntry->dot11DefaultCipherAlgorithm);
    219                         break;
    220                     case DOT11_CIPHER_ALGO_CCMP:
    221                         wprintf(L"CCMP (0x%x)
    ", pBssEntry->dot11DefaultCipherAlgorithm);
    222                         break;
    223                     case DOT11_CIPHER_ALGO_WEP104:
    224                         wprintf(L"WEP-104 (0x%x)
    ", pBssEntry->dot11DefaultCipherAlgorithm);
    225                         break;
    226                     case DOT11_CIPHER_ALGO_WEP:
    227                         wprintf(L"WEP (0x%x)
    ", pBssEntry->dot11DefaultCipherAlgorithm);
    228                         break;
    229                     default:
    230                         wprintf(L"Other (0x%x)
    ", pBssEntry->dot11DefaultCipherAlgorithm);
    231                         break;
    232                     }
    233 
    234                     wprintf(L"  Flags[%u]:	 0x%x", j, pBssEntry->dwFlags);
    235                     if (pBssEntry->dwFlags) {
    236                         if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
    237                             wprintf(L" - Currently connected");
    238                         if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
    239                             wprintf(L" - Has profile");
    240                     }   
    241                     wprintf(L"
    ");
    242                     
    243                     wprintf(L"
    ");
    244                 }
    245             }
    246         }
    247 
    248     }
    249     if (pBssList != NULL) {
    250         WlanFreeMemory(pBssList);
    251         pBssList = NULL;
    252     }
    253 
    254     if (pIfList != NULL) {
    255         WlanFreeMemory(pIfList);
    256         pIfList = NULL;
    257     }
    258 
    259     return dwRetVal;
    260 }
  • 相关阅读:
    想用Nginx代理一切?行!
    [SuProxy]Ngnix+Lua 实现SSH2,LDAP,ORACLE,SQLSERVER等TCP/IP协议分析,劫持,代理,会话及负载
    hive分区表详细介绍
    hive 中自定义UDF函数和自定义UDTF函数
    yarn工作原理
    HDFS小文件问题
    HDFS读写流程
    利用 canvas 实现签名效果
    idea里面自带的翻译插件
    idea的set,get插件
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/10444422.html
Copyright © 2020-2023  润新知