我正在尝试获取登录到计算机的所有RDP连接的IP地址。我正在使用WTSEnumerateSessions和WTSQuerySessionInformation来检索指向包含地址的WTS_CLIENT_ADDRESS结构的指针。以下是代码的一部分:
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,
SessionNo,
WTSClientAddress,
&ppBuffer,
&pBytesReturned);
address = (WTS_CLIENT_ADDRESS *)ppBuffer;
if (AF_INET == address->AddressFamily)
{
printf("Client Address : %s\n", (LPSTR)address->Address);
}
else if (AF_INET6 == address->AddressFamily)
{
//print IPV6
}
我可以获得AddressFamily并且值很好,但是当我尝试打印地址时,我得到了胡言乱语。 MSDN表示该值是一个以空字符结尾的字符串,但它不会像它应该那样打印。这是链接:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa383857(v=vs.85).aspx
我有一种感觉,我在这里遗漏了一些东西。
答案 0 :(得分:1)
您没有考虑WTS_INFO_CLASS
文档中的以下注释:
WTSClientAddress
客户端的网络类型和网络地址。有关更多信息,请参阅WTS_CLIENT_ADDRESS。IP地址从WTS_CLIENT_ADDRESS结构的Address成员开头偏移两个字节。
另外,尽管文档说的是,IPv4地址不是以空字符结尾的字符串!它实际上是IPv4地址的原始4字节(就像IPv6地址是原始字节一样)。
请改为尝试:
df.groupby(level=0).agg(lambda x: len(set(x)) == 1)
Value1 Value2
A True False
B False False
C True False