Active directory 解析Active Directory[.net]中/的域地址

Active directory 解析Active Directory[.net]中/的域地址,active-directory,dns,Active Directory,Dns,有没有一种简单的方法可以解析Active Directory中域名的Active Directory路径 例如,您的用户帐户可能是SITE\Username或DEPARTMENT\Username,但域站点的实际路径可能是SITE.company.com或DEPARTMENT可能是dep.company.com等 我正试图找到一种方法,将DEPARTMENT转换为DC=dep、DC=company、DC=com等,以便在Active Directory中正确搜索…您可能拥有的是一家有一个forr

有没有一种简单的方法可以解析Active Directory中域名的Active Directory路径

例如,您的用户帐户可能是SITE\Username或DEPARTMENT\Username,但域站点的实际路径可能是SITE.company.com或DEPARTMENT可能是dep.company.com等


我正试图找到一种方法,将DEPARTMENT转换为DC=dep、DC=company、DC=com等,以便在Active Directory中正确搜索…

您可能拥有的是一家有一个forrest(company.com)和两个子域(您的站点和部门)的公司。站点和部门位是域的NetBIOS表示。它们与相应的DNS名称不同并不常见,但这是可能的。只是要确保我们不是在讨论OU:s和“物理”Active Directory站点

假设上述情况,这里有两个选项:

以下假设您的应用程序在具有“forrest wide read access”(访问不同域的能力)的帐户下运行:

(我还没有找到将domain.company.com转换为DC=domain,DC=company,DC=com的“System.DirectoryServices内置”方法,但上面简单的字符串操作应该可以做到这一点。)

如果您使用的是非forrest范围的帐户(或者如果部门和站点不是同一forrest中的域,而是单独的forrest),那么您必须根据“部门”或“站点”字符串维护要使用的用户名和密码列表:

如果您不愿意绑定到不同的Forrest/域以获得域名/组件,您可以尝试以下方法:

IPAddress[] addresses = Dns.GetHostAddresses("DEPARTMENT");
IPHostEntry host = Dns.GetHostEntry(addresses[0]);
Int32 dotIndex = host.HostName.IndexOf('.');
String domain =
    host.HostName.Substring(dotIndex + 1, host.HostName.Length - dotIndex - 1);
Console.WriteLine(domain);

但以上假设NETBios名称与DNS名称的第一部分相同,并且DNS解析工作正常。我们在上面做的是查询域控制器列表,然后从DNS名称中删除主机名。不是特别干净的选择…

太棒了!谢谢不过有几点需要注意…查找距离更远的域需要更长的时间…我尝试使用GlobalCatalog,但我们的一些域必须是DNS表示形式…实际上不是在AD中…另外,我在其他部分使用了完全相同的替换(“.”,“,DC=”)…到目前为止效果良好!
// if(domainNetBios == "DEPARMENT")...
DirectoryContext directoryContext
    = new DirectoryContext(DirectoryContextType.Domain,
    "DEPARTMENT",
    "UserInDEPARTMENT",
    "PassForUserInDEPARTMENT");
IPAddress[] addresses = Dns.GetHostAddresses("DEPARTMENT");
IPHostEntry host = Dns.GetHostEntry(addresses[0]);
Int32 dotIndex = host.HostName.IndexOf('.');
String domain =
    host.HostName.Substring(dotIndex + 1, host.HostName.Length - dotIndex - 1);
Console.WriteLine(domain);