我有以下代码:
import java.net.InetAddress;
public class lookup {
public static void main(String[] args) throws Exception {
for(String host : args){
for(InetAddress addr : InetAddress.getAllByName(host)){
System.out.println(addr.getHostAddress());
}
}
}
}
我们最近更改了主机的CNAME,我们称之为foo.example.com,指向bar.example.com指向baz.example.com。如果我跑:
java -Djava.net.preferIPv4Stack=true lookup foo.example.com
我按预期获得了baz.example.com的IP地址。但是如果我跑:
java lookup foo.example.com
我仍然可以获得bar.example.com的IP地址。
我已经确认bar.example.com和baz.example.com都没有AAAA记录。 dig
和ping
都按预期解析了baz.example.com。如何让java的ipv6堆栈正确解决这个问题?
答案 0 :(得分:1)
问题是nscd正在运行并缓存了记录。为什么它不尊重TTL以及为什么ping不使用缓存仍然是一个谜。
答案 1 :(得分:0)
java.home / LIB /安全/ java.security
并查看这是否可以解决问题:
networkaddress.cache.ttl: 10
networkaddress.cache.negative.ttl: 10
值为-1(networkaddress.cache的默认值)表示“永远缓存”,这可能导致您在上面看到的内容。
答案 2 :(得分:0)
可能是您的操作系统知道两个不同的DNS服务器,一个可以通过IPv4访问,另一个可以通过IPv6访问和首选,并且IPv6首选DNS服务器仍在缓存旧配置?