C ++: Как распечатать dot11Bssid из WLAN_BSS_ENTRY? - PullRequest
0 голосов
/ 23 ноября 2018

У меня проблема с печатью (printf) dot11Bssid (тип DOT11_MAC_ADDRESS ).Адрес содержится в WLAN_BSS_ENTRY , который содержится в коллекции, возвращенной из WlanGetNetworkBssList .

Когда я пытаюсь распечатать его, похоже, что это просто инкрементный счет, а не фактическое значение для BSSID - но я не могу понять, почему.Все остальное печатается как надо.

    if (WlanGetNetworkBssList(hWlan, &guidInterface, NULL, dot11_BSS_type_infrastructure, NULL, NULL, ppWlanBssList) == ERROR_SUCCESS)
    {
        // De-reference seems to be required here to access the object returned from the call.
        PWLAN_BSS_LIST pWLanBssList = (*ppWlanBssList);
        for (unsigned int t = 0; t < pWLanBssList->dwNumberOfItems; t++)
        {
            printf("\nSSID: %s\t", pWLanBssList->wlanBssEntries[t].dot11Ssid.ucSSID);
            printf("\tBSSID: %x:%x:%x:%x:%x:%x\t", pWLanBssList->wlanBssEntries[t].dot11Bssid);
            printf("\tSignal Strength: %d dbm", pWLanBssList->wlanBssEntries[t].lRssi);
        }
    }

Это вывод:

SSID: [REDACTED]  BSSID: 1ef7d580:fffffd7f:c12cdd50:0:0:c12ce248  Signal Strength: -60 dbm
SSID: [REDACTED]  BSSID: 1ef7d6e8:fffffd7f:c12cdd50:0:0:c12ce248  Signal Strength: -80 dbm
SSID: [REDACTED]  BSSID: 1ef7d850:fffffd7f:c12cdd50:0:0:c12ce248  Signal Strength: -79 dbm
SSID: [REDACTED]  BSSID: 1ef7d9b8:fffffd7f:c12cdd50:0:0:c12ce248  Signal Strength: -85 dbm
SSID: [REDACTED]  BSSID: 1ef7db20:fffffd7f:c12cdd50:0:0:c12ce248  Signal Strength: -94 dbm

Кроме того, похоже, что байты перевернуты (судя по последующим одинаковым символам -хотя все они должны быть разными), но, учитывая, что первая группа выглядит как инкрементный счет, я, очевидно, не могу доверять каким-либо данным.

Любые идеи относительно того, что я делаю неправильно, здесь?Должен ли я печатать каждый UCHAR, индексируя по месту символа (например, dot11Bssid [0]), а не весь объект сразу?

1 Ответ

0 голосов
/ 23 ноября 2018

Да, печатать каждый байт BSSID (в том же формате, что и MAC-адрес) отдельно и дополняется, если необходимо, начальным 0.

printf("MAC address of BSS: ");
sprintf(mac, "%02x-%02x-%02x-%02x-%02x-%02x", 
                    pWlanBssEntry->dot11Bssid[0],
                    pWlanBssEntry->dot11Bssid[1],
                    pWlanBssEntry->dot11Bssid[2],
                    pWlanBssEntry->dot11Bssid[3],
                    pWlanBssEntry->dot11Bssid[4],
                    pWlanBssEntry->dot11Bssid[5]);
printf(" %s\n", mac);

С https://github.com/Shouqun/geolocation/blob/master/src/geolocation_win.c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...