Получить полные записи зоны из DNS, DNSJava не возвращает все записи - PullRequest
0 голосов
/ 13 ноября 2018

Добрый день,

Я работаю над обнаружением сети, и мне нужно получить все записи для домена.Когда я использую DNSJava, это не полный набор.CNAME отсутствуют, и не все записи TXT или записи A.

Есть ли лучший способ сделать это?

Вот мой код:

    package iMCDNS;
    import java.util.Hashtable;

    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.Attributes;
    import javax.naming.directory.DirContext;
    import javax.naming.directory.InitialDirContext;

    import org.xbill.DNS.Lookup;
    import org.xbill.DNS.Record;
    import org.xbill.DNS.Type;

    public class iMCDNS {

    public static void main(String[] args) {

        System.out.println("Running iMCDNS");

        try {

            //this returned no records

//          DirContext ctx = new InitialDirContext(env);
//          Attributes atts = ctx.getAttributes("iditsecurity.com", new String[] {"CNAME"});
//          
//          System.out.println("Attributes size: " + atts.size());
//
//          NamingEnumeration<? extends Attribute> e = atts.getAll();
//          
//          
//          while(e.hasMore()) {
//              System.out.println(e.next().get());
//          }

            //this also returns no CNAME records
            Record[] rs = new Lookup("iditsecurity.com", Type.ANY).run();

            if (rs!=null)
            {
                int javaDNSLen = rs.length;

                for (int i = 0;i < javaDNSLen; i++)
                {
                    System.out.println("record: " + rs[i].toString());
                }

            } else {
                System.out.println("No records found");
            }

        } catch (Exception ex) {

            System.out.println("Exception occurred: " + ex.toString());
        }



    }




    }

И полученные результаты: должны иметь 2 записи A, 4 записи CNAME и 5 записей TXT ...

Running iMCDNS
record: iditsecurity.com.   4503    IN  TXT "google-site-verification=VvXfVc-hr0dK3pzjc3yiAaDsK-tlFAMX7Xt3soYXByc"
record: iditsecurity.com.   4503    IN  TXT "google-site-verification=8W17El_6uLvJ0WLxEsgIKt9hKRPuz6yN9U_ke9l0i7E"
record: iditsecurity.com.   4360    IN  MX  10 mx1.netsolmail.net.

1 Ответ

0 голосов
/ 14 ноября 2018

Во-первых, вы должны более точно определить «получить все записи для домена».Кроме того, попутно, если вы находитесь на вершине зоны, вы не можете иметь CNAME записей, потому что они не могут сосуществовать с какими-либо другими, а apex уже имеет NS и SOA записей по своему дизайну.

Во-вторых, не используйте тип ANY для выполнения DNS-запросов.По каким-либо причинам это читается как ALL, но оно не имеет этой семантики вообще и не даст ожидаемых результатов.ANY в сторону рекурсивного кэширующего сервера имен вернет вам список текущих записей в кэше распознавателя, который НЕ всех записей, связанных с доменом.Фактически есть работа, чтобы полностью отказаться от этого (виртуального) типа, см .: https://datatracker.ietf.org/doc/draft-ietf-dnsop-refuse-any/ (и другие объяснения в нетехнических терминах на https://nelsonslog.wordpress.com/2016/09/07/dns-any-requests-are-deprecated/ или https://blog.cloudflare.com/what-happened-next-the-deprecation-of-any/)

Итак, выспросит: это нормально, но как тогда это сделать?

Затем он возвращается к первой точке. Вам нужно будет определить с типами записей, которые вы хотите (A, AAAA, TXTи т. д.), а затем зациклите их, чтобы получить все из них. Это не всегда так просто, по крайней мере, по двум причинам: * TXT в наши дни становится всеобщим уловом и переносит множество вещей: SPF, DKIM, DMARCи т. д. * и, в частности, для DKIM или аналогично для SRV, вам необходимо запрашивать домены с определенной структурой (например, _service._transport.example.com для SRV), чтобы вы не могли "автоматически обнаруживать" все записи, вам нужно знать, какиетот, который вам нужен (или начните со списка для тестирования)

Я бы также рекомендовал вам указать, какие серверы имен вы используете, потому что, если он рекурсивный, вы получите результаты из его кеша со связанным с нимTTL, который может илиможет быть не то, что вы хотите / нужно.Поэтому вам лучше обратиться к (одному) авторитетному серверу имен домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...