我试图再次使用digg和Java在linux shell中查询特定的dns服务器。dig命令有效。但是java方式没有。怎么了?
dig@dns.nic.it test.it;;问题部分:;test.it.IN A;;权限部分:test.it.10800 IN NS dns2.technolail.com。test.it.10800 IN NS dns.technorail.com。test.it.10800 IN NS dns3.arupadns.net。test.it.10800 IN NS dns4.arupadns.z。
java方式
public static void rootDNSLookup(String domainName)throws NamingException{字符串服务器="dns://dns.nic.it";Hashtable env=新Hashtable();env.put("java.nameing.factory.initial","com.sun.jndi.dns.DnsContextFactory");env.put("java.nameing.provider.url",服务器);DirContext ictx=新的InitialDirContext(env);属性attrs=ictx.getAttributes(域名,新字符串[]{"A","AAAA","NS","SRV"});System.out.println(attrs);NamingEnumeration e=attrs.getAll();while(e.hasMoreElements()){属性a=e.next();System.out.println(a.getID()+"="+a.get());}}
java打印:
没有属性
最好的方法是使用库dnsjava。
您要查找的特定类是SimpleResolver。它有两个构造函数。当在没有参数的情况下使用时,它将使用系统的DNS设置。如果您提供一个IP地址,它将强制将其作为DNS服务器。你可以在这里找到一个很好的用法示例:dnsjava示例。
不要试图同时获取所有属性。
用途:
Attributes attrs = ictx.getAttributes(domainName, new String[] {"A"});
使用一个包含所有所需属性的String数组,并对传入该属性的调用进行迭代。
String[] attributes = {"A", "AAAA", "NS", "SRV"};
for (String attribute : attributes) {
...
Attributes attrs = ictx.getAttributes(domainName, new String[] {attribute});
...
}