获取邮箱的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 ...
随机推荐
- 简单粗暴的JavaScript笔记-1
欢迎到我的简书查看我的文集 前言: 提示密码提示框 <head> <style> #div1 {width: 100px;height:50px;background:#FFC ...
- 初识vw和vh
最近在项目里突然看到了一行css代码,height:100vh; 一时间有点蒙蔽 因为之前有听过这个css3新增单位,但没有去了解过. 那这个单位又跟px,rem,em,%有什么不同呢? 简述: ...
- 可能是把Java内存区域讲的最清楚的一篇文章
写在前面(常见面试题) 下面是面试官可能在“Java内存区域”知识点问你的问题,快拿出小本本记下来! 基本问题: 介绍下Java内存区域(运行时数据区). Java对象的创建过程(五步,建议能默写出来 ...
- 线性插值法的原理和python代码实现
假设我们已知坐标 (x0, y0) 与 (x1, y1),要得到 [x0, x1] 区间内某一位置 x 在直线上的值.根据图中所示,我们得到 由于 x 值已知,所以可以从公式得到 y 的值 已知 y ...
- python图像处理库PIL的基本概念介绍
PIL中所涉及的基本概念有如下几个:通道(bands).模式(mode).尺寸(size).坐标系统(coordinate system).调色板(palette).信息(info)和滤波器(filt ...
- [原创]K8Cscan插件之Windows密码爆破
[原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...
- vis.js没有中文文档,个人在项目中总结的一些中文配置
##vis.js var options = { nodes:{//节点配置 borderWidth: 1,//节点边框的宽度,单位为px borderWidthSelected: 2,节点被选中时边 ...
- SQL 操作字符串
SQL操作字符串相对来说比较难一点,现在总结几个常用的SQL 对字符串的操作: declare @dd nvarchar(12) set @dd='2015-03-13' print @dd decl ...
- 开始翻译Disruptor
刚开始接触Disruptor,看了作者的博客,发现这个大牛很与众不同,他不仅讲解自己的框架的设计思想,还深度介绍了这样设计的原因,其知识范围涵盖了操作系统.数据结构.计算机组成,很有学习的价值.网上有 ...
- Go signals 信号
Go中通过os/signals包,可以接受系统信号. package main import "fmt" import "os" import "os ...