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 ?
Share:
13,508
MikeNQ
Author by

MikeNQ

A newbie developer.

Updated on June 22, 2022

Comments

  • MikeNQ
    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
    MikeNQ about 11 years
    internet work fine, else it wouldn't even able to resolve the host name to IP address.