如何检测我的程序是否在Active Directory环境中运行?
时间:2020-03-06 14:47:39 来源:igfitidea点击:
如何检测我的程序是否在Active Directory环境中运行?
我正在使用Cand .Net 2.0
解决方案
一种方法是查询LOGONSERVER环境变量。这将为我们提供AD控制器的服务器名称...据我所知,如果当前未登录到域,则它将为空白(或者与当前工作站匹配?不确定)。
用法示例:
string ADServer = Environment.GetEnvironmentVariable("LOGONSERVER");
尝试获取Environment.UserDomainName并将其与Environment.MachineName进行比较。如果两者相同,则用户可能没有域。如果它们不相同,则用户将登录到必须具有目录服务器的域中。
来自http://msdn.microsoft.com/zh-cn/library/system.directoryservices.directoryentry.path.aspx
To bind to the current domain using LDAP, use the path "LDAP://RootDSE", then get the default naming context and rebind the entry.
因此,在没有域的情况下,对" LDAP:// RootDSE"的绑定将失败或者不返回任何内容。我没有亲自尝试过。
use System.DirectoryServices; // add reference to system.directoryservices.dll ... DirectoryEntry ent = new DirectoryEntry("LDAP://RootDSE"); String str = ent.Properties["defaultNamingContext"][0]; DirectoryEntry domain = new DirectoryEntry("LDAP://" + str);
与依赖于环境变量(用户可以删除或者添加到欺骗程序的环境变量)相比,这绝对是检查Active Directory的一种更干净的方法。
此代码将检查计算机本身是否是域的成员
using System.DirectoryServices.ActiveDirectory; bool isDomain = false; try { Domain.GetComputerDomain(); isDomain = true; } catch (ActiveDirectoryObjectNotFoundException) { }
但是,计算机可以在域中,但是当前登录的用户可以是本地用户帐户。如果你想检查这个,使用Domain.GetCurrentDomain()
函数
我发现了一些可行的方法:
使用System.Net.NetworkInformation;
IPGlobalProperties.GetIPGlobalProperties()。DomainName;
与本地用户和域用户一起使用。