【问题标题】:Using Java for 'nslookup -type=srv'将 Java 用于“nslookup -type=srv”
【发布时间】:2010-04-22 22:54:48
【问题描述】:
Java 中有没有办法对 SRV 记录进行 Nslookup 搜索?
我需要绑定到 Active Directory,并希望使用 SRV 记录来帮助确定集群中哪些 AD 处于活动状态。
在命令行中,nslookup 搜索字符串为:'nslookup -type=srv _ ldap._tcp.ActiveDirectory 域名'
谢谢。
【问题讨论】:
标签:
java
active-directory
nslookup
srv
【解决方案1】:
正如 erickson 指出的,JNDI API 有一个provider for DNS using JNDI,您可以在该链接上阅读。有关查询_ldap._.tcp.mydomain.com 记录的工作示例,请参阅this code from Hudson。
我相信在使用 DNS 提供程序之前,您需要使用以下内容加载它(根据上面的 Hudson 代码修改):
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
env.put("java.naming.provider.url", "dns:");
DirContext ctx = new InitialDirContext(env);
您可以通过以下方式获取 SRV 记录:
Attributes attributes = ctx.getAttributes("_ldap._tcp.mydomain.com", new String[]{"SRV"});
Attribute a = attributes.get("SRV");
我已经成功地在几个项目中使用这样的代码来实现非常直接的 AD 集成。
【解决方案2】:
我从未使用过它,但我相信用于命名服务的 Java 的 "JNDI" API 有一个 DNS 提供程序。将域名查找为DirContext,然后检查其“SRV”属性。
DirContext ctx = new InitialDirContext();
Attributes attrs = ctx.getAttributes("dns:/y.com", new String[] {"SRV"});
就像我说的,我没有尝试过这个,但我希望它可以帮助你开始。