Требования к порту для System.DirectoryServices.ActiveDirectory - PullRequest
0 голосов
/ 20 марта 2020

У нас есть продукт, который реализует аутентификацию на основе ролей с использованием AD. В начале этого приложения оно пытается перечислить все домены в текущем лесу, чтобы получить некоторую информацию, которая будет использоваться позже. Фрагмент кода показан ниже

Domain currentDomain = Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain));
Forest currentForest = currentDomain.Forest;
string forestName = currentForest.Name;
foreach (Domain domain in currentForest.Domains)
{
     //processing code.
}

Приведенный выше код работает нормально до 3-го оператора и переменная forestName правильно инициализируется с именем текущего леса. Но происходит сбой в foreach l oop, когда он пытается выполнить currentForest.Domains

Мы получаем ActiveDirectoryServerDownException с сообщением об ошибке «Указанный домен либо не существует, либо не может связаться с "с кодом ошибки 1355. Из ссылки ниже я узнал, что это может быть неправильная конфигурация DNS или порты могут быть заблокированы брандмауэром. https://social.technet.microsoft.com/Forums/msonline/en-US/53804e9d-ccdd-450a-967b-b7e8f67cddae/active-directory-error-code-1355?forum=winserverDS Я пытаюсь понять порты, которые должны быть открыты для связи на сервере (Active Directory) и клиентском компьютере. Ниже ссылка указывает на такое количество портов, которые меня смутили. https://support.microsoft.com/en-us/help/832017/service-overview-and-network-port-requirements-for-windows Может ли кто-нибудь предоставить мне информацию о том, какие порты должны быть открыты на серверах и клиентских компьютерах, чтобы я мог успешно перечислить все домены в лесу.

1 Ответ

0 голосов
/ 20 марта 2020

Эти методы используют протокол LDAP для связи с AD, который используется по всему порту 389.

Просто чтобы быть уверенным, я запустил ваш код и посмотрел сетевые соединения, которые он использовал, и он использовал только порт 389 .

В качестве примечания вы можете немного упростить свой код, используя Forest.GetCurrentForest() вместо поиска текущего домена, а затем поиска леса для этого домена.

Forest currentForest = Forest.GetCurrentForest();

В любом случае, та же работа будет выполнена.

...