How to get short “domain name” from dns domain name?

℡╲_俬逩灬. 提交于 2019-12-23 01:45:28

问题


Forgive me if my understanding of this topic has some shortcomings, I only know what I know about domains and active directory because of what I've picked up from working with them.

There are two different "versions" of a domain name. The first is what I call the DNS domain name which would be like company.int (for the user max@company.int) and the second would be like prefixname (for the user prefixname\max) and they would both refer to the same thing.

My question is, given "company.int", how do I convert that to "prefixname"?

EDIT: Or given a System.DirectoryServices.ActiveDirectory.Domain object, how do I get the prefixname?

EDIT2: Also, is there a name for the "prefixname" other than that? I never know what to call it.

EDIT3: The value I'm trying to get is the same value that shows up on the windows login screen for "Log on to" (where it lists the domains and your computer).

EDIT4: I've figured out I can get the value by doing the following:

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

Does anyone know of a better method to get this name?


回答1:


This should do it, I hope:

    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;
    }

You basically call it with the "mydomain.com" and should get back the netbios domain name, e.g. "MYDOMAIN" (usually).

Marc




回答2:


are you looking for System.DirectoryServices.DirectoryEntry.Path?

and the prefixname is just called domain

EDIT: what about Environment.UserDomainName?




回答3:


To my knowledge, prefixname is always the first label of company.int (i.e. company).



来源:https://stackoverflow.com/questions/1214512/how-to-get-short-domain-name-from-dns-domain-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!