获取邮箱的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();
// }
}
}
获取邮箱的DNS和MX 工具类的更多相关文章
- 在spring中获取代理对象代理的目标对象工具类
昨天晚上一哥们需要获取代理对象的目标对象,查找了文档发现没有相应的工具类,因此自己写了一个分享给大家.能获取JDK动态代理/CGLIB代理对象代理的目标对象. 问题描述:: 我现在遇到个棘手的问题,要 ...
- 可以获取JVM信息的一些管理工具类
一些可以获取JVM信息的java工具类 BufferPoolMXBean.class ClassLoadingMXBean.class CompilationMXBean.class GarbageC ...
- 数据库表中MAX ID获取,确保每次调用没有重复工具类(NumberUtil)
下面这个类是获取数据库中一个字段的最大值.配置在数据库中. public class NoFactory { private final static Logger cLogger = Logger. ...
- 获取JVM转储文件的Java工具类
在上期文章如何获取JVM堆转储文件中,介绍了几种方法获取JVM的转储文件,其中编程方法是里面唯一一个从JVM内部获取的方法.这里就不演示了其他方法获取正在运行的应用程序的堆转储,重点放在了使用编程来获 ...
- 获取当前应用的系统路径工具类和java的System.getProperty()方法介绍
java的System.getProperty()方法可以获取的值,如下: 对于Java程序,无论是未打包的还是打包的JAR或WAR文件,有时候都需要获取它运行所在目录信息,如何做到这一点呢? /** ...
- 获取本机外网IP的工具类
ExternalIpAddressFetcher.java package com.tyust.common; import java.io.IOException; import java.io.I ...
- java根据身份证号和获取用户年龄和性别的工具类
import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util ...
- MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能
MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.Fi ...
- 使用scanner工具类来获取用户输入的信息
使用scanner工具类来获取用户输入的成绩信息. 步骤:1.导入java.util.Scanner包 2.创建Scanner对象 3.接受并保存用户输入的值 例子:通过用户输入来获取学生成绩 pac ...
随机推荐
- Kali学习笔记30:身份认证与命令执行漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器:192.168.163.13 ...
- GIT的初级使用
安装git [root@localhost ~]# yum -y install git [root@localhost ~]# git --version git version 1.8.3.1 初 ...
- python 读取wav 音频文件的两种方式
python 中,常用的有两种可以读取wav音频格式的方法,如下所示: import scipy from scipy.io import wavfile import soundfile as sf ...
- exec 命令简单用法 和 find 搭配用法示例
find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. 看例子: find ./ -name "*.tx ...
- node的安装及基本使用!
一.node的基本安装和使用 1.什么是node.js 答:node.js是JavaScript运行环境.实际上它是Google V8引擎进行了封装.V8引擎执行JavaScript的速度非常的 快 ...
- 在Go语言中基础的Redis操作
在Go语言中基础的Redis操作 需要先安装redigo go get "github.com/garyburd/redigo/redis" Go语言Redis客户端的简单示例 连 ...
- SVN+Axure版本管理&协同设计(一)
1. SVN介绍 2.安装部署 环境介绍:Ubuntu16
- (转)db2top详解
原文:https://blog.csdn.net/lyjiau/article/details/47804001 https://www.ibm.com/support/knowledgecenter ...
- Web API 处理机制剖析 --- 拨开迷雾看本质
前言 最近开发了几个项目,用到了web api,也通过项目加深了对web api的理解.本文试图从内部原理讲解web api的本质.透过重重迷雾,看清本质,就能更好的把握和利用好web api. 1 ...
- Chapter 4 Invitations——9
I didn't want to get into the safety hazards that dancing presented, so I quickly made new plans. 我不 ...