메일박스의 DNS 및 MX 툴 클래스 가져오기
1. Maven DNS 패키지 가져오기
<dependency>
<groupId>dnsjavagroupId>
<artifactId>dnsjavaartifactId>
<version>2.1.7version>
dependency>
<dependency>
<groupId>commons-netgroupId>
<artifactId>commons-netartifactId>
<version>2.0version>
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 dnsALookup(final String adr)
{
List 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 mxByDomain(String host){
try {
DnsThread dnsThread=new DnsThread(host,DNSType.MX);
dnsThread.start();
dnsThread.join(5000);
List dnsList=dnsThread.getDnsList();
return dnsList;
} catch (Exception e) {
return new ArrayList();
}
}
public static List reverseDNSLookup(final String adr)
{
List 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 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 getDnsList() {
return dnsList;
}
public void setDnsList(List 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 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 dnsList=dnsThread.getDnsList();
System.out.println(host+" "+Double.valueOf((b-a)/1000)+"s");
return dnsList;
} catch (Exception e) {
return new ArrayList<>();
}
}
public static List 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 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 reverseDNSLookup(final String adr) throws Exception
{
List resultList=searchDNSList(adr);
if(resultList.size()>0){
return resultList;
}
List 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 searchDNSList(String address) {
InitialDirContext context = null;
String serverAddr="202.106.0.20";
List resultList = new ArrayList();
try {
Hashtable env = new Hashtable();
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 dnsALookup(final String adr) throws Exception
{
List 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 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 getDnsList() {
return dnsList;
}
public void setDnsList(List 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 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();
// }
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.