Winsock Bluetooth получает дескриптор активного подключения - PullRequest
0 голосов
/ 24 декабря 2018

Поэтому я пытаюсь отслеживать трафик активного соединения Bluetooth на моем ПК.Я могу получить несколько сведений об активном подключении к удаленному устройству, например, SOCKADDR_BTH.Я думал, что смогу использовать информацию о порте удаленного устройства и привязать к нему сокет для мониторинга трафика, но обнаружение устройства не предоставляет информацию о порте, см. Ниже:

Device name:WH-1000XM2 Device connected: 65536 Device remembered: 1 Device authenticated: 1 Remote Bluetooth device is 0x702605aba41d, server channel = 0 Local Bluetooth device is 0x84ef18b8460a, server channel = 0

Вот соответствующий код spinet:

/*Preparing the queryset return buffer*/
pwsaResults = (LPWSAQUERYSET)buffer;
pwsaResults->dwNameSpace = NS_BTH;
pwsaResults->dwSize = sizeof(WSAQUERYSET);
BTH_QUERY_DEVICE qDev{};
qDev.length = 1;
BLOB blb;
blb.cbSize = sizeof(BTH_QUERY_DEVICE);
blb.pBlobData = reinterpret_cast<PBYTE>(&qDev);
pwsaResults->lpBlob = &blb;

while (WSALookupServiceNext(hLookup, LUP_RETURN_ADDR | LUP_RETURN_NAME | LUP_CONTAINERS | LUP_RETURN_TYPE | LUP_RES_SERVICE | LUP_FLUSHCACH, &swSize, pwsaResults) == NO_ERROR)
{
    pAddrInfo       = (CSADDR_INFO*)pwsaResults->lpcsaBuffer;
    pBtSockRemote   = (SOCKADDR_BTH*)(pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr);
    pBtSockLocal    = (SOCKADDR_BTH*)(pwsaResults->lpcsaBuffer->LocalAddr.lpSockaddr);

    wprintf(L"Device #:%d\n", nDevicesFound);
    wprintf(L"Device name:%s\n", pwsaResults->lpszServiceInstanceName);
    wprintf(L"Device connected: %d\n", (pwsaResults->dwOutputFlags & BTHNS_RESULT_DEVICE_CONNECTED));
    wprintf(L"Device remembered: %d\n", (pwsaResults->dwOutputFlags & BTHNS_RESULT_DEVICE_REMEMBERED)>0);
    wprintf(L"Device authenticated: %d\n", (pwsaResults->dwOutputFlags & BTHNS_RESULT_DEVICE_AUTHENTICATED)>0);
    wprintf(L"Remote Bluetooth device is 0x%04x%08x, server channel = %d\n",
        GET_NAP(pBtSockRemote->btAddr), GET_SAP(pBtSockRemote->btAddr), pBtSockRemote->port);
    wprintf(L"Local Bluetooth device is 0x%04x%08x, server channel = %d\n",
        GET_NAP(pBtSockLocal->btAddr), GET_SAP(pBtSockLocal->btAddr), pBtSockLocal->port);

    nDevicesFound++;

}

Я думал об использовании WSAIoctl для прослушивания трафика.

...