域名CONTOSO和域名east.contoso.com之间有什么关系?

时间:2014-11-25 12:23:08

标签: .net active-directory

此图显示了域树。但是这与旧版NT4格式的域名有什么关系,例如" CONTOSO"。如果我想针对域验证用户凭据,并且只使用此格式" CONTOSO \ username"。我如何知道这与哪个域(图片中)相关?或者CONTOSO真的是域林吗?

另外,我可以从UPN名称后缀域映射到NT4域吗?从user@contoso.com到CONTOSO \ user?

我在 C#.NET 工作,所以我想要一个适合这种环境的解决方案...

Domain Tree

2 个答案:

答案 0 :(得分:0)

每个域都有NetBIOS名称和DNS名称。它们不必相关(根本),但它们通常是相关的。在您的情况下,根域的DNS名称为contoso.com,并且很可能是CONTOSO的NetBIOS名称。孩子们可能有EAST和WEST的NetBIOS名称,但是,他们可能真的是什么。

要执行您想要的操作(翻译名称格式),请查看DsCrackNames API。 http://msdn.microsoft.com/en-us/library/ms675970(v=vs.85).aspx

答案 1 :(得分:0)

我会将此作为对前一个答案的评论添加,但显然我没有足够的声誉来做到这一点(这是一个很好的规则......)。

之前的回答建议使用DsCrackNames函数将名称从DNS名称转换为NetBIOS名称,但我认为这是不可能的,因为DS_NAME_FORMAT结构的MSDN文档说: “DS_DNS_DOMAIN_NAME - 目录服务(DS)API不支持”。

那么您是如何指定您希望使用该功能将域名转换为(或转换为)DNS格式?我想知道是否有人真正成功地完成了这项工作,因为我总是这样做是使用带有DS_IS_FLAT_NAME标志的DsGetDcName函数和DS_RETURN_DNS_NAME标志(从NetBIOS转换为DNS,反之亦然)用于DNS到NetBIOS)。

如果它对OP有帮助,这里是我在vb.net中对DsGetDcName API的API定义(应该很容易转换为c#.net):

<DllImport("Netapi32.dll", EntryPoint:="DsGetDcNameW", SetLastError:=True)> _
Friend Shared Function DsGetDcName(<MarshalAsAttribute(UnmanagedType.LPTStr), InAttribute()> ByVal computerName As String, <MarshalAsAttribute(UnmanagedType.LPTStr), InAttribute()> ByVal domainName As String, <InAttribute()> ByVal domainGuid As IntPtr, <MarshalAsAttribute(UnmanagedType.LPTStr), InAttribute()> ByVal siteName As String, <InAttribute()> ByVal flags As Integer, <Out()> ByRef domainControllerInfo As IntPtr) As UInteger
End Function

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Public NotInheritable Class DomainControllerInfo
    Public DomainControllerName As String
    Public DomainControllerAddress As String
    Public DomainControllerAddressType As Integer
    Public DomainGuid As Guid
    Public DomainName As String
    Public DnsForestName As String
    Public Flags As Integer
    Public DcSiteName As String
    Public ClientSiteName As String
    Public Sub New()
    End Sub
End Class

Public Enum DsGetDcNameFlags As Integer
    DS_FORCE_REDISCOVERY = &H1
    DS_DIRECTORY_SERVICE_REQUIRED = &H10
    DS_DIRECTORY_SERVICE_PREFERRED = &H20
    DS_GC_SERVER_REQUIRED = &H40
    DS_PDC_REQUIRED = &H80
    DS_BACKGROUND_ONLY = &H100
    DS_IP_REQUIRED = &H200
    DS_KDC_REQUIRED = &H400
    DS_TIMESERV_REQUIRED = &H800
    DS_WRITABLE_REQUIRED = &H1000
    DS_GOOD_TIMESERV_PREFERRED = &H2000
    DS_AVOID_SELF = &H4000
    DS_ONLY_LDAP_NEEDED = &H8000
    DS_IS_FLAT_NAME = &H10000
    DS_IS_DNS_NAME = &H20000
    DS_TRY_NEXTCLOSEST_SITE = &H40000
    DS_DIRECTORY_SERVICE_6_REQUIRED = &H80000
    DS_WEB_SERVICE_REQUIRED = &H100000
    DS_RETURN_DNS_NAME = &H40000000
    DS_RETURN_FLAT_NAME = &H80000000
End Enum