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

时间:2009-07-15 04:37:19

标签: active-directory dns

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

E.g。您的用户帐户可能是SITE \ Username或DEPARTMENT \ Username,但域SITE的实际路径可能是site.company.com或DEPARTMENT可能是dep.company.com等

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

1 个答案:

答案 0 :(得分:2)

您可能拥有的是一家公司,其中包含一个forrest(company.com)和一些子域名(在您的案例中为SITE和DEPARTMENT)。 SITE和DEPARTMENT位是域的NetBIOS表示。它们与相应的DNS名称不同并不常见,但它是可能的。请确保我们不是在讨论OU:s和“物理”Active Directory站点。

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

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

using System.DirectoryServices.ActiveDirectory;

// ...

DirectoryContext directoryContext
    = new DirectoryContext(DirectoryContextType.Domain, "DEPARTMENT");
Domain domain = Domain.GetDomain(directoryContext);
String domainName = domain.Name;
String domainComponent = "DC=" + domainName.Replace(".", ",DC=");
Console.WriteLine(domainComponent);

(我还没有找到“System.DirectoryServices-built-in”方式将domain.company.com转换为DC = domain,DC = company,DC = com,但上面的简单字符串操作应该可以解决问题。 )

如果您使用的是非forrest范围的帐户(或者如果DEPARTMENT和SITE不是同一个forrest中的域,但本身是单独的forrests),那么您将必须维护一个用户名和密码列表以供使用取决于“DEPARTMENT”或“SITE”字符串:

// if(domainNetBios == "DEPARMENT")...
DirectoryContext directoryContext
    = new DirectoryContext(DirectoryContextType.Domain,
    "DEPARTMENT",
    "UserInDEPARTMENT",
    "PassForUserInDEPARTMENT");

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

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-name与DNS名称的第一部分相同,并且DNS解析正常工作。我们上面要做的是查询域控制器列表,然后从DNS名称中删除主机名。不是特别干净的选择...