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();
// }
}
}

获取邮箱的DNS和MX 工具类的更多相关文章

  1. 在spring中获取代理对象代理的目标对象工具类

    昨天晚上一哥们需要获取代理对象的目标对象,查找了文档发现没有相应的工具类,因此自己写了一个分享给大家.能获取JDK动态代理/CGLIB代理对象代理的目标对象. 问题描述:: 我现在遇到个棘手的问题,要 ...

  2. 可以获取JVM信息的一些管理工具类

    一些可以获取JVM信息的java工具类 BufferPoolMXBean.class ClassLoadingMXBean.class CompilationMXBean.class GarbageC ...

  3. 数据库表中MAX ID获取,确保每次调用没有重复工具类(NumberUtil)

    下面这个类是获取数据库中一个字段的最大值.配置在数据库中. public class NoFactory { private final static Logger cLogger = Logger. ...

  4. 获取JVM转储文件的Java工具类

    在上期文章如何获取JVM堆转储文件中,介绍了几种方法获取JVM的转储文件,其中编程方法是里面唯一一个从JVM内部获取的方法.这里就不演示了其他方法获取正在运行的应用程序的堆转储,重点放在了使用编程来获 ...

  5. 获取当前应用的系统路径工具类和java的System.getProperty()方法介绍

    java的System.getProperty()方法可以获取的值,如下: 对于Java程序,无论是未打包的还是打包的JAR或WAR文件,有时候都需要获取它运行所在目录信息,如何做到这一点呢? /** ...

  6. 获取本机外网IP的工具类

    ExternalIpAddressFetcher.java package com.tyust.common; import java.io.IOException; import java.io.I ...

  7. java根据身份证号和获取用户年龄和性别的工具类

    import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util ...

  8. MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

    MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.Fi ...

  9. 使用scanner工具类来获取用户输入的信息

    使用scanner工具类来获取用户输入的成绩信息. 步骤:1.导入java.util.Scanner包 2.创建Scanner对象 3.接受并保存用户输入的值 例子:通过用户输入来获取学生成绩 pac ...

随机推荐

  1. Python制作二维码和条形码扫描器 (pyzbar)

    条码在生活中随处可见,其可分为三类:一维条码.二维条码.三维条码 一维条码: 我们平时习惯称为条形码.条形码是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条 ...

  2. 用Python爬取"王者农药"英雄皮肤

    0.引言 作为一款现象级游戏,王者荣耀,想必大家都玩过或听过,游戏里中各式各样的英雄,每款皮肤都非常精美,用做电脑壁纸再合适不过了.本篇就来教大家如何使用Python来爬取这些精美的英雄皮肤. 1.环 ...

  3. 项目总结一:情感分类项目(emojify)

    一.Emojifier-V1 模型 1. 模型 (1)前向传播过程: (2)损失函数:计算the cross-entropy cost (3)反向传播过程:计算dW,db dz = a - Y_oh[ ...

  4. selenium之 玩转鼠标键盘操作(ActionChains)

    用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件——ActionChains sele ...

  5. Google的java工具类Guava

    前言 google开发java项目肯定也不想重复造轮子,所以肯定也有工具类,就是它了:Guava 我将举例几个实际的例子,发挥这个工具类好用的功能.更多的方法和功能,还有内部的实现可以直接参考http ...

  6. 【杂谈】Remember-Me的实现

    前言 此篇随笔记录了Remember-Me实现过程中出现的问题和解决方案,以及相关的思考. 正文 1. RememberMe是什么? RememberMe意为记住我,对应登录界面的那个勾选项.另一种说 ...

  7. (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)

    在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机 前提:服务器端安装桌面版的centos系统 CentOS Linux release 7.5.1804 (Core) ...

  8. Hibernate学习(六)———— cascade(级联)和inverse关系详解

    序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...

  9. JavaSSM框架整合

    SSM整合 ssm框架 框架整合  在博客的前面介绍了mybatis,spring,springmvc的使用,那么这篇博客将介绍将mybatis和spring,springmvc的整合. 整合之前,我 ...

  10. IDEA的几个常用配置,日常开发必备。

    用了IDEA有很长时间了,身边的同事朋友也都慢慢的开始都从Eclipse切换到IDEA了,其实无论是Eclipse还是IntelliJ IDEA都是开发工具而已,各自都有优点.但是刚从Eclipse切 ...