【问题标题】:How to get short "domain name" from dns domain name?如何从 dns 域名中获取简短的“域名”?
【发布时间】:2009-07-31 19:47:31
【问题描述】:

如果我对这个主题的理解有一些不足之处,请原谅我,我只知道我对域和活动目录的了解,因为我从与他们合作中学到了一些东西。

域名有两种不同的“版本”。第一个是我所说的 DNS 域名,类似于 company.int(对于用户 max@company.int),第二个类似于 prefixname(对于用户前缀名\max),它们都指的是同一个东西。

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

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

EDIT2:此外,“前缀名称”是否还有其他名称?我不知道该怎么称呼它。

EDIT3:我尝试获取的值与 Windows 登录屏幕上显示的“登录到”(其中列出了域和您的计算机)的值相同。

EDIT4:我发现我可以通过执行以下操作来获得价值:

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

有谁知道获得这个名字的更好方法吗?

【问题讨论】:

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


    【解决方案1】:

    这应该可以,我希望:

        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”(通常)。

    马克

    【讨论】:

    • 我接受了你的回答,因为你付出了努力,而且它在技术上是正确的,尽管我采用了不同的方法。查看 Environment.UserDomainName 的代码让我确信我已经完成的 (Account.Value.Split('\\')[0]) 是要走的路。如果您不同意,请告诉我原因。
    • 谢谢,麦克斯!我相信环境变量拥有正确的域名 - 除非它因某种原因被清除。依赖旧的“DOS”环境有时会有点不稳定 - 可以清除和删除东西 - 我正在查询的 AD 容器将始终存在并且将始终保持您正在寻找的真正价值。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      前缀名称只是称为域

      编辑: Environment.UserDomainName 呢?

      【讨论】:

      • 没有。顺便说一句,只是对问题进行了更多澄清。
      • Environment.UserDomainName 是我想要的值,但我怀疑它正在为执行应用程序的用户获取该值,当我需要应用程序用户的值时(在考虑 Web 应用程序时这是不同的) 或任意 dns 域名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多