简而言之 - 如何将NETBIOS域名翻译为FQDN?
细节: 假设我在A域中,并且我具有与A域建立信任关系的B域用户凭据(我可以对凭据进行身份验证)。 当我仅拥有来自该域的某个经过身份验证的用户凭据,包括netbios域名时,如何获取B域的FQDN?
我正在使用C#编程,但也可以接受COM/WMI/Win32解决方案。
简而言之 - 如何将NETBIOS域名翻译为FQDN?
细节: 假设我在A域中,并且我具有与A域建立信任关系的B域用户凭据(我可以对凭据进行身份验证)。 当我仅拥有来自该域的某个经过身份验证的用户凭据,包括netbios域名时,如何获取B域的FQDN?
我正在使用C#编程,但也可以接受COM/WMI/Win32解决方案。
DirectoryEntry rootDSE = new DirectoryEntry("LDAP://10.11.12.13/rootDSE", @"DOMAIN\Username", "Password");
Console.WriteLine(rootDSE.Properties["defaultNamingContext"].Value);
(将10.11.12.13替换为域服务器地址)。
您将收到一个形式为“DC=company,DC=org”的回复,表示完全限定域名(只需通过删除DC部分并插入点来重新构建它)
使用WinNT提供程序绑定到域并过滤所有用户帐户。开始枚举用户帐户。
如果用户帐户sAMAccount名称不包含字符串“duplicate”,则从循环中退出并使用NameTranslate对象查找帐户的LDAP名称。
LDAP名称的一部分是域FQDN。
嘿,这是一个权宜之计,但它像魔法一样有效。
可以使用Vanara Win32库集合来实现。
NetApi32.dll中的DsGetDcName API提供了将NetBIOS域名转换为DNS域名的功能(作为副作用)。
在VS中打开NuGet包管理器,获取Vanara.PInvoke.NetApi32
包。
这两个方法可以将NetBIOS名称转换为DNS名称,反之亦然。
public static string ResolveNetBIOSDomainNameToDnsName(string netBIOSName)
{
Vanara.PInvoke.NetApi32.DOMAIN_CONTROLLER_INFO domainDcInfo =
Vanara.PInvoke.NetApi32.DsGetDcName(Vanara.PInvoke.NetApi32.DsGetDcNameFlags.DS_RETURN_DNS_NAME | Vanara.PInvoke.NetApi32.DsGetDcNameFlags.DS_IS_FLAT_NAME, null, netBIOSName);
return domainDcInfo.DomainName;
}
public static string ResolveDNSDomainNameToNetBIOSName(string dnsName)
{
Vanara.PInvoke.NetApi32.DOMAIN_CONTROLLER_INFO domainDcInfo =
Vanara.PInvoke.NetApi32.DsGetDcName(Vanara.PInvoke.NetApi32.DsGetDcNameFlags.DS_RETURN_FLAT_NAME | Vanara.PInvoke.NetApi32.DsGetDcNameFlags.DS_IS_DNS_NAME, null, dnsName);
return domainDcInfo.DomainName;
}