@setlocal
@REM Test AD DNS domains for presence.
@REM For details see: http://serverfault.com/a/811622/253701
nslookup -type=srv _kerberos._tcp.%userdnsdomain%.
nslookup -type=srv _kerberos._udp.%userdnsdomain%.
@echo .
nslookup -type=srv _kpasswd._tcp.%userdnsdomain%.
nslookup -type=srv _kpasswd._udp.%userdnsdomain%.
@echo .
nslookup -type=srv _ldap._tcp.%userdnsdomain%.
@echo .
nslookup -type=srv _ldap._tcp.dc._msdcs.%userdnsdomain%.
@echo .
nslookup -type=srv _ldap._tcp.pdc._msdcs.%userdnsdomain%.
@echo .
@REM Those next few lines here are forest specific:
@REM Change the next line your current domain is not also the forest root.
@SET "DNSFORESTNAME=%USERDNSDOMAIN%"
nslookup -type=srv _ldap._tcp.gc._msdcs.%DNSFORESTNAME%.
@echo .
nslookup -type=srv _gc._tcp.%DNSFORESTNAME%.
在任何将 DNS 配置为使用 AD 的 DNS 服务器的计算机上:
开始 -> 运行 ->
nslookup
将DOMAIN_NAME替换为实际域名,例如example.com。在这里阅读更多。
对于属于域成员的计算机,环境变量 LOGONSERVER 包含对当前用户进行身份验证的 DC 的名称。这显然不会是多 DC 环境中的所有 DC,但如果您想要的只是一种快速查找域控制器名称的方法,那么可以从命令 shell 中找到:
将返回所有以“L”开头的环境变量,包括 DC 的名称。
一个未提及的、超级简单且快速的选项是从命令提示符运行它:
只需将“域名”替换为您的域名
您还可以运行其他一些选项以了解更多信息:
/dcname:domainname
获取域的 PDC 名称/dsgetdc:domainname
具有其他信息的标志尝试
nltest /?
在您的提示中获得更多选择!:)这将返回您在 Powershell 中最近的域控制器:
在 Windows 命令提示符下,运行
gpresult
. 你会得到:下面是对输出的一些分析
gpresult
。您还可以指定gpresult /z
以获取更详细的信息。DNS 和 DHCP 是最好的检查方式,因为网络上可能存在由 AD 域控制器管理或充当域控制器的 Unix/Linux 机器。
另外,考虑到活动目录只不过是微软的 Kerberos、LDAP、dhcp 和 dns 版本。与第 7 层以上相比,在较低层理解和调试事物会更好。这是因为操作系统会执行这些相同的请求,并且每个协议的下划线 RFC 实际上在 OSI 级别而不是“在此处插入最喜欢的工具”级别运行。
可以更进一步,在 dhcp 中查询选项 6、15 和 44,以获取域名、域名服务器和Wins/NetBIOS 名称服务器。
然后使用 dns 检查 _kerberos._tcp、_kpasswd._tcp、_LDAP._TCP.dc._msdcs 和 _ldap._tcp SRV 记录:
这分为三个区域,其中两个是协议支持的 DNS-SD 记录:
_kerberos._tcp
和_kpasswd._tcp
(在 UNIX/Linux/OSX+一些 windows 网络下也有_kadmin._tcp
)适用于 kerberos_ldap._tcp
用于 ldap(openldap、opendc、sun/oracle 目录、ms ad)_LDAP._TCP.dc._msdcs
是 Microsoft 唯一的 ldap 扩展,用于映射域控制器。粗 CMD
只需找到 DC 名称
另存为
GetDcNames.cmd
:运行为:
GetDcNames.cmd
。(注意:“%userdnsdomain%.”中的尾随点是故意的。它会阻止您的本地 nslookup 使用任何 DNS 搜索路径字符串。)
查找更多与 AD 相关的 DNS 域
我创建了一个快速而肮脏的批处理文件,这样我就不必记住 DNS 域名和/或必须全部输入它们。(列表可能不完整。)
在加入域的机器上工作。如果您的计算机未加入域,则必须手动将 USERDNSDOMAIN 设置为您想要的。
另存为
TestAdDnsRecords.cmd
:运行为
TestAdDnsRecords.cmd | more
. 有很多文本输出。来源
转到命令提示符并键入“net time” - 它会获取您的域控制器名称和时间。示例 - “\{DCName} 的当前时间是 {time}。
如果您只能访问 DNS,则可以通过 PowerShell 中的以下查询获取所有 DC 的列表:
这可以由任何有权访问 DNS 的用户完成。