通过Java检查域名年龄

通过Java检查域名年龄,java,dns,Java,Dns,我正在为一个大学项目制作一个简单的网络钓鱼扫描工具。我的一种检测方法包括检查电子邮件中的DNS是否有效,我还想检查它们的年龄。这是我如何检查它们是否存在的示例代码: import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; impor

我正在为一个大学项目制作一个简单的网络钓鱼扫描工具。我的一种检测方法包括检查电子邮件中的DNS是否有效,我还想检查它们的年龄。这是我如何检查它们是否存在的示例代码:

import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import java.util.Hashtable;

public class DNSExample {
    static int doLookup( String hostName ) throws NamingException {
        Hashtable env = new Hashtable();
        env.put("java.naming.factory.initial",
                "com.sun.jndi.dns.DnsContextFactory");
        DirContext ictx = new InitialDirContext( env );
        Attributes attrs =
                ictx.getAttributes( hostName, new String[] { "MX" });
        Attribute attr = attrs.get( "MX" );
        if( attr == null ) return( 0 );
        return( attr.size() );
    }

    public static void main( String args[] ) {

        String [] array = {"google.com","dsad33114sssaxzx.com"} ;
        for( int i = 0; i < array.length; i++ ) {
            try {
                System.out.println( array[i] + " has " +
                        doLookup( array[i] ) + " mail servers" );
            }
            catch( Exception e ) {
                System.out.println(array[i] + " : " + e.getMessage());
            }
        }
    }
}
import javax.naming.NamingException;
导入javax.naming.directory.Attribute;
导入javax.naming.directory.Attributes;
导入javax.naming.directory.DirContext;
导入javax.naming.directory.InitialDirContext;
导入java.util.Hashtable;
公共类DNSexSample{
静态int-doLookup(字符串主机名)引发NamingException{
Hashtable env=新的Hashtable();
put(“java.naming.factory.initial”,
“com.sun.jndi.dns.DnsContextFactory”);
DirContext ictx=新的初始DirContext(env);
属性属性属性=
getAttributes(主机名,新字符串[]{“MX”});
属性attr=attrs.get(“MX”);
if(attr==null)返回(0);
返回值(attr.size());
}
公共静态void main(字符串参数[]){
字符串[]数组={“google.com”,“dsad33114sssaxzx.com”};
for(int i=0;i
我需要如何修改上述代码以包含年龄检查 对于存在的服务器


根据你上面的描述和评论,你似乎在试图收集whois信息

  • 从下载API
  • 更改下面的nameToQuery并运行它
  • 公共类WhoisIt{

    public static final String WHOIS_SERVER = "whois.internic.net";
    public static final int WHOIS_PORT = 43;
    
    public static void main(String[] args) throws Exception {
    
        String nameToQuery = "avajava.com";
    
        WhoisClient whoisClient = new WhoisClient();
        whoisClient.connect(WHOIS_SERVER, WHOIS_PORT);
        String results = whoisClient.query(nameToQuery);
    
        System.out.println(results);
    }
    }
    

    祝你好运

    我认为你选择了一个在一般情况下无法解决的问题…使用当前一代互联网标准:

  • 您需要的信息无法从DNS本身获得
  • 在某些情况下,可以从WHOIS获得有关DNS注册的信息。但是,WHOIS服务器返回的信息不标准:
    • 没有标准的信息模型
    • 没有标准格式
    • 对于信息的准确性没有任何保证
    • 甚至还不清楚“服务器年龄”是否可用。(例如,APNIC的WHOIS提供的最接近的时间戳是DNS记录的最后修改时间戳。这不是服务器年龄的好代理。)
  • 有一组RFC定义了一种称为的东西,但据我所知,该标准的目的是注册商之间的信息交换。(我找不到任何基于CRISP的面向公众的服务。)
  • 还有一个名为IETF的工作组,我认为该工作组旨在为WHOIS定义一个支持网络的替代品(不要将怪人与IETF怪人工作组混淆!),但该工作组是最近成立的,现在就对结果做出任何预测还为时过早。(或者NIC实施工作组制定的任何规范需要多长时间。)

  • 小结:目前,你在这个领域实现一些真正有效的东西的机会很低。也许你最希望实现的是基于屏幕抓取一两个WHOIS服务的东西


    这可能会在几年内发生变化,但这对您当前的项目没有任何帮助。

    您是否考虑尝试通过WHOIS获取此信息?如果是这样,不同的WHOIS服务器在其输出格式上的不一致性是出了名的,因此您最终将得到许多不同的模式来解析。从一些阅读资料中,我建议我使用的是WHOIS。我想知道是否有一个可以通过java使用的中心源。理想情况下,它不会太麻烦,因为它只是应用程序的一个小功能。没有中心源。每个不同的域注册表都运行自己的WHOIS服务器,以及大多数(全部?)域注册商也运行自己的WHOIS服务器。最糟糕的是,有些域注册商可能根本不运行WHOIS服务器。而且,正如我所说,它们的输出格式基本上都是不同的。尝试从主镜像和其他镜像下载,但找不到文件…尽管我现在有一份3.1的副本。试试版本n commons-net-3.2-bin.zip,