예제 #1
0
 public IActionResult ComputerList([FromBody] DiscoveryComputerListViewModel param)
 {
     if (ModelState.IsValid)
     {
         _discoverService.Discover(param);
         return(Ok());
     }
     else
     {
         return(BadRequest(ModelState));
     }
 }
예제 #2
0
        /*
         * public void Discover(DiscoveryActiveDirectoryViewModel param)
         * {
         *  Console.WriteLine("=========================");
         *  Console.WriteLine("Domain: {0}", param.Domain);
         *  Console.WriteLine("=========================");
         *
         *  List<Computer> computerList = new List<Computer>();
         *
         *  Console.WriteLine("=========================");
         *  Console.WriteLine("CredentialId: {0}", param.CredentialId);
         *  Console.WriteLine("=========================");
         *
         *  Credential credential = _context.Credentials.SingleOrDefault(cred => cred.Id == param.CredentialId);
         *
         *  Console.WriteLine("=========================");
         *  Console.WriteLine("UserName: {0}", credential.UserName);
         *  Console.WriteLine("=========================");
         *
         *  SearchResultCollection results = GetDomainComputers(param.Domain, credential);
         *
         *  foreach (SearchResult result in results)
         *  {
         *      string computername = (string)result.Properties["dnshostname"][0];
         *      //string operatingsystem = (string)result.Properties["operatingsystem"][0];
         *
         *      Console.WriteLine("=========================");
         *      Console.WriteLine("ComputerName: {0}", computername);
         *      Console.WriteLine("=========================");
         *
         *      try
         *      {
         *          Computer computer = _context.Computers.Single(c => c.ComputerName == computername);
         *
         *          computer.ComputerName = computername;
         *          //computer.OperatingSystem = operatingsystem;
         *          computer.CredentialId = param.CredentialId;
         *          computer.SSH = TestPort(computername, 22);
         *          computer.RPC = TestPort(computername, 135);
         *          computer.SMB = TestPort(computername, 445);
         *          computer.WinRM = TestPort(computername, 5985);
         *
         *          _context.Computers.Update(computer);
         *      }
         *      catch
         *      {
         *          Guid id = Guid.NewGuid();
         *          Console.WriteLine("=========================");
         *          Console.WriteLine("Id: {0}", id);
         *          Console.WriteLine("=========================");
         *
         *          computerList.Add(new Computer
         *          {
         *              Id = id,
         *              ComputerName = computername,
         *              OperatingSystem = null,
         *              CredentialId = param.CredentialId,
         *              Scanned = false,
         *              SSH = TestPort(computername, 22),
         *              RPC = TestPort(computername, 135),
         *              SMB = TestPort(computername, 445),
         *              WinRM = TestPort(computername, 5985)
         *          });
         *      }
         *  }
         *
         *  _context.Computers.AddRange(computerList);
         *  _context.SaveChanges();
         * }
         */

        public void Discover(DiscoveryComputerListViewModel param)
        {
            List <Computer> computerList = new List <Computer>();

            foreach (string name in param.ComputerName)
            {
                Console.WriteLine("=========================");
                Console.WriteLine("ComputerName: {0}", name);
                Console.WriteLine("=========================");

                try
                {
                    Computer computer = _context.Computers.Single(c => c.ComputerName == name);

                    computer.SSH   = TestPort(computer.ComputerName, 22);
                    computer.RPC   = TestPort(computer.ComputerName, 135);
                    computer.SMB   = TestPort(computer.ComputerName, 445);
                    computer.WinRM = TestPort(computer.ComputerName, 5985);

                    _context.Computers.Update(computer);
                }
                catch
                {
                    Guid id = Guid.NewGuid();
                    Console.WriteLine("=========================");
                    Console.WriteLine("Id: {0}", id);
                    Console.WriteLine("=========================");

                    computerList.Add(new Computer
                    {
                        Id              = id,
                        ComputerName    = name,
                        OperatingSystem = null,
                        CredentialId    = param.CredentialId,
                        Scanned         = false,
                        SSH             = TestPort(name, 22),
                        RPC             = TestPort(name, 135),
                        SMB             = TestPort(name, 445),
                        WinRM           = TestPort(name, 5985)
                    });

                    //computerList.Add(GetComputer(name, null, param.CredentialId, false));
                }
            }

            Console.WriteLine("=========================");
            Console.WriteLine("Post Loop");
            Console.WriteLine("=========================");

            _context.Computers.AddRange(computerList);
            _context.SaveChanges();
        }
예제 #3
0
        /*
         * public void Discover(DiscoveryActiveDirectoryViewModel param)
         * {
         *  Console.WriteLine("=========================");
         *  Console.WriteLine("Domain: {0}", param.Domain);
         *  Console.WriteLine("=========================");
         *
         *  List<Computer> computerList = new List<Computer>();
         *
         *  Console.WriteLine("=========================");
         *  Console.WriteLine("CredentialId: {0}", param.CredentialId);
         *  Console.WriteLine("=========================");
         *
         *  Credential credential = _context.Credentials.SingleOrDefault(cred => cred.Id == param.CredentialId);
         *
         *  Console.WriteLine("=========================");
         *  Console.WriteLine("UserName: {0}", credential.UserName);
         *  Console.WriteLine("=========================");
         *
         *  SearchResultCollection results = GetDomainComputers(param.Domain, credential);
         *
         *  foreach (SearchResult result in results)
         *  {
         *      string computername = (string)result.Properties["dnshostname"][0];
         *      //string operatingsystem = (string)result.Properties["operatingsystem"][0];
         *
         *      Console.WriteLine("=========================");
         *      Console.WriteLine("ComputerName: {0}", computername);
         *      Console.WriteLine("=========================");
         *
         *      try
         *      {
         *          Computer computer = _context.Computers.Single(c => c.ComputerName == computername);
         *
         *          computer.ComputerName = computername;
         *          //computer.OperatingSystem = operatingsystem;
         *          computer.CredentialId = param.CredentialId;
         *          computer.SSH = TestPort(computername, 22);
         *          computer.RPC = TestPort(computername, 135);
         *          computer.SMB = TestPort(computername, 445);
         *          computer.WinRM = TestPort(computername, 5985);
         *
         *          _context.Computers.Update(computer);
         *      }
         *      catch
         *      {
         *          Guid id = Guid.NewGuid();
         *          Console.WriteLine("=========================");
         *          Console.WriteLine("Id: {0}", id);
         *          Console.WriteLine("=========================");
         *
         *          computerList.Add(new Computer
         *          {
         *              Id = id,
         *              ComputerName = computername,
         *              OperatingSystem = null,
         *              CredentialId = param.CredentialId,
         *              Scanned = false,
         *              SSH = TestPort(computername, 22),
         *              RPC = TestPort(computername, 135),
         *              SMB = TestPort(computername, 445),
         *              WinRM = TestPort(computername, 5985)
         *          });
         *      }
         *  }
         *
         *  _context.Computers.AddRange(computerList);
         *  _context.SaveChanges();
         * }
         */

        /*
         * public void Discover(DiscoveryComputerListViewModel param)
         * {
         *  List<Computer> computerList = new List<Computer>();
         *
         *  foreach(string name in param.ComputerName)
         *  {
         *      Console.WriteLine("=========================");
         *      Console.WriteLine("ComputerName: {0}", name);
         *      Console.WriteLine("=========================");
         *
         *      try
         *      {
         *          Computer computer = _context.Computers.Single(c => c.ComputerName == name);
         *
         *          computer.SSH = TestPort(computer.ComputerName, 22);
         *          computer.RPC = TestPort(computer.ComputerName, 135);
         *          computer.SMB = TestPort(computer.ComputerName, 445);
         *          computer.WinRM = TestPort(computer.ComputerName, 5985);
         *
         *          _context.Computers.Update(computer);
         *      }
         *      catch
         *      {
         *          Guid id = Guid.NewGuid();
         *          Console.WriteLine("=========================");
         *          Console.WriteLine("Id: {0}", id);
         *          Console.WriteLine("=========================");
         *
         *          computerList.Add(new Computer
         *          {
         *              Id = id,
         *              ComputerName = name,
         *              OperatingSystem = null,
         *              CredentialId = param.CredentialId,
         *              Scanned = false,
         *              SSH = TestPort(name, 22),
         *              RPC = TestPort(name, 135),
         *              SMB = TestPort(name, 445),
         *              WinRM = TestPort(name, 5985)
         *          });
         *
         *          //computerList.Add(GetComputer(name, null, param.CredentialId, false));
         *      }
         *  }
         *
         *  Console.WriteLine("=========================");
         *  Console.WriteLine("Post Loop");
         *  Console.WriteLine("=========================");
         *
         *  _context.Computers.AddRange(computerList);
         *  _context.SaveChanges();
         * }
         */

        public void Discover(DiscoveryComputerListViewModel param)
        {
            var computerDictionary = new ConcurrentDictionary <string, Computer>();

            // Add all current DB entries to computerDictionary
            foreach (Computer comp in _context.Computers)
            {
                computerDictionary.TryAdd(comp.ComputerName, comp);
            }

            // Set up Threads
            var numThreads = 20;
            var collection = new BlockingCollection <Wrapper <ACEComputer> >();
            var tasks      = new Task[numThreads];

            for (var x = 0; x < numThreads; x++)
            {
                tasks[x] = CreateTask(collection, computerDictionary);
            }

            foreach (string computer in param.ComputerName)
            {
                collection.Add(new Wrapper <ACEComputer>
                {
                    Item = new ACEComputer {
                        ComputerName = computer,
                        CredentialId = param.CredentialId
                    }
                });
            }
            collection.CompleteAdding();
            Console.WriteLine("Finished adding items to queue, waiting on tasks");
            Task.WaitAll(tasks);

            // Delete all old entries from the Computer Table
            _context.Computers.RemoveRange(_context.Computers);
            _context.SaveChanges();
            // Update table with all entries from the cache
            _context.Computers.AddRange(computerDictionary.Values);
            // Save all changes done to the DB
            _context.SaveChanges();
        }