0

我们正在尝试编写一个在 VMWare 服务器上运行并返回客户端(终端用户)IP 地址和名称的 C++ DLL。

我正在使用 WTSQuerySessionInformation 来获取 IP 地址。问题是当我在公司网络中运行时,DLL 返回映射到适当主机名的确切 IP 地址。

但是当我从家里登录到公司的 VPN 并尝试相同时,它给了我一个没有任何 DNS 名称的不同 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 += ".";
}

有没有办法解决这个问题?我是在遵循正确的方法,还是有不同的方法?

编辑: 如果我使用WTSClientName,它会返回以连字符分隔的 IP 地址(如 WXYZ)。如果我在这里做错了什么,你能帮我理解吗?这是代码:

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;
4

0 回答 0