我在大约100台机器的网络上有一个声波壁。
我尝试过尝试找到一种创建2个组合框的方法,它将包含链接到sonicwall的IP地址,以及当前登录用户的机器。
我想创建的是一个员工监控软件(如Interguard / ActivTrak / etc),但目前还无法找到这些信息?
我一直在研究很多东西(大约25页google,没有单击链接没有点击),并且没有得到任何关于获取此信息的结论。
我不是一个优秀的程序员,但我希望能够将这类信息分成两个组合框/数组/其他合适的对象/控件。
如果有人知道甚至创建一个IP地址数组的方法,以及相应的登录,那对这个项目有很大的帮助!
(请注意:我知道有一个网络交换网站,但我已经看过了!另外,因为我正在为此设计一个软件,我以为我会在这里问它!)
感谢任何建议/建议,非常感谢!
答案 0 :(得分:0)
您要查找的内容类似于wireshark或ethereal等数据包嗅探器应用程序。但是如果你想自己设计它,我认为你最好的解决方案是一个集合/列表来存储绑定到数据网格的数据。
答案 1 :(得分:0)
如果您位于Active Directory域中,则可以使用my S/O question中的代码。您可以使用System.Net.Dns重新编写它来获取IP地址,而不是使用CheckConnectionAsync()方法来检查连接性。
要检索用户,您可以使用WMI。为此,您需要引用System.Management命名空间。
public Task<string> GetUserName(string ComputerName)
{
return Task.Run(() =>
{
ConnectionOptions conn = ConnectionOptions()
{
EnablePrivileges = true,
Username = // string in format of @"DomainName\UserName",
Password = password,
Authentication = AuthenticationLevel.PacketPrivacy,
Impersonation = ImpersonationLevel.Impersonate
};
ManagementScope scope = new ManagementScope(@"\\" + ComputerName + @"\root\cimv2", conn);
try
{
scope.Connect();
ObjectQuery user = new ObjectQuery("Select UserName From Win32_ComputerSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, user);
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject m in collection)
{
string username = m["UserName"].ToString().Trim();
if(!String.IsNullOrEmpty(username))
{
return username;
}
}
return null; // no current logged in user
}
catch (Exception) // error handling...
});
}
然后,只需遍历您的计算机集合并检索用户名,如下所示:
private async Task RetrieveUsers()
{
Parallel.ForEach(Computers, c =>
{
string user = await GetUserName(c.Name); // or c.IP. both work.
});
}