Objective c 检查是否可以从macOS计算机访问AD域控制器

Objective c 检查是否可以从macOS计算机访问AD域控制器,objective-c,macos,active-directory,ldap,dscl,Objective C,Macos,Active Directory,Ldap,Dscl,有一种软件可根据Active Directory域控制器(用于加入域的计算机)的可访问性更改其行为。例如,如果局域网内的机器和域控制器可以访问,则所有功能都可用。如果机器超出LAN,则软件的某些功能将被禁用 它在使用标准Win32 API的Windows上运行良好,但到目前为止,我找不到在macOS上实现它的方法。我找不到任何API。我尝试了一些命令行工具。比如说, dscl”/activedirectory/“读取/dsattrtypennative:DomainName odutil显示节点

有一种软件可根据Active Directory域控制器(用于加入域的计算机)的可访问性更改其行为。例如,如果局域网内的机器和域控制器可以访问,则所有功能都可用。如果机器超出LAN,则软件的某些功能将被禁用

它在使用标准Win32 API的Windows上运行良好,但到目前为止,我找不到在macOS上实现它的方法。我找不到任何API。我尝试了一些命令行工具。比如说,

dscl”/activedirectory/“读取/dsattrtypennative:DomainName

odutil显示节点名

即使我断开macOS机器与AD LAN的连接,它们仍然会显示大约30分钟的信息,就像域控制器仍然可以访问一样

我无法删除整个Open Directory AD缓存以使工具刷新信息,因为该缓存由系统和其他应用程序使用。我不想改变整个系统的行为。我不能为此终止(重启)服务,因为我需要经常这样做(每2-5分钟一次)

我知道我可以使用<强> LDAPSteste>强S>(或LDAP C++库)来检查广告域控制器的可访问性,但是我的软件对域控制器配置没有任何概念。它没有任何凭据来请求信息。此外,对于Windows API,默认情况下使用Kerberos。对于ldapsearch,必须对其进行配置


那么,是否有任何macOS API(Objective C,C++)或任何系统命令工具可供我在不进行额外配置的情况下使用,以检查AD域控制器是否可访问?

如何尝试打开与DNS名称的TCP连接?如果您有一个名为
domain.which
的域,您应该能够在端口389上打开到
domain.which
的连接。如果成功连接,您是否需要验证这实际上是一个域控制器,而不仅仅是随机LDAP?raspy,谢谢您的评论。是的,验证是个问题。我不能只ping一个DNS名称/IP地址或连接到LDAP端口。我需要确保它是真正的域控制器。最低限度的验证(不需要凭据)是打开到Active Directory的LDAPS连接,并验证连接是否安全,并提供可信证书。我将为受信任(预期)证书设置
LDAPTLS\u CACERT
环境变量,并运行
ldapsearch-ZZ-h controller.domain-s base-x
。这将查询rootDSE,在标准AD设置中无需身份验证即可访问它。只需尝试打开到DNS名称的TCP连接如何?如果您有一个名为
domain.which
的域,您应该能够在端口389上打开到
domain.which
的连接。如果成功连接,您是否需要验证这实际上是一个域控制器,而不仅仅是随机LDAP?raspy,谢谢您的评论。是的,验证是个问题。我不能只ping一个DNS名称/IP地址或连接到LDAP端口。我需要确保它是真正的域控制器。最低限度的验证(不需要凭据)是打开到Active Directory的LDAPS连接,并验证连接是否安全,并提供可信证书。我将为受信任(预期)证书设置
LDAPTLS\u CACERT
环境变量,并运行
ldapsearch-ZZ-h controller.domain-s base-x
。这将查询rootDSE,在标准AD设置中无需身份验证即可访问它。