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

    @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 + "'))";

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