此图显示了域树。但是这与旧版NT4格式的域名有什么关系,例如" CONTOSO"。如果我想针对域验证用户凭据,并且只使用此格式" CONTOSO \ username"。我如何知道这与哪个域(图片中)相关?或者CONTOSO真的是域林吗?
另外,我可以从UPN名称后缀域映射到NT4域吗?从user@contoso.com到CONTOSO \ user?
我在 C#.NET 工作,所以我想要一个适合这种环境的解决方案...
答案 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