2013-03-06 5 views
2

Я довольно новичок в сетевых записях DNS и нуждаюсь в программе, которая может запускать поиск, чтобы получить 3 основных DNS-записи домена (A, MX, NS).Java DNSLookup получает атрибуты DNS

Я искал Java решения здесь там и мой последний класс, как показано ниже: Однако, я всегда получите NameException и не могу найти причину этого.

[РЕДАКТИРОВАТЬ]: Проблема, похоже, связана с нашим интернетом, потому что, используя другой Wi-Fi, программа работает нормально.

Большого спасибо,

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 

ответ

2

Я попытался с обеспеченным классом (DNSLookup.java), он работает для меня.

Мое недооценивание - это время, исключающее исключение, означает, что он не может подключиться к серверу.

Check your internet connection ? 
+0

Интернет работает нормально, иначе он даже не сможет разрешить имя хоста IP-адресу. – MikeNQ