获取邮箱的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 ...
随机推荐
- 小奶狗给小喵咪上CSS课程
小奶狗给小喵咪上CSS课程 小奶狗,你好啊? 小喵咪你好~ 听说学习HTML,要学习CSS是吗? 是的,小甜心~ 那么CSS是什么呢? CSS是Cascading Style Sheet英文的缩写,中 ...
- SpringMVC框架六:拦截器
拦截器的概念就不介绍了: SpringMVC中拦截器的执行规则: 一个小示例展示: 我搞两个拦截器: 第一个: package org.dreamtech.springmvc.interceptor; ...
- java IO流之详细总结
什么是io流? 分为两种: 输入流:可以从文件中读取到程序,从源数据源读取到程序,叫做输入流. 输出流:可以从程序中读取到文件,从程序写,使用输出流,写入到文件中.叫做输出流. 使用File操作文件或 ...
- 【emotion】目标初定
现在的我漂浮不定,我的心是凌乱的,虽然在我面前的路有无数条,但是我却不知道哪一条路是属于我的.对于java,我掌握的东西可能并不是系统的,想想也知道,自学一年,能形成什么样子的体系呢?然而在日常的工作 ...
- 写了2年python,知道 if __name__ == '__main__' 什么意思吗?
相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格. 殊不知这段代码的 ...
- 多线程的音频打标记的python实现(原创)
技术难度: ①需要一个UI界面,并且其中可进行相关参数的自调,最开始使用的是pygame的框架,后来转用tk界面: ②需要可以播放音频文件,MP3.WMA等格式: ③需要在播放音频的同时进行打标签操作 ...
- chrome强制刷新,非ctrl+f5
开发时,经常有ctrl+f5无法做到真正的强制刷新,以下可以帮到你 Ctrl+Shift+Del 清除Google浏览器缓存的快捷键 Ctrl+Shift+R 重新加载当前网页而不使用缓存内容
- 解决SVN不显示绿色图标问题
今天是上班的第50天,发现项目上的svn绿色图标没有了,于是上网查了一下,然后很简单的就找到了解决办法: 修改注册表 Windows Explorer Shell支持Overlay Icon最多15个 ...
- PHP计算连续签到天数以及累计签到天数
代码如下: /** * 统计连续签到天数以及累计签到天数 * @param string $user_long_id 用户ID * @return array 一维数组 */ function sig ...
- "i=i++"在java等高级语言的解释
前言 最近学习我在的团队招人,面试.我出了一道c的题. int main(){ ; i+=++i; printf("%d",i); } 别喷!今晚学长们说,java,c#中完全不同 ...