2015-03-30 48 views
0

在试图避免主机名从公共DNS用于测试目的抬起头来,我需要基本设置/ etc/hosts文件,但我并不总是知道我需要重写IP地址的主机名,所以我试图使用dnsjava,因为默认的Java DNS解析不允许直接插入缓存。如何把在进入dnsjava缓存覆盖DNS查找

回答

-1

基本上,你需要抢dnsjava正确的DNS缓存类型(A,AAAA,等等)。 A(对于IPv4)或AAAA(对于IPv6)很可能是您应该使用的,尽管也支持所有其他DNS条目类型。您需要创建一个Name实例,并从中创建一个将被插入到Cache中的ARecord。示例如下:

public void addHostToCacheAs(String hostname, String ipAddress) throws UnknownHostException, TextParseException { 
    //add an ending period assuming the hostname is truly an absolute hostname 
    Name host = new Name(hostname + "."); 
    //putting in a good long TTL, and using an A record, but AAAA might be desired as well for IPv6 
    Record aRec = new ARecord(host, Type.A, 9999999, getInetAddressFromString(ipAddress)); 
    Lookup.getDefaultCache(Type.A).addRecord(aRec, Credibility.NORMAL,this); 
} 


public InetAddress getInetAddressFromString(String ip) throws UnknownHostException { 
    //Assume we are using IPv4 
    byte[] bytes = new byte[4]; 
    String[] ipParts = ip.split("\\."); 
    InetAddress addr = null; 
    //if we only have one part, it must actually be a hostname, rather than a real IP 
    if (ipParts.length <= 1) { 
     addr = InetAddress.getByName(ip); 
    } else { 
     for (int i = 0; i < ipParts.length; i++) { 
      bytes[i] = Byte.parseByte(ipParts[i]); 
     } 
     addr = InetAddress.getByAddress(bytes); 
    } 
    return addr 
} 
+0

这不起作用:'addHostToCacheAs(“kafka”,“127.0.0.1”); 。InetAddress.getByName( “卡夫卡”)的getAddress();''抛出的java.net.UnknownHostException:卡夫卡 \t在org.xbill.DNS.spi.DNSJavaNameService.lookupAllHostAddr(DNSJavaNameService.java:147) \t在org.xbill .DNS.spi.DNSJavaNameService.invoke(DNSJavaNameService.java:97) \t at com.sun.proxy。$ Proxy0.lookupAllHostAddr(Unknown Source)' – dzieciou 2017-10-20 09:43:05

+0

如果这有什么不同,但我们正在使用的版本(根本没有升级)是2.1.7。 – Drizzt321 2017-10-20 21:01:27