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;}@Overridepublic 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]);elseresultList.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;}@Overridepublic 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();
//        }
    }
}

转载于:https://www.cnblogs.com/yysbolg/p/10482906.html

获取邮箱的DNS和MX 工具类相关推荐

  1. Android获取通讯录中的所有联系人工具类

    一个获取通讯录中所有联系人的工具类,存储在Map中,Map中key为手机号,value为联系人的姓名.还提供了一个根据手机号查询该手机号的联系人姓名的功能. 注:同一联系人可以存储多个手机号,但是同一 ...

  2. 获取Spring容器管理的Bean工具类

    很多时候我们在一些不受spring管理的类中需要用到spring管理的Bean,那么这个时候可以使用如下工具类从spring容器中获取相关的Bean实例. @Component public clas ...

  3. 【Java获取国家法定节假日三种工具类其一】

    最全的时间工具类 开箱即用 public abstract class MyDateUtil {/*** 时区误差*/private static long timeZoneError = 0;/** ...

  4. 【Java获取国家法定节假日三种工具类其三】

    使用GitHub开源Api调用获取国家法定节假日 public class HolidayUtils {/*** 请求第三方接口的方法** @param url 请求的url* @return*/pu ...

  5. 获取MP3音频时长 | Java工具类

    获取mp3格式音频时长. Maven依赖 <dependency><groupId>org</groupId><artifactId>jaudiotag ...

  6. 获取指定时间的当天时间范围工具类

    /*** 获取指定时间的当天时间范围* @param date*/public static Date[] getTimeRangeDay(Date date){Date[] timeRange = ...

  7. 【Java获取国家法定节假日三种工具类其二】

    使用实体类返回更加清晰 public class Holiday {private String day;private String name;private boolean work;privat ...

  8. 获取经纬度之间距离的Java工具类

    2019独角兽企业重金招聘Python工程师标准>>> public class GeoUtil { /*** 根据经纬度和距离返回一个矩形范围* * @param lng* 经度* ...

  9. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  10. Android开发常用工具类集合

    转载自:https://blog.csdn.net/xiaoyi_tdcq/article/details/52902844 Android开发常用工具类集合 android开发中为了避免重复造轮子, ...

最新文章

  1. SGU 332 Largest Circle(凸包内接圆半径nlogn)
  2. name 'false' is not defined
  3. 【Ubuntu入门到精通系列讲解】常用 Linux 命令的基本使用
  4. 【Binder 机制】AIDL 分析 ( 创建 Service 服务 | 绑定 Service 远程服务 )
  5. android反编译的方法
  6. MATLAB从入门到精通-新增返回数组高、宽数字特征的全新方式
  7. [云炬商业计划书阅读分享]
  8. 《Java程序设计》实验报告——Java的基本程序设计结构
  9. sgu 126 Boxes
  10. [翻译]2005年软件业界推出新产品非官方计划
  11. 目标检测(十三)--MultiPathNet
  12. 限制页面被pc端访问
  13. Sampling-Argmax:用重参数技巧优化Soft-Argmax
  14. Dxg——C++ 开发笔记整理分类合集【所有的相关记录,都整理在此】
  15. 51单片机——八段数码管
  16. Python求水仙花数代码
  17. 华为面向5G的室内覆盖数字化概述
  18. Android 面试真题收录~
  19. Mansory的简单使用
  20. 精彩十年(3)——初露锋芒

热门文章

  1. AWS推出OpenJDK长期支持版本Amazon Corretto
  2. 主机与虚拟机网桥制作与网卡链路聚合
  3. mysql 5.5多实例部署
  4. ftp 实现文件的上传下载以及列出文件列表
  5. python数字图像处理(3):图像像素的访问与裁剪
  6. Python 一个无限 重复生成器的实现 和一个简洁的 quicksort
  7. 我敢说,你的登录接口肯定不安全
  8. 来自微信官方:微信支付跨平台软件架构首次曝光
  9. “干活的干不过写PPT 的”:新东方年会神曲刷屏背后:这3点值得我们思考
  10. 重磅!苹果正式开源iOS内核源码!