Как получить короткое «доменное имя» из доменного имени днс? - PullRequest
1 голос
/ 31 июля 2009

Простите, если мое понимание этой темы имеет некоторые недостатки, я знаю только то, что я знаю о доменах и активных каталогах из-за того, что я понял, работая с ними.

Существует две разные "версии" доменного имени. Первое - это то, что я называю доменным именем DNS, которое будет выглядеть как company.int (для пользователя max@company.int), а второе - как * 1008. * prefixname (для префиксного имени пользователя \ max), и они оба будут ссылаться на одно и то же.

Мой вопрос, учитывая, что "company.int", как мне преобразовать это в "prefixname"?

РЕДАКТИРОВАТЬ: Или как получить объект System.DirectoryServices.ActiveDirectory.Domain, как мне получить префикс имени?

EDIT2: Кроме того, есть ли имя для "префиксного имени", кроме этого? Я никогда не знаю, как это назвать.

РЕДАКТИРОВАТЬ3: значение, которое я пытаюсь получить, является тем же значением, которое отображается на экране входа в систему Windows для «Вход в систему» ​​(где перечислены домены и ваш компьютер).

EDIT4: я понял, что могу получить значение, выполнив следующее:

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

Кто-нибудь знает лучший способ получить это имя?

Ответы [ 3 ]

4 голосов
/ 01 августа 2009

Это должно сделать это, я надеюсь:

    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" (обычно).

Марк

0 голосов
/ 01 августа 2009

вы ищете System.DirectoryServices.DirectoryEntry.Path ?

и префикс просто называется домен

EDIT: 1010 ** как насчет Environment.UserDomainName?

0 голосов
/ 31 июля 2009

Насколько мне известно, префикс всегда является первым ярлыком company.int (т. Е. company ).

...