我们正在尝试编写一个在 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;