LDAP netB ios Ошибка поиска субдомена - PullRequest
0 голосов
/ 06 августа 2020

Я столкнулся с одной серьезной проблемой при получении NetBiosName на уровне поддомена. Ниже приведен фрагмент кода, который я использую для получения NetBiosName из Active Directory. Howerver, этот код отлично работает для корневого / родительского домена и не работает на поддомене.

     public string GetDomainNetBios(string sDomainFqdn, NetworkCredential netCred)
    {

        string sNetBios = string.Empty;
        try
        {
            lock (connectionLock)
            {
                SearchResponse dirRes = (SearchResponse) LdapConnectionUsers.SendRequest(new
                    SearchRequest(
                        null,
                        "configurationNamingContext=*",
                        SearchScope.Base,
                        "configurationNamingContext"
                    ));
                
                if (dirRes != null)
                {
                    string sConfPartDn =
                        dirRes.Entries[0].Attributes["configurationNamingContext"][0].ToString();
                    dirRes = (SearchResponse) LdapConnectionUsers.SendRequest(new SearchRequest(
                        sConfPartDn,
                        String.Format(CultureInfo.InvariantCulture, "(&(nETBIOSName=*)(dnsRoot={0}))", sDomainFqdn),
                        SearchScope.Subtree,
                        "nETBIOSName"
                    ));
                }

                if (dirRes != null && dirRes.Entries.Count > 0)
                {
                    sNetBios = dirRes.Entries[0].Attributes["nETBIOSName"][0].ToString();
                }
                _netBiosDomainName = sNetBios;
                if (!netBiosDictionry.ContainsKey(_currentDomain))
                    netBiosDictionry.Add(_currentDomain, _netBiosDomainName);
            }
            return sNetBios;
        }
        catch (Exception ex)
        {
            Common.TraceError(Common.TraceChannel, String.Format(CultureInfo.InvariantCulture,
                "GetDomainNetBios operation failed due to {0}", (ex).Message));
            throw ex;
        }

    }

SearchScope.Subtree перемещает вызов в корневой / родительский домен, однако, поскольку пользователь в поддомене не аутентифицирован в родительский домен / root поиск не выполняется. Как получить NetBiosName на том же уровне поддомена? Я пробовал следующие вещи:

  1. SearchScope.OneLevel и SearchScope.Base, которые ограничивают вызовы субдомена, но не повезло, и NetBiosName становится пустым.
  2. Удалено dnsRoot = полностью Полное доменное имя из запроса. Но я получаю тот же результат. NetBiosName пусто.

Следовательно, я хочу получить NetBiosName в субдомене.

Кто-нибудь может помочь в этом?

...