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

Как можно использовать C# для получения списка имен компьютеров из Active Directory в пределах определенного диапазона IP-адресов, например, от 10.62.39.66 до 10.62.39.69?
  • 31 июля 2024 г. 7:03
Ответы на вопрос 2
Для этого можно воспользоваться классом DirectorySearcher из пространства имен System.DirectoryServices и выполнить поиск объектов с атрибутом "operatingsystem" по указанным IP-адресам. 

Вот пример кода на C#, который позволяет получить список компьютеров из Active Directory в заданном диапазоне IP-адресов:

```csharp
using System;
using System.DirectoryServices;

class Program
{
    static void Main()
    {
        string startIp = "10.62.39.66";
        string endIp = "10.62.39.69";

        string ldapPath = "LDAP://CN=Computers,DC=mydomain,DC=com";
        DirectoryEntry entry = new DirectoryEntry(ldapPath);

        DirectorySearcher searcher = new DirectorySearcher(entry);
        searcher.Filter = $"(&(objectCategory=computer)(operatingsystem=*))(lastLogonTimestamp=*))";

        SearchResultCollection results = searcher.FindAll();

        foreach (SearchResult result in results)
        {
            string computerName = result.Properties["name"][0].ToString();
            string ipAddress = result.Properties["operatingsystem"][0].ToString();

            if (IsWithinIpRange(ipAddress, startIp, endIp))
            {
                Console.WriteLine(computerName);
            }
        }
    }

    static bool IsWithinIpRange(string ip, string startIp, string endIp)
    {
        byte[] ipBytes = IPAddress.Parse(ip).GetAddressBytes();
        byte[] startIpBytes = IPAddress.Parse(startIp).GetAddressBytes();
        byte[] endIpBytes = IPAddress.Parse(endIp).GetAddressBytes();

        for (int i = 0; i < 4; i++)
        {
            if (ipBytes[i] < startIpBytes[i] || ipBytes[i] > endIpBytes[i])
            {
                return false;
            }
        }

        return true;
    }
}
```

Замените "mydomain" в переменной ldapPath на имя вашего домена. В данном примере мы получаем список компьютеров со свойством operatingsystem и их IP-адресами из заданного диапазона.
С помощью C#
Похожие вопросы