如何在c#中获取网络上所有内容的IP地址

时间:2014-09-11 13:48:26

标签: c# networking ip

我在大约100台机器的网络上有一个声波壁。

我尝试过尝试找到一种创建2个组合框的方法,它将包含链接到sonicwall的IP地址,以及当前登录用户的机器。

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

我一直在研究很多东西(大约25页google,没有单击链接没有点击),并且没有得到任何关于获取此信息的结论。

我不是一个优秀的程序员,但我希望能够将这类信息分成两个组合框/数组/其他合适的对象/控件。

如果有人知道甚至创建一个IP地址数组的方法,以及相应的登录,那对这个项目有很大的帮助!

(请注意:我知道有一个网络交换网站,但我已经看过了!另外,因为我正在为此设计一个软件,我以为我会在这里问它!)

感谢任何建议/建议,非常感谢!

2 个答案:

答案 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.
    });
}