Сделал так, выводятся все имена компьютеров из 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 + "'))";
То вообще ничего не происходит.