【问题标题】:Fetch DNS record information java获取DNS记录信息java
【发布时间】:2013-01-08 03:35:37
【问题描述】:

java 中是否有一个库可以从底层服务器获取准确的 DNS 信息?

我不仅对 IPDNS 的映射感兴趣,还对其他记录感兴趣:A、AAAA、MX、NS、SOA、RRSIG 等

【问题讨论】:

    标签: java dns ip mx-record


    【解决方案1】:

    如果您的代码在 Oracle VM 上运行,您可以使用 JNDI 的 DNS 提供程序,例如:

    Hashtable<String, Object> env = new Hashtable<String, Object>();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
    env.put(Context.PROVIDER_URL, "dns:");
    
    DirContext ctx = new InitialDirContext(env);
    Attributes atts = ctx.getAttributes("stackexchange.com", new String[] {"MX"});
    NamingEnumeration<? extends Attribute> e = atts.getAll();
    while(e.hasMore()) {
        System.out.println(e.next().get());
    }
    

    【讨论】:

    • 此解决方案存在 ipv6 相关问题
    • @builtofire:需要解释一下吗?
    • @builtofire:更准确地说,这里查询的MX记录包含优先级和主机名,与IPv4或IPv6地址没有任何关系。您说的是哪种 IPv6 问题?
    • 如果机器上启用了 ipv6,你会得到一个这样的异常:Exception: Failed to resolve Mail Exchanger for host : gmail.com java.lang.NumberFormatException: For input string: "4f8:0:a111::add:9898" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.7.0_51] at java.lang.Integer.parseInt(Integer.java:492) ~[?:1.7.0_51] at java.lang.Integer.parseInt(Integer.java:527) ~[?:1.7.0_51] at com.sun.jndi.dns.DnsClient.&lt;init&gt;(DnsClient.java:122) ~[?:1.7.0_51] at com.sun.jndi.dns.Resolver.&lt;init&gt;(Resolver.java:61) ~[?:1.7.0_51] at
    • 看起来是系统的 DNS 配置有问题,而不是我的代码或 Java API 中的 DNS 实现有问题。 4f8:0:a111::add:9898 不是有效的 IPv6 地址。如果您已将其配置为您的 DNS 服务器,而某些软件无法处理此问题,则说明您的 DNS 配置有问题。
    【解决方案2】:

    最好使用 dnsjava 库:

    <dependency>
        <groupId>dnsjava</groupId>
        <artifactId>dnsjava</artifactId>
    </dependency>
    

    一个例子是这样的:

    Record[] rs = new Lookup("maildomain.com", Type.MX).run();
    

    【讨论】:

    • 如何在android中使用
    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2013-09-18
    • 2011-08-19
    相关资源
    最近更新 更多