C# 使用C的networkclient操作系统信息

C# 使用C的networkclient操作系统信息,c#,networking,operating-system,C#,Networking,Operating System,我正在开发一个应用程序,它可以扫描给定网络范围内的计算机。从找到的客户机中,我需要获得IP、主机名、Mac地址、操作系统信息等 现在,除了操作系统版本之外,我已经具备了上述所有功能。有人知道我是如何做到这一点的吗 我卡住了 提前感谢,Christophe使用WMI,添加对-System.Management dll的引用并提供名称空间,使用以下代码和适当的参数- ManagementScope scope = new ManagementScope(); try

我正在开发一个应用程序,它可以扫描给定网络范围内的计算机。从找到的客户机中,我需要获得IP、主机名、Mac地址、操作系统信息等

现在,除了操作系统版本之外,我已经具备了上述所有功能。有人知道我是如何做到这一点的吗

我卡住了


提前感谢,Christophe使用WMI,添加对-System.Management dll的引用并提供名称空间,使用以下代码和适当的参数-

 ManagementScope scope = new ManagementScope();    
            try
            {                      

                ConnectionOptions conOptions = new ConnectionOptions();  

                options.Username = "<Provide username>";    
                options.Password = "<Provide password>";    
                options.EnablePrivileges = true;    
                options.Authority = "ntlmdomain:<domianname>";                        

                scope = new ManagementScope(@"\\<IP address/machine name>\root\CIMV2", options);

                scope.Connect();                      

                SelectQuery query = new SelectQuery("SELECT * FROM Win32_OperatingSystem");

                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

                using (ManagementObjectCollection queryCollection = searcher.Get())
                {    
                    foreach (ManagementObject m in queryCollection)
                    {                            

                        Console.WriteLine(string.Format("Computer Name : {0}", m["csname"]));    
                         Console.WriteLine(string.Format("Windows Directory : {0}", m["WindowsDirectory"]));    
                         Console.WriteLine(string.Format("Operating System: {0}", m["Caption"]));    
                         Console.WriteLine(string.Format("Version: {0}", m["Version"]);

                         Console.WriteLine(string.Format("Manufacturer : {0}", m["Manufacturer"]));

                    }

                }

            }    

            catch (Exception ex)
            {


            }
您必须具有访问权限才能窃取此信息,否则您将获得访问权限异常。

您可以使用System.Diagnostics中的Process类运行并分析结果:

var process = new Process()
{
    StartInfo = new ProcessStartInfo()
    {
        FileName = "cmd.exe",
        Arguments = "/c nmap -O -v targethost",
        CreateNoWindow = true,
        UseShellExecute = false,
        RedirectStandardOutput = true
    }
};
process.Start();

while (!process.StandardOutput.EndOfStream)
{
    string line = process.StandardOutput.ReadLine();
    // here you can parse to obtain the operating system
}

用C语言创建自己的OS detector会很困难,但如果您对它的工作原理感兴趣,可以在Nmap的这一章中找到:

感谢各位提供的解决方案,但Nmap做得不是很好。。WMI解决方案也没有,因为它需要凭据才能登录到计算机。关键是一个应用程序可以从插入网络的笔记本电脑上运行,该应用程序应该扫描给定范围并显示在网络中找到的计算机。所以我想没有办法解决这个问题?因为获得证书是不可能的。无论如何谢谢你!克里斯托夫,