Задать вопрос
@atm87

С помощью C# как получить список компьютеров из Active Directory по диапазону IP адресов?

С помощью C# как получить список компьютеров из Active Directory по диапазону IP адресов?
Нужно получить список имен компьютеров от 10.62.39.66 до 10.62.39.69
  • Вопрос задан
  • 208 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
HemulGM
@HemulGM
Delphi Developer, сис. админ
С помощью C#
Ответ написан
@NortheR73
системный инженер
в .NET Framework (и просто в .NET тоже) есть метод Dns.GetHostEntry(IPAddress) - с его помощью получаете имена компьютеров
Далее с помощью объекта Directory Searcher выполняете поиск компьютеров в AD
Ответ написан
Комментировать
@atm87 Автор вопроса
Сделал так, выводятся все имена компьютеров из Active Directory, но не по диапазону:
private void button1_Click(object sender, EventArgs e)
        {
            // Разделяем IP-адреса на октеты
            var octets1 = ipAddressControl1.GetAddressBytes();
            var octets2 = ipAddressControl2.GetAddressBytes();
            // Проверка на совпадение первых трех октетов
            if (octets1[0] == octets2[0] &&
                octets1[1] == octets2[1] &&
                octets1[2] == octets2[2])
            {
                // Проверка, что 4-й октет первого IP меньше 4-го октета второго IP
                if (octets1[3] < (octets2[3])
                {
                    List<string> computers = GetComputersByIPRange(ipAddressControl1.Text, ipAddressControl2.Text);
                    foreach (string computer in computers)
                    {
                        Console.WriteLine(computer);
                    }
                }
                else
                {
                    MessageBox.Show("Первые три октета совпадают, но 4-й октет первого IP не меньше 4-го октета второго IP.");
                }
            }
            else
            {
                MessageBox.Show("Первые три октета IP-адресов не совпадают.");
            }
        }
        private List<string> GetComputersByIPRange(string startIP, string endIP)
        {
            List<string> computers = new List<string>();
            // Создаем DirectorySearcher для поиска компьютеров в Active Directory
            DirectorySearcher searcher = new DirectorySearcher();
            searcher.Filter = "(&(objectClass=computer))";
            searcher.PropertiesToLoad.Add("cn");
            // Выполняем поиск и получаем список компьютеров
            SearchResultCollection results = searcher.FindAll();
            foreach (SearchResult result in results)
            {
                string computerName = (string)result.Properties["cn"][0];
                computers.Add(computerName);
            }
            return computers;
        }

Изменяю эту строку на:
searcher.Filter = "(&(objectClass=computer)(ipAddress>='" + startIP + "')(ipAddress<='" + endIP + "'))";

То вообще ничего не происходит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы