zoukankan      html  css  js  c++  java
  • 获取邮箱的DNS和MX 工具类

    1.导入Maven  DNS  包:

    <dependency>
        <groupId>dnsjava</groupId>
        <artifactId>dnsjava</artifactId>
        <version>2.1.7</version>
    </dependency>
    <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
       <version>2.0</version>
    </dependency>

    2.DNS工具类:DNSUtil.java

    import com.google.common.collect.Lists;
    import org.xbill.DNS.*;
    import java.util.ArrayList;
    import java.util.List;
    public class DNSUtil {
        class DNSType{
            public static final int MX=1;
            public static final int A=2;
        }
        public static List<String> dnsALookup(final String adr)
        {
            List<String> list= Lists.newArrayList();
            try {
                final Lookup lookup = new Lookup(adr, Type.A);
                lookup.setResolver(new SimpleResolver());
                lookup.setCache(null);
                final Record[] records = lookup.run();
                if (lookup.getResult() == Lookup.SUCCESSFUL)
                    for (final Record record : records) {
                        if (record instanceof ARecord) {
                            final ARecord ptr = (ARecord) record;
                                list.add(ptr.getAddress().getHostAddress().toString());
                        }
                    }
            }catch (Exception e){
                e.printStackTrace();
            }
            return list;
        }
    
        public static List<String> mxByDomain(String host){
            try {
    
                DnsThread dnsThread=new DnsThread(host,DNSType.MX);
                dnsThread.start();
                dnsThread.join(5000);
                List<String> dnsList=dnsThread.getDnsList();
                return dnsList;
            } catch (Exception e) {
                return new ArrayList();
            }
        }
    
        public static List<String> reverseDNSLookup(final String adr)
        {
            List<String> list= Lists.newArrayList();
            try {
                final Lookup lookup = new Lookup(adr, Type.MX);
                lookup.setResolver(new SimpleResolver());
                lookup.setCache(null);
                final Record[] records = lookup.run();
                if (lookup.getResult() == Lookup.SUCCESSFUL)
                    for (final Record record : records) {
                        if (record instanceof MXRecord) {
                            final MXRecord ptr = (MXRecord) record;
                            list.add(ptr.getTarget().toString());
                        }
                    }
            }catch (Exception e){
                e.printStackTrace();
            }
            return list;
        }
    
        public static class DnsThread extends Thread {
    
            private List<String> dnsList = new ArrayList();
            private String host = "";
            private int type=0;
    
            DnsThread(String host,int type) {
                this.host = host;
                this.type=type;
            }
    
    
            @Override
            public void run() {
                lookup(host);
            }
    
            public void lookup(String host) {
                try {
                    if(type==DNSType.MX)
                        this.dnsList = reverseDNSLookup(host);
                    if(type==DNSType.A)
                        this.dnsList = dnsALookup(host);
                } catch (Exception e) {
                }
            }
    
            public List<String> getDnsList() {
                return dnsList;
            }
    
            public void setDnsList(List<String> dnsList) {
                this.dnsList = dnsList;
            }
        }
    
        public static void main(String[] args) {
            System.out.println(DNSUtil.dnsALookup("qq.com"));
            System.out.println(DNSUtil.mxByDomain("qq.com"));
        }
    
    }
    
     

    2.DNS工具类(改版):DNSUtils.java

    package com.lyn.util;
    
    import org.xbill.DNS.*;
    import javax.naming.NamingException;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.Attributes;
    import javax.naming.directory.InitialDirContext;
    import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.List;
    
    public class DNSUtils{
        public static final Long TIMEOUT=3000l;
        class DNSType{
            public static final int MX=1;
            public static final int A=2;
        }
    
        public static List<String> mxByDomain(String host){
            try {
                long a=System.currentTimeMillis();
                DnsThread dnsThread=new DnsThread(host,DNSType.MX);
                dnsThread.start();
                dnsThread.join(TIMEOUT);
                long b=System.currentTimeMillis();
                List<String> dnsList=dnsThread.getDnsList();
                System.out.println(host+"耗时"+Double.valueOf((b-a)/1000)+"s");
                return dnsList;
            } catch (Exception e) {
               return new ArrayList<>();
            }
        }
    
        public static List<String> aByDomain(String host){
            try {
                long a=System.currentTimeMillis();
                DnsThread dnsThread=new DnsThread(host,DNSType.A);
                dnsThread.start();
                dnsThread.join(TIMEOUT);
                long b=System.currentTimeMillis();
                List<String> dnsList=dnsThread.getDnsList();
    //            System.out.println(host+"DNS检测耗时"+Double.valueOf((b-a)/1000)+"s");
                return dnsList;
            } catch (Exception e) {
                return new ArrayList<>();
            }
        }
    
        public static List<String> reverseDNSLookup(final String adr) throws Exception
        {
            List<String> resultList=searchDNSList(adr);
            if(resultList.size()>0){
                return resultList;
            }
    
            List<String> list= new ArrayList<>();
            final Lookup lookup = new Lookup(adr, Type.MX);
            lookup.setResolver(new SimpleResolver());
            lookup.setCache(null);
            final Record[] records = lookup.run();
            if (lookup.getResult() == Lookup.SUCCESSFUL)
                for (final Record record : records) {
                    if (record instanceof MXRecord) {
                        final MXRecord ptr = (MXRecord) record;
                        list.add(ptr.getTarget().toString());
                    }
                }
            return list;
        }
    
        /**
    
         * @param address 查询地址
    
         * @return
    
         */
    
        public static List<String> searchDNSList(String address) {
            InitialDirContext context = null;
            String serverAddr="202.106.0.20";
            List<String> resultList = new ArrayList<String>();
            try {
                Hashtable<String, String> env = new Hashtable<String, String>();
                env.put("java.naming.factory.initial",
                        "com.sun.jndi.dns.DnsContextFactory");
                env.put("java.naming.provider.url", "dns://" + serverAddr + "/");
                env.put("com.sun.jndi.ldap.read.timeout", "5000");
                context = new InitialDirContext(env);
                String dns_attrs[] = { "MX" };
                Attributes attrs = context.getAttributes(address, dns_attrs);
                Attribute attr = attrs.get("MX");
                if (attr != null) {
                    for (int i = 0; i < attr.size(); i++) {
                        String str=(String) attr.get(i);
                        if(str.indexOf(" ")!=-1)
                        resultList.add(str.split(" ")[1]);
                        else
                         resultList.add(str);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(context!=null){
                    try {
                        context.close();
                    } catch (NamingException e) {
                    }
                }
            }
            return resultList;
        }
    
        public static List<String> dnsALookup(final String adr) throws Exception
        {
            List<String> list= new ArrayList<>();
            final Lookup lookup = new Lookup(adr, Type.A);
            lookup.setResolver(new SimpleResolver());
            lookup.setCache(null);
            final Record[] records = lookup.run();
            if (lookup.getResult() == Lookup.SUCCESSFUL) {
                for (final Record record : records) {
                    if (record instanceof ARecord) {
                        final ARecord ptr = (ARecord) record;
                       list.add(ptr.getAddress().getHostAddress().toString());
                    }
                }
            }
            return list;
        }
    
        public static class DnsThread extends Thread {
            private List<String> dnsList = new ArrayList<>();
            private String host = "";
            private int type=0;
             DnsThread(String host,int type) {
                this.host = host;
                this.type=type;
            }
    
            @Override
            public void run() {
                lookup(host);
            }
    
            public void lookup(String host) {
                try {
                    if(type==DNSType.MX)
                        this.dnsList = reverseDNSLookup(host);
                    if(type==DNSType.A)
                        this.dnsList = dnsALookup(host);
                } catch (Exception e) {
                }
            }
    
            public List<String> getDnsList() {
                return dnsList;
            }
    
            public void setDnsList(List<String> dnsList) {
                this.dnsList = dnsList;
            }
        }
    
     
        public static void main(String[] args){
              String[] domain=new String[]{"gmail.com","xinnet.com","wo.cn","138.com"};
              for(String ss: domain) {
                  List<String> list = DNSUtils.mxByDomain(ss);
                  System.out.println("得到Mx length:"+list.size());
                  System.out.println("得到Mx:"+ JSONUtils.obj2json(list));
              }
    
    //        long a=System.currentTimeMillis();
    //         System.out.println(DNSUtils.mxByDomain("gmail.com"));
    //        long b=System.currentTimeMillis();
    //        System.out.println(b-a);
    //        String domain=DNSUtils.mxByDomain("gmail.com").get(0);
    //        System.out.println(DNSUtils.mxByDomain("xinnet.com"));
    //        long c=System.currentTimeMillis();
    //        System.out.println(c-b);
    //        System.out.println(DNSUtils.aByDomain(domain));
    //        long d=System.currentTimeMillis();
    //        System.out.println(d-c);
    //        long a=System.currentTimeMillis();
    //        try {
    //            System.out.println(DNSUtils.reverseDNSLookup("189.cn"));
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        }
    //        System.out.println(System.currentTimeMillis()-a);
    //        try {
    //           List ip= DNSUtils.mxByDomain("qq");
    //            System.out.println(ip);
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        }
        }
    }
  • 相关阅读:
    爬取动态html网页,requests+execjs
    pycharm2019.2一个奇怪的bugger,执行后输出内容被莫名处理
    博客园啥时候升级了,刚看到
    在浏览器的市场上,IE依然是放弃了,firefox还在继续~~
    jetbrain rider 逐渐完美了,微软要哭了么?
    div层的滑入滑出实例
    关于js的<、>、=、<=、>=的比较
    Jquery实现左右轮播效果
    Html5离线缓存详细讲解
    CANVAS画布与SVG的区别
  • 原文地址:https://www.cnblogs.com/yysbolg/p/10482906.html
Copyright © 2011-2022 走看看