C# 如何用c语言获取网络上所有东西的IP地址#

C# 如何用c语言获取网络上所有东西的IP地址#,c#,networking,ip,C#,Networking,Ip,我在一个由大约100台机器组成的网络上有一个sonicwall 我已经尝试并试图找到一种方法来创建2个组合框,其中既包含链接到sonicwall的IP地址,也包含机器当前登录的用户 我试图创建的是一个员工监控软件(如Interguard/ActivTrak/etc),但目前我甚至无法找到这些信息 我一直在研究很多东西(大约25页的谷歌,没有一个链接没有点击),并没有得出任何结论来获得这些信息 我并不是一个优秀的程序员,但我希望能够将这类信息输入到两个combobox的/Array/其他合适的对象

我在一个由大约100台机器组成的网络上有一个sonicwall

我已经尝试并试图找到一种方法来创建2个组合框,其中既包含链接到sonicwall的IP地址,也包含机器当前登录的用户

我试图创建的是一个员工监控软件(如Interguard/ActivTrak/etc),但目前我甚至无法找到这些信息

我一直在研究很多东西(大约25页的谷歌,没有一个链接没有点击),并没有得出任何结论来获得这些信息

我并不是一个优秀的程序员,但我希望能够将这类信息输入到两个combobox的/Array/其他合适的对象/控件中

如果有人知道一种方法,甚至创建一个IP地址数组,以及相应的登录,这将是非常有帮助的这个项目

(请注意:我知道有一个网络交换网站,但我已经看过了!而且,因为我正在为此设计一个软件,我想我应该在这里问一下!)


谢谢你的建议,非常感谢

您所寻找的类似于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.
    });
}