获取邮箱的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;}@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 工具类相关推荐
- Android获取通讯录中的所有联系人工具类
一个获取通讯录中所有联系人的工具类,存储在Map中,Map中key为手机号,value为联系人的姓名.还提供了一个根据手机号查询该手机号的联系人姓名的功能. 注:同一联系人可以存储多个手机号,但是同一 ...
- 获取Spring容器管理的Bean工具类
很多时候我们在一些不受spring管理的类中需要用到spring管理的Bean,那么这个时候可以使用如下工具类从spring容器中获取相关的Bean实例. @Component public clas ...
- 【Java获取国家法定节假日三种工具类其一】
最全的时间工具类 开箱即用 public abstract class MyDateUtil {/*** 时区误差*/private static long timeZoneError = 0;/** ...
- 【Java获取国家法定节假日三种工具类其三】
使用GitHub开源Api调用获取国家法定节假日 public class HolidayUtils {/*** 请求第三方接口的方法** @param url 请求的url* @return*/pu ...
- 获取MP3音频时长 | Java工具类
获取mp3格式音频时长. Maven依赖 <dependency><groupId>org</groupId><artifactId>jaudiotag ...
- 获取指定时间的当天时间范围工具类
/*** 获取指定时间的当天时间范围* @param date*/public static Date[] getTimeRangeDay(Date date){Date[] timeRange = ...
- 【Java获取国家法定节假日三种工具类其二】
使用实体类返回更加清晰 public class Holiday {private String day;private String name;private boolean work;privat ...
- 获取经纬度之间距离的Java工具类
2019独角兽企业重金招聘Python工程师标准>>> public class GeoUtil { /*** 根据经纬度和距离返回一个矩形范围* * @param lng* 经度* ...
- ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。
DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...
- Android开发常用工具类集合
转载自:https://blog.csdn.net/xiaoyi_tdcq/article/details/52902844 Android开发常用工具类集合 android开发中为了避免重复造轮子, ...
最新文章
- SGU 332 Largest Circle(凸包内接圆半径nlogn)
- name 'false' is not defined
- 【Ubuntu入门到精通系列讲解】常用 Linux 命令的基本使用
- 【Binder 机制】AIDL 分析 ( 创建 Service 服务 | 绑定 Service 远程服务 )
- android反编译的方法
- MATLAB从入门到精通-新增返回数组高、宽数字特征的全新方式
- [云炬商业计划书阅读分享]
- 《Java程序设计》实验报告——Java的基本程序设计结构
- sgu 126 Boxes
- [翻译]2005年软件业界推出新产品非官方计划
- 目标检测(十三)--MultiPathNet
- 限制页面被pc端访问
- Sampling-Argmax:用重参数技巧优化Soft-Argmax
- Dxg——C++ 开发笔记整理分类合集【所有的相关记录,都整理在此】
- 51单片机——八段数码管
- Python求水仙花数代码
- 华为面向5G的室内覆盖数字化概述
- Android 面试真题收录~
- Mansory的简单使用
- 精彩十年(3)——初露锋芒