将NETBIOS域转换为FQDN(完全限定域名)

时间:2008-11-04 16:46:28

标签: c# active-directory dns netbios fqdn

简而言之 - 如何将NETBIOS域转换为FQDN?

详细说明: 假设我在域A中,并且我拥有域B的用户凭据,该域与域A具有信任关系(我可以验证凭据)。 当我拥有的是来自该域的某个经过身份验证的用户的凭据(包括netbios域名)时,如何获取域B的FQDN?

我在C#编码,但也欢迎COM / WMI / Win32解决方案。

4 个答案:

答案 0 :(得分:3)

这可能不是最优的,但看起来您可以执行NetBIOS名称查询以获取IP地址,然后执行反向DNS查找以从中获取FQDN ...

http://www.protocolbase.net/protocols/protocol_NBNS.php

(反向DNS步骤易于查找)

答案 1 :(得分:1)

您对其他域有什么样的访问权限?您正在对其他域中的服务器/服务进行身份验证?

您是否可以访问其他域中的域服务器?如果是这样,那么你可以这样打电话:

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”表示FQDN的回复(只需通过删除DC部分并插入点来重建它)

答案 2 :(得分:0)

使用WinNT提供程序绑定到域并筛选所有用户帐户。开始枚举用户帐户。

如果用户帐户sAMAccount名称不包含字符串“duplicate”,则退出循环并使用NameTranslate对象查找帐户的LDAP名称。

LDAP名称的一部分是域FQDN。

嘿,这是一个软糖,但它就像一个魅力。

答案 3 :(得分:0)

vanara collection of win32 libraries可以用于此目的。 由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;
}