Информация об ОС сетевого клиента с использованием C # - PullRequest
1 голос
/ 01 марта 2012

Я работаю над приложением, которое сканирует заданный диапазон сети для компьютеров. Из найденных клиентов мне нужно получить IP-адрес, имя хоста, Mac-адрес, информацию об ОС и т. Д.

Теперь у меня есть все вышеперечисленное, кроме версии ОС. Кто-нибудь знает, как мне этого добиться?

Я застрял.

Заранее спасибо, Кристоф

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Вы можете запустить Nmap , используя Process класс из System.Diagnostics и проанализировать результат:

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 # будет сложно, но если выИнтересующийся кратким обзором того, как это работает, вы можете найти его в этой главе Nmap: Глава 8. Обнаружение удаленной ОС

0 голосов
/ 01 марта 2012

Используйте 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)
            {


            }

У вас должно быть право доступа, чтобы украсть эту информацию, иначе вы получите исключение для прав доступа..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...