ASP.NET C#获取有效域列表?

时间:2014-07-10 20:39:16

标签: c# asp.net dns

有没有办法从ASP.NET C#查询有效域列表,类似于登录寡妇时显示的列表?我想将此提供给客户端用户,以便他们可以选择用于登录Intranet Web应用程序的相应域。我尝试过使用Forest.GetCurrentForest但我似乎总是只回来一个域名,当时我肯定知道还有其他域名。

更新:(代码)

using System;
using System.Configuration;
using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.ActiveDirectory;


namespace Domains {
  class Program {
    static void Main(string[] args) {

      try {
        using (Forest forest = Forest.GetCurrentForest()) {
          Console.WriteLine("FOREST");
          Console.WriteLine("  {0}", forest.Name);
          Console.WriteLine("-------------------------------------------------------------------------------");
          Console.WriteLine("    DOMAINS");
          foreach (Domain domain in forest.Domains) {
            Console.WriteLine(String.Format("      {0}", domain.Name));
            Console.WriteLine("        TRUSTS");
            TrustRelationshipInformationCollection domainTrusts = domain.GetAllTrustRelationships();
            if (domainTrusts.Count == 0) {
              Console.WriteLine("          N/A");
            } else {
              foreach (TrustRelationshipInformation trust in domainTrusts) {
                DirectoryContext x = new DirectoryContext(DirectoryContextType.Domain, trust.TargetName);
                Console.WriteLine(String.Format("          {0} -> {1}", trust.SourceName, trust.TargetName));
              }
            }
            domain.Dispose();
          }
          Console.WriteLine("-------------------------------------------------------------------------------");
          Console.WriteLine("    TRUSTS");
          TrustRelationshipInformationCollection forestTrusts = forest.GetAllTrustRelationships();
          if (forestTrusts.Count == 0) {
            Console.WriteLine("      N/A");
          } else {
            foreach (TrustRelationshipInformation trust in forestTrusts) {
              Console.WriteLine(String.Format("      {0} -> {1}", trust.SourceName, trust.TargetName));
            }
          }
        }
      }


      catch (Exception ex) {
        Console.WriteLine(ex.Message);
      }
      Console.WriteLine("\nPress ESC to exit...");
      do {
        while (!Console.KeyAvailable) {
          // Do something
        }
      } while (Console.ReadKey(true).Key != ConsoleKey.Escape);


    }
  }
}

现在当我直接登录机器(远程桌面等)时,我得到了一个我可以登录的6个域的列表,但是当上面的代码在同一台机器上运行时(目前只是一个用于测试的控制台应用程序) ,还没有启用ASP.NET),我得到一个域,即我登录机器的当前域。

编辑:   我想也许我会感到困惑,也许我真正想要的是NetBios域名。因为我刚刚意识到域名+所有信任等于我所寻找的域名数量,但这些是全名,而不是我所期望的短名称。

更新:   所以我能够使用LDAP查询获取主域名的netbiosname,但我不知道如何获取受信任域名的netbiosname ...

1 个答案:

答案 0 :(得分:0)

如果您正在寻找森林使用的所有域名:

Forest.Domains

属性。返回一个DomainCollection。

GetCurrentForest仅返回当前用户上下文的林。

Forest.GetCurrentForest().Domains

应返回所有域名。