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

6

简而言之 - 如何将NETBIOS域名翻译为FQDN?

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

我正在使用C#编程,但也可以接受COM/WMI/Win32解决方案。

4个回答

4

WINS与DNS完全相同,但用于NetBIOS名称而非域名。因此,您必须将一个名称方案转换为另一个名称方案。它们唯一共享的信息是IP地址,因此这是我所知道的唯一好的过程。 - Jon Adams

1
你对另一个域有什么样的访问权限?你要验证哪个域中的服务器/服务?
你是否可以通过IP访问另一个域中的服务器?如果是这样,那么你可以执行如下调用:
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部分并插入点来重新构建它)


0

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

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

LDAP名称的一部分是域FQDN。

嘿,这是一个权宜之计,但它像魔法一样有效。


0

可以使用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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接