C# 获取windows网络登录会话IP
我正在编写一段代码,用于查询windows计算机上现有的登录会话。对于网络登录,我尝试查找进行登录的计算机的IP地址和/或名称 到目前为止,我使用LsaEnumerateLogonSessions/LsaGetLogonSessionData获得了登录会话列表,但在返回的安全性\登录\会话\数据结构中找不到IP 如何获取网络登录会话的IP地址/计算机名C# 获取windows网络登录会话IP,c#,windows,security,winapi,C#,Windows,Security,Winapi,我正在编写一段代码,用于查询windows计算机上现有的登录会话。对于网络登录,我尝试查找进行登录的计算机的IP地址和/或名称 到目前为止,我使用LsaEnumerateLogonSessions/LsaGetLogonSessionData获得了登录会话列表,但在返回的安全性\登录\会话\数据结构中找不到IP 如何获取网络登录会话的IP地址/计算机名 DateTime systime = new DateTime(1601, 1, 1, 0, 0, 0, 0); UInt64 session
DateTime systime = new DateTime(1601, 1, 1, 0, 0, 0, 0);
UInt64 sessionCount;
IntPtr luidPtr;
LsaEnumerateLogonSessions(out sessionCount, out luidPtr);
IntPtr iter = luidPtr;
for (ulong i = 0; i < sessionCount; i++)
{
IntPtr sessionData;
LsaGetLogonSessionData(iter, out sessionData);
var data =
(SECURITY_LOGON_SESSION_DATA)Marshal.PtrToStructure(sessionData, typeof(SECURITY_LOGON_SESSION_DATA));
if (data.PSiD != IntPtr.Zero)
{
System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(data.PSiD);
SECURITY_LOGON_TYPE secType = (SECURITY_LOGON_TYPE)data.LogonType;
DateTime logonTime = systime.AddTicks((long)data.LoginTime);
string authpackage = Marshal.PtrToStringUni(data.AuthenticationPackage.buffer);
string domain = Marshal.PtrToStringUni(data.LoginDomain.buffer);
string username = Marshal.PtrToStringUni(data.Username.buffer);
string dnsDomainName = Marshal.PtrToStringUni(data.DnsDomainName.buffer);
string logonServer = Marshal.PtrToStringUni(data.LogonServer.buffer);
string upn = Marshal.PtrToStringUni(data.Upn.buffer);
Console.WriteLine("SID "+sid+" Type: " + secType + "\t" + domain + "\\" + username + "\tTime: " + logonTime);
if (secType == SECURITY_LOGON_TYPE.Network)
{
// TODO get IP/machine name
}
}
iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LUID)));
LsaFreeReturnBuffer(sessionData);
}
LsaFreeReturnBuffer(luidPtr);
安全\u登录\u会话\u数据具有DnsDomainName字段:
包含登录会话所有者的DNS名称的LSA_UNICODE_字符串结构
如果需要IP地址,请使用或对该名称执行反向DNS查找
或者,安全登录会话数据也有一个会话字段。如果它不是0,则可以将其传递到,将WTSInfoClass参数设置为,将ppBuffer参数设置为指针变量的地址