예제 #1
0
 public IActionResult Domain([FromBody] DiscoveryActiveDirectoryViewModel 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();
        }