【问题标题】:How to put in an entry into dnsjava cache to override DNS lookup如何将条目放入 dnsjava 缓存以覆盖 DNS 查找
【发布时间】:2015-03-31 06:42:37
【问题描述】:

为了避免出于测试目的从公共 DNS 中查找主机名,我需要设置 /etc/hosts 文件,但我并不总是知道需要哪些主机名来覆盖 IP 地址,所以我尝试使用 dnsjava,因为默认的 Java DNS 解析不允许直接插入缓存。

【问题讨论】:

    标签: java dns dnsjava


    【解决方案1】:

    基本上,您需要为 dnsjava(A、AAAA 等)获取正确的 DNS 类型缓存。尽管也支持所有其他 DNS 条目类型,但很可能应该使用 A(对于 IPv4)或 AAAA(对于 IPv6)。您需要创建一个 Name 实例,并从中创建一个 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
    }
    

    【讨论】:

    • 那不行:addHostToCacheAs("kafka", "127.0.0.1"); InetAddress.getByName("kafka").getAddress(); throws java.net.UnknownHostException: kafka at org.xbill.DNS.spi.DNSJavaNameService.lookupAllHostAddr(DNSJavaNameService.java:147) at org.xbill.DNS.spi.DNSJavaNameService.invoke(DNSJavaNameService.java:97) at com.sun.proxy.$Proxy0.lookupAllHostAddr(Unknown Source)
    • 不知道这是否有什么不同,但我们使用的版本(根本没有升级)是 2.1.7。
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多