【问题标题】:Port requirements for System.DirectoryServices.ActiveDirectorySystem.DirectoryServices.ActiveDirectory 的端口要求
【发布时间】:2020-03-20 16:11:53
【问题描述】:

我们有一个使用 AD 实现基于角色的身份验证的产品。 在此应用程序启动时,它会尝试枚举当前林中的所有域以获取一些稍后将使用的信息。
一个sn-p的代码如下所示

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 变量。
但是当它尝试执行 currentForest.Domains

时,它在 foreach 循环中失败了

我们收到 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
有人可以向我提供有关需要在服务器和客户端计算机上打开哪些端口的信息,以便我可以成功枚举林中的所有域。

【问题讨论】:

    标签: c# active-directory port directoryservices


    【解决方案1】:

    这些方法使用 LDAP 协议与 AD 通信,AD 使用端口 389。

    为了确定,我运行了你的代码并观察了它使用的网络连接,它只使用了 389 端口。

    附带说明一下,您可以通过使用 Forest.GetCurrentForest() 来稍微简化代码,而不是先查找当前域,然后再查找该域的森林。

    Forest currentForest = Forest.GetCurrentForest();
    

    无论哪种方式都可以完成相同的工作。

    【讨论】:

    • 感谢您的回复。此端口 389 位于客户端计算机右侧。因此,运行此代码的机器应该将端口 389 列入白名单或畅通无阻。请确认
    • 从技术上讲,它是目标计算机(域控制器)上的端口 389,但是是的,如果客户端计算机具有本地防火墙,则必须使目标端口 389 畅通。此外,网络路径上的任何防火墙都必须允许它。
    • 感谢您的信息。刚刚知道 IT 团队要求使用安全端口(636)而不是不安全端口(389)。谷歌没有给我任何满意的答案。你有任何关于如何使用安全端口(636)让这个代码工作的信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多