Java DNSLookup获取DNS属性 [英] Java DNSLookup get DNS attributes
问题描述
我对网络DNS记录非常新鲜,需要一个可以运行查找功能的程序来获取域(A,MX,NS)的3个主要DNS记录。
I'm quite new to the network DNS records and need a program that can run lookup to get 3 main DNS records of a domain (A,MX,NS).
我一直在寻找一个java解决方案,我的最后一个类如下:
但是,我总是会得到一个 NameException ,找不到它的原因
I have been looking for a java solution here an there and my final class is as below: However, I will always get a NameException and can't find the reason for it.
:这个问题似乎与我们的互联网,因为使用其他wifi,程序运行正常。
: The problem seem to be with our internet, because using other wifi, the program run just fine.
非常感谢,
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Hashtable;
public class DNSLookup
{
public static void main(String args[])
{
String host = "google.com";
try
{
InetAddress inetAddress = InetAddress.getByName(host);
// show the Internet Address as name/address
System.out.println(inetAddress.getHostName() + " " + inetAddress.getHostAddress());
Hashtable<String, String> env = new Hashtable<String, String>();
//env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.dns.DnsContextFactory");
//env.put(Context.PROVIDER_URL, "dns://google.com");
// get the default initial Directory Context
InitialDirContext iDirC = new InitialDirContext(env);
// get the DNS records for inetAddress
Attributes attributes = iDirC.getAttributes("dns:/"+inetAddress.getHostName());
// get an enumeration of the attributes and print them out
NamingEnumeration<?> attributeEnumeration = attributes.getAll();
System.out.println("");
while (attributeEnumeration.hasMore())
{
System.out.println("" + attributeEnumeration.next());
}
attributeEnumeration.close();
}
catch (UnknownHostException exception)
{
System.err.println("ERROR: Cannot access '" + host + "'");
}
catch (NamingException exception)
{
System.err.println("ERROR: No DNS record for '" + host + "'");
exception.printStackTrace();
}
}
}
输出:
google.com 74.125.128.113
ERROR: No DNS record for 'google.com'
javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name 'google.com'
at com.sun.jndi.dns.DnsClient.query(Unknown Source)
at com.sun.jndi.dns.Resolver.query(Unknown Source)
at com.sun.jndi.dns.DnsContext.c_getAttributes(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(Unknown Source)
at com.sun.jndi.toolkit.url.GenericURLDirContext.getAttributes(Unknown Source)
at javax.naming.directory.InitialDirContext.getAttributes(Unknown Source)
at javax.naming.directory.InitialDirContext.getAttributes(Unknown Source)
at gimasys.dnsCrawler.DNSLookup.main(DNSLookup.java:35)
Caused by: java.net.SocketTimeoutException: Receive timed out
at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
at java.net.DualStackPlainDatagramSocketImpl.receive0(Unknown Source)
at java.net.AbstractPlainDatagramSocketImpl.receive(Unknown Source)
at java.net.DatagramSocket.receive(Unknown Source)
at com.sun.jndi.dns.DnsClient.doUdpQuery(Unknown Source)
... 9 more
推荐答案
我已经尝试了提供的类( DNSLookup.java
),它正在为我工作。
I have tried with provided class (DNSLookup.java
), it's working for me.
我不满的是给予timeOut异常,意味着它不能连接到服务器。
My underestanding is it's giving timeOut exception, means its not able to connect to server.
Check your internet connection ?
这篇关于Java DNSLookup获取DNS属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!