C# 如何用c语言获取网络上所有东西的IP地址#
我在一个由大约100台机器组成的网络上有一个sonicwall 我已经尝试并试图找到一种方法来创建2个组合框,其中既包含链接到sonicwall的IP地址,也包含机器当前登录的用户 我试图创建的是一个员工监控软件(如Interguard/ActivTrak/etc),但目前我甚至无法找到这些信息 我一直在研究很多东西(大约25页的谷歌,没有一个链接没有点击),并没有得出任何结论来获得这些信息 我并不是一个优秀的程序员,但我希望能够将这类信息输入到两个combobox的/Array/其他合适的对象/控件中 如果有人知道一种方法,甚至创建一个IP地址数组,以及相应的登录,这将是非常有帮助的这个项目 (请注意:我知道有一个网络交换网站,但我已经看过了!而且,因为我正在为此设计一个软件,我想我应该在这里问一下!)C# 如何用c语言获取网络上所有东西的IP地址#,c#,networking,ip,C#,Networking,Ip,我在一个由大约100台机器组成的网络上有一个sonicwall 我已经尝试并试图找到一种方法来创建2个组合框,其中既包含链接到sonicwall的IP地址,也包含机器当前登录的用户 我试图创建的是一个员工监控软件(如Interguard/ActivTrak/etc),但目前我甚至无法找到这些信息 我一直在研究很多东西(大约25页的谷歌,没有一个链接没有点击),并没有得出任何结论来获得这些信息 我并不是一个优秀的程序员,但我希望能够将这类信息输入到两个combobox的/Array/其他合适的对象
谢谢你的建议,非常感谢 您所寻找的类似于wireshark或ethereal之类的数据包嗅探器应用程序。但是如果你想自己设计,我认为最好的解决方案是使用集合/列表来存储绑定到datagrid的数据。如果你在Active Directory域中,你可以使用来自的代码。您不必使用CheckConnectionAsync()方法检查连接,只需使用System.Net.Dns重新写入它以获取IP地址即可 要检索用户,可以使用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...
});
}
但这不会有严重的安全问题吗?您需要有一个具有管理员凭据的帐户才能执行这些方法。这与在没有对AD中的任何内容拥有权限的帐户的情况下尝试访问AD是一样的,因此实际上没有任何安全问题。这完全取决于你如何向这些方法提供身份验证信息。如今,通过“黑客”攻击大多数计算机来获得管理员帐户是很容易的,如果其他用户拥有管理员权限会发生什么?如果你想获得远程机的当前登录用户并列举驻留在AD中的计算机,这是一种方法,需要管理员凭据。因此,您必须建立一种机制来对使用您的应用程序的人进行身份验证(即,在应用程序中提示身份验证信息,而不是将其存储在代码中),并限制应用程序在您的网络上的可用性。当你做任何与管理网络有关的事情时,你必须考虑的事情。它会有元素是的,但是甚至WiReSARK也有它的局限性。
private async Task RetrieveUsers()
{
Parallel.ForEach(Computers, c =>
{
string user = await GetUserName(c.Name); // or c.IP. both work.
});
}