Как получить имя удаленного клиента
Я пытаюсь написать библиотеку DLL C++, которая будет работать на сервере VMWare и возвращать имя клиента (терминального пользователя) и IP-адрес.
Я использую WTSQuerySessionInformation для получения имени клиента и IP-адреса. Является
WTSQuerySessionInformationправильная функция, или есть другой способ решить эту проблему?
Что я уже пробовал:
Имяклиента:
Проблема с именем клиента заключается в том, что
WTSQuerySessionInformationвозвращает IP - адрес, разделенный дефисом (например, 10-0-156-234) вместо имени клиента. Не могли бы вы помочь мне понять, не сделал ли я здесь что-нибудь не так?
LPTSTR szClientName = NULL; DWORD dwSize = 0; String^ cliName = String::Empty; if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, TSClientName, &szClientName, &dwSize)) { cliName = gcnew String(szClientName, 0, dwSize); } return cliName;
IP-адрес:
Я попытался обойти эту проблему, выбрав IP-адрес, а затем имя хоста, и мне это тоже удалось, когда я запустил код из сети организации.
Но когда я захожу из дома в VPN компании и пытаюсь сделать то же самое, он дает мне NAT:ted IP, который, очевидно, не сопоставляется с именем компьютера. Есть ли какой - нибудь способ найти "реальный" IP-адрес, подключенный к серверу? Или, если это невозможно, если я могу найти имя компьютера, это прекрасно работает для меня.
LPTSTR ppBuffer = NULL; DWORD pBytesReturned = 0; PWTS_CLIENT_ADDRESS pWTSCA = NULL; WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientAddress, &ppBuffer, &pBytesReturned); pWTSCA = (PWTS_CLIENT_ADDRESS)ppBuffer; String^ addrStr = String::Empty; for (int i = 2; i < 6; i++) { addrStr += Convert::ToString(pWTSCA->Address[i]); if (i != 5) addrStr += "."; }
Richard MacCutchan
Это, скорее всего, означает, что IP - адрес не преобразуется в имя. Вы можете получить более подробную информацию от WTSClientInfo
вариант.
vivek2414
Спасибо, Ричард. Я пробовал это, но получаю тот же результат. Вот этот код:
if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientInfo, &ppBuffer, &dwSize)) { pWtsClientInfo = (PWTSCLIENTW)ppBuffer; for (int i = 0; i < 22; i++ ) clientInfo += Convert::ToString(pWtsClientInfo->ClientName[i]); } else { return "Failed"; }