通过.NET连接到Active Directory
我有一个虚拟机,我想用.NET连接到Active Directory,我已经连接到一台运行OpenLDAP的Ubuntu机器,但是当连接到AD时它运行不正常。通过.NET连接到Active Directory
我试图用连接的代码如下:
DirectoryEntry directoryEntry =
new DirectoryEntry("LDAP://192.168.1.1", @"EXAMPLE\Administrator", "Abc1234");
try
{
var test = directoryEntry.NativeObject;
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
}
看着当地人窗口中的变量的DirectoryEntry的GUID,名称等,说“功能评价超时”。
然后,当它到达try块时,它只是说“服务器不可操作”。
我也试过这个代码,并在“ldap.bind”失败告诉我说,“LDAP服务器不可用”
using (LdapConnection ldap = new LdapConnection("192.168.1.1:389"))
{
ldap.AuthType = AuthType.Basic;
ldap.SessionOptions.ProtocolVersion = 3;
ldap.Bind(new NetworkCredential(@"EXAMPLE\Administrator", "Abc1234"));
}
我知道服务器是启动和运行, 我知道他们有一个连接(机器可以互相ping通),但我不明白为什么它不工作。你们中的任何人都可以看到代码中是否有缺陷? (是的,我GOOGLE了所有关于连接到AD中的错误和各种问题的问这个问题之前,但没有任何解决方案都工作)
问候,
如果你的域名是“example.com”并假设你有一个组织单位(OU),称为“用户”。这对我来说非常合适。
但是,运行此代码的计算机已添加到AD域,并且它使用AD用户帐户运行。如果您没有将机器添加到您查询的相同域中,则可以尝试“运行方式”选项(Shift +右键单击)以启动程序或Visual Studio。
public static List<string> GetAllUsers()
{
List<string> users = new List<string>();
using (DirectoryEntry de = new DirectoryEntry("LDAP://OU=Users,DC=example,DC=local"))
{
using (DirectorySearcher ds = new DirectorySearcher(de))
{
ds.Filter = "objectClass=user";
SearchResultCollection src = ds.FindAll();
foreach (SearchResult sr in src)
{
using (DirectoryEntry user = new DirectoryEntry(sr.Path))
{
users.Add(new string(user.Properties["sAMAccountName"][0].ToString()));
}
}
}
}
return users;
}
我在自己的Active Directory测试环境中测试了您的代码(通过更改域名/密码...),它可以工作。如果我故意使用错误的密码进行测试,我会得到“无效凭据”。精细。
如果LDAP完全不可用,则将返回“服务器不可操作”。所以看来,例如端口389不可用。 防火墙?
LDAP SSL(端口636)??
如果你没有加入到要查询的同一个域中的计算机,您可以尝试“运行方式”选项(Shift +右键点击)启动程序或Visual Studio。
是的,这是我的第一个想法,因为我看到了这个问题。但是,在这种情况下,您似乎会得到另一个错误。
我的建议是:安装WireShark,网络分析仪,并检查通过线路发送的内容(假设您的AD在另一台机器上运行)。WireShark帮助我更多地使用AD,登录,SMB或其他协议诊断错误。
PS:
从拉维·帕特尔中号的回答是搜索的很好的例子,我几乎做同样在自己的代码。
问题已解决。我有两个网络适配器,适配器1有dhcp,我尝试连接的静态ip在适配器2上运行。我只是给适配器1提供了静态地址,并且能够以这种方式进行连接,看起来代码通过适配器1按默认方式连接。并感谢所有答案的家伙:)