如何从dns域名获取简短的“域名”?

时间:2009-07-31 19:47:31

标签: .net windows .net-2.0 active-directory dns

请原谅我,如果我对这个主题的理解有一些缺点,我只知道我对域名和活动目录的了解,因为我从他们那里学到了什么。

域名有两个不同的“版本”。第一个是我所谓的DNS域名,就像 company.int (对于用户max@company.int)而第二个就像 prefixname (对于用户prefixname \ max),他们都会引用同样的事情。

我的问题是,如果给出“company.int”,我该如何将其转换为“prefixname”?

编辑:或者给定一个System.DirectoryServices.ActiveDirectory.Domain对象,如何获取前缀名?

EDIT2:另外,除此之外还有“prefixname”的名称吗?我永远不知道该怎么称呼它。

EDIT3:我想要获得的值与Windows登录屏幕上显示的“登录到”(它列出域和您的计算机)的值相同。

EDIT4:我发现我可以通过以下方式获得价值:

SecurityIdentifier sid = GetCurrentUserSID();
string prefixName = sid.Translate(typeof(NTAccount)).Value.Split('\\')[0];

有没有人知道获得此名称的更好方法?

3 个答案:

答案 0 :(得分:4)

我应该这样做,我希望:

    private string GetNetbiosDomainName(string dnsDomainName)
    {
        string netbiosDomainName = string.Empty;

        DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");

        string configurationNamingContext = rootDSE.Properties["configurationNamingContext"][0].ToString();

        DirectoryEntry searchRoot = new DirectoryEntry("LDAP://cn=Partitions," + configurationNamingContext);

        DirectorySearcher searcher = new DirectorySearcher(searchRoot);
        searcher.SearchScope = SearchScope.OneLevel;
        searcher.PropertiesToLoad.Add("netbiosname");
        searcher.Filter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", dnsDomainName);

        SearchResult result = searcher.FindOne();

        if (result != null)
        {
            netbiosDomainName = result.Properties["netbiosname"][0].ToString();
        }

        return netbiosDomainName;
    }

你基本上用“mydomain.com”调用它,并且应该取回netbios域名,例如“MYDOMAIN”(通常)。

马克

答案 1 :(得分:0)

你正在寻找System.DirectoryServices.DirectoryEntry.Path吗?

,前缀名称只称为域

<强> 编辑: 那么Environment.UserDomainName呢?

答案 2 :(得分:-1)

据我所知, prefixname 始终是 company.int 的第一个标签(即公司)。