Java DNSLookup get DNS attributes
13,508
I have tried with provided class (DNSLookup.java
), it's working for me.
My underestanding is it's giving timeOut exception, means its not able to connect to server.
Check your internet connection ?
Comments
-
MikeNQ almost 2 years
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).
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.
[EDIT]: The problem seem to be with our internet, because using other wifi, the program run just fine.
Many thanks,
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(); } } }
Output:
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
-
MikeNQ about 11 yearsinternet work fine, else it wouldn't even able to resolve the host name to IP address.