java DNS 缓存时间(成功时间和失败时间)代码

java 中的DNS默认成功保存时间 30 s,失败时间 10s


import java.lang.reflect.Field;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class MyClass {
	public static void main(String[] args) throws Exception {
		Date d = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    InetAddress.getByName("www.baidu.com");
	    try {
	        InetAddress.getByName("www.baiduxxx.com");
	    } catch (UnknownHostException e) {
	 
	    }
	 
	    System.out.println("current time:" + sdf.format(d));
	    String addressCache = "addressCache";
	    System.out.println(addressCache);
	    printDNSCache(addressCache);
	    String negativeCache = "negativeCache";
	    System.out.println(negativeCache);
	    printDNSCache(negativeCache);
	  }
	  private static void printDNSCache(String cacheName) throws Exception {
	    Class<InetAddress> klass = InetAddress.class;
	    Field acf = klass.getDeclaredField(cacheName);
	    acf.setAccessible(true);
	    Object addressCache = acf.get(null);
	    Class<?> cacheKlass = addressCache.getClass();//catchEntry
	    Field cf = cacheKlass.getDeclaredField("cache");
	    cf.setAccessible(true);//LinkedHashMap<String, CacheEntry>
	    Map<String, Object> cache = (Map<String, Object>) cf.get(addressCache);
	    for (Map.Entry<String, Object> hi : cache.entrySet()) {
	        Object cacheEntry = hi.getValue();
	        Class<?> cacheEntryKlass = cacheEntry.getClass();
	        Field expf = cacheEntryKlass.getDeclaredField("expiration");
	        expf.setAccessible(true);
	        long expires = (Long) expf.get(cacheEntry);
	 
	        Field af = cacheEntryKlass.getDeclaredField("addresses");
	        af.setAccessible(true);
	        InetAddress[] addresses = (InetAddress[]) af.get(cacheEntry);
	        List<String> ads = new ArrayList<String>(addresses.length);
	        for (InetAddress address : addresses) {
	            ads.add(address.getHostAddress());
	        }
	 
	        System.out.println(hi.getKey() + " "+new Date(expires) +" " +ads);
	    }
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值