2013-03-02 4 views
1

Я делаю простой инструмент для фишинга для университетского проекта. Один из моих методов обнаружения включает проверку правильности DNS в электронной почте, и я также хочу проверить их возраст. Это пример код, как я могу проверить, если они существуют:Проверка возраста доменного имени через Java

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()); 
      } 
     } 
    } 
} 

Как бы мне нужно изменить код выше, чтобы включить проверку возраста для серверов, которые существуют?

+0

Вы хотите получить эту информацию через WHOIS? Если это так, разные серверы WHOIS, как известно, непоследовательны в своих выходных форматах, поэтому у вас будет много разных шаблонов для анализа. – Celada

+0

Из некоторого чтения мне было предложено использовать WHOIS. Мне было интересно, есть ли центральный источник, который я могу использовать через java. В идеале это не было бы слишком хлопотно, поскольку это была лишь небольшая особенность приложения. – Giannis

+0

Центрального источника нет. Каждый реестр доменов использует собственные серверы WHOIS, и большинство (все?) Регистраторов доменов также управляют собственным сервером WHOIS. Хуже всего то, что некоторые реестры домена вообще не работают. И, как я уже сказал, их выходные форматы в основном разные. – Celada

ответ

1

Я думаю, что вы выбрали проблему, которая не может быть решена в общем случае ... с использованием стандартов Интернета текущего поколения:

  1. Необходимая информация не может быть получена из самого DNS.
  2. В некоторых случаях информацию о регистрации DNS можно получить в WHOIS. Однако информация, возвращаемая серверами WHOIS, не стандартизирована:
    • Нет стандартной информационной модели.
    • Нет стандартного формата.
    • Гарантии на точность информации отсутствуют.
    • Даже не ясно, будет ли доступен «возраст сервера». (Например, ближайший, к которому относится WHOIS APNIC, является последней меткой времени для записи DNS-записи. И это НЕ хороший прокси-сервер для возраста сервера.)
  3. Существует набор RFC, которые определяют что-то называемое CRISP, но, насколько я могу понять цель этого стандарта, регистратор должен регистрировать обмен информацией. (Я не мог найти каких-либо общедоступных услуг на основе CRISP.)
  4. Существует также рабочая группа IETF под названием WEIRDS, которая, как я думаю, предназначена для определения замены в Интернете для WHOIS. (Не путайте WEIRDS с рабочей группой IETF WEIRD!) Но это было сформировано совсем недавно, и еще слишком рано делать какие-либо прогнозы относительно результата. (. Или, как долго он будет принимать для сетевых адаптеров, чтобы реализовать любые функции, которые выходят из РГ)

Резюме: ваши шансы реализации что-то в этом пространстве, что на самом деле работает в настоящее время находится на низком уровне. Вероятно, лучшее, что вы можете надеяться достичь, - это нечто, основанное на скрининге одного или двух сервисов WHOIS.

Это может измениться через несколько лет, но это не поможет вашему текущему проекту.

1

Похоже, что на основе вашего описания и комментариев вы пытаетесь собрать информацию whois.

  1. загрузить APIs из http://commons.apache.org/proper/commons-net/
  2. Измените 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); 
} 
} 

удачи

+0

Пробная загрузка из http://commons.apache.org/proper/commons-net/download_net.cgi, а файл не найден, возвращен из основного и других зеркал ... Хотя я получил копию 3.1, которая должна была сделать сейчас. – Giannis

+0

попробуйте версию commons-net-3.2-bin.zip, http://apache.mirrors.lucidnetworks.net//commons/net/binaries/commons-net-3.2-bin.zip –

Смежные вопросы