Получить имя ОС для всех подключенных устройств в сети, используя c# wpf - PullRequest
0 голосов
/ 27 апреля 2020

Есть ли способ получить точное имя ОС для всех типов устройств, подключенных к одной сети. В настоящее время я использую следующий подход.

Ping p = new Ping();
PingReply result = p.Send(ip, 200);
if (result.Options.Ttl == 64)
{
   osName = "Linux/Unix/Android";
}
else if (result.Options.Ttl == 128)
{
  osName = "Windows";
}
else
{
  osName = "Solaris/AIX";
}

1 Ответ

0 голосов
/ 27 апреля 2020

Для этого можно использовать Nmap с опцией -O для определения ОС (см. обнаружение удаленной ОС в python).

Для. NET, вы можете использовать это Библиотека оболочки Nmap https://github.com/thomdixon/SaltwaterTaffy, fe Требуется, чтобы у вас был установлен Nmap и он находился на вашем пути.

using SaltwaterTaffy;
using SaltwaterTaffy.Container;
using System;

namespace ScanNetwork
{
    class Program
    {
        public static void Main(string[] args)
        {
            // target can be a string, an IPAddress or an IEnumerable of either
            var target = new Target("192.168.0.0/24");
            var scanner = new Scanner(target);

            scanner.PersistentOptions = new NmapOptions {
                NmapFlag.OsDetection
            };
            var hosts = scanner.HostDiscovery();
            foreach (var host in hosts)
            {
                Console.WriteLine(host.Address);
                foreach(var osMatch in host.OsMatches)
                {
                    Console.WriteLine($"{osMatch.Name} ({osMatch.Family} {osMatch.Generation}) [{osMatch.Certainty}]");
                }

            }
        }
    }
}
...