gpt4 book ai didi

Java DNSLookup MX 记录列表。喜欢 MXToolBox

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:34:18 26 4
gpt4 key购买 nike

我正在构建一个程序来列出域的所有 MX 记录。起初它似乎工作正常,但在与在线工具进行比较后http://mxtoolbox.com/ .存在程序无法获取MX记录而MXToolbox可以获取的域。

我不确定是什么原因或需要的任何配置。

非常感谢;

这是我的代码。

import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.InitialDirContext;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Hashtable;

public class DNSLookup
{
private InitialDirContext iDirC;

public DNSLookup ()
{
Hashtable<String, String> env = new Hashtable<String, String>();
//env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.dns.DnsContextFactory");
//env.put(Context.PROVIDER_URL, "dns://google.com");
// get the default initial Directory Context
try {
iDirC = new InitialDirContext(env);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private void lookup (String host, String record)
{
InetAddress inetAddress;
try {
inetAddress = InetAddress.getByName(host);
// show the Internet Address as name/address
System.out.println(inetAddress.getHostName() + " " + inetAddress.getHostAddress());

// get the DNS records for inetAddress
Attributes attributes = iDirC.getAttributes("dns:\\"+inetAddress.getHostName());
// get an enumeration of the attributes and print them out
//NamingEnumeration<?> attributeEnumeration = attributes.getAll();
/* while (attributeEnumeration.hasMore())
{
System.out.println("" + attributeEnumeration.next());
}
attributeEnumeration.close();*/
Attribute mxRecord = attributes.get(record);
for (int i=0; i<mxRecord.size();i++)
System.out.println(mxRecord.get(i));

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args){
DNSLookup looker = new DNSLookup();
looker.lookup("truetech.com", "MX");
}
}

上面的域名会输出NullPointer,表示没有找到MX记录。而 MXToolBox 将输出一个。

最佳答案

我知道这是一个迟到的答案(但我希望这对您或其他人有所帮助)。

Here's关于如何找到 MX 记录的可行解决方案。该解决方案依赖于 IntialDirContext 并继续使用 Attributes 来定义需要什么类型的属性。

// Print out a sorted list of mail exchange servers for a network domain name
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.InitialDirContext;
import javax.naming.NamingException;
import java.util.Arrays;
import java.util.Comparator;

public class MailHostsLookup
{
public static void main(String args[])
{
// explain what program does and how to use it
if (args.length != 1)
{
System.err.println("Print out a sorted list of mail exchange servers ");
System.err.println(" for a network domain name");
System.err.println("USAGE: java MailHostsLookup domainName");
System.exit(-1);
}
try
{ // print the sorted mail exhchange servers
for (String mailHost: lookupMailHosts(args[0]))
{
System.out.println(mailHost);
}
}
catch (NamingException e)
{
System.err.println("ERROR: No DNS record for '" + args[0] + "'");
System.exit(-2);
}
}

// returns a String array of mail exchange servers (mail hosts)
// sorted from most preferred to least preferred
static String[] lookupMailHosts(String domainName) throws NamingException
{
// see: RFC 974 - Mail routing and the domain system
// see: RFC 1034 - Domain names - concepts and facilities
// see: http://java.sun.com/j2se/1.5.0/docs/guide/jndi/jndi-dns.html
// - DNS Service Provider for the Java Naming Directory Interface (JNDI)

// get the default initial Directory Context
InitialDirContext iDirC = new InitialDirContext();
// get the MX records from the default DNS directory service provider
// NamingException thrown if no DNS record found for domainName
Attributes attributes = iDirC.getAttributes("dns:/" + domainName, new String[] {"MX"});
// attributeMX is an attribute ('list') of the Mail Exchange(MX) Resource Records(RR)
Attribute attributeMX = attributes.get("MX");

// if there are no MX RRs then default to domainName (see: RFC 974)
if (attributeMX == null)
{
return (new String[] {domainName});
}

// split MX RRs into Preference Values(pvhn[0]) and Host Names(pvhn[1])
String[][] pvhn = new String[attributeMX.size()][2];
for (int i = 0; i < attributeMX.size(); i++)
{
pvhn[i] = ("" + attributeMX.get(i)).split("\\s+");
}

// sort the MX RRs by RR value (lower is preferred)
Arrays.sort(pvhn, new Comparator<String[]>()
{
public int compare(String[] o1, String[] o2)
{
return (Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]));
}
});

// put sorted host names in an array, get rid of any trailing '.'
String[] sortedHostNames = new String[pvhn.length];
for (int i = 0; i < pvhn.length; i++)
{
sortedHostNames[i] = pvhn[i][1].endsWith(".") ?
pvhn[i][1].substring(0, pvhn[i][1].length() - 1) : pvhn[i][1];
}
return sortedHostNames;
}
}

关于Java DNSLookup MX 记录列表。喜欢 MXToolBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15240952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com