Как отключить рекурсивный запрос DNS Java? - PullRequest
0 голосов
/ 11 июня 2018

Я делаю запрос с использованием dnsjava, и программа делала запрос 2 раза, первый запрос необходим и возвращает желаемый результат (этот результат будет только в случае, если я получу пакет UDP, а не в результате моей программы), и после этого,он автоматически выполняет второй запрос и возвращает ошибку Host Not Found для моей программы tcpdump_picture

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        final Cache cache = new Cache(DClass.IN);           
        SimpleResolver resolver = new SimpleResolver("10.212.9.108");           
        Name name = new Name("8491698766.6.msisdn.sub.cs");
        Lookup.setDefaultResolver(resolver);
        Lookup.setDefaultCache(new Cache(), DClass.IN);

        Lookup l = new Lookup(name);
        l.setResolver(resolver);

        l.run();
        Record[] records = l.getAnswers();
        System.out.println("Error str: " + l.getErrorString());
    //  System.out.println("Record length: " + records.length);
    //  InetAddress[] array = new InetAddress[records.length];
        if(records != null) {
            for(int i=0; i<records.length; i++) {
                Record record = records[i];
                if(record instanceof ARecord) {
                    ARecord a = (ARecord)record;
                    System.out.println("ARecord: " + a.getAddress().getHostName() + ";" + a.getAddress().getHostAddress());
                }else {
                    CNAMERecord cname = (CNAMERecord)record;
                    System.out.println("CnameRecord: " + cname.toString());
                }
            }
        }else {
            System.out.println("Record null");
        }
    }catch(Exception e) {
        e.printStackTrace();
    }
}

}

1 Ответ

0 голосов
/ 23 мая 2019

Вам просто нужно сбросить флаг Recursion desired в заголовке запроса.

Предполагается, что у вас есть DNS-сервер с зоной bob. и следующие записи:

peter.bob.              38400   IN      NS      ns2.bobsen-technology.org.
peter.bob.              38400   IN      NS      ns.klaus.de.

код

Resolver resolver = new SimpleResolver("localhost");

Record question = Record.newRecord(new Name("peter.bob."), Type.NS, DClass.IN);

Message query = Message.newQuery(question);

query.getHeader().unsetFlag(Flags.RD);

Message response = resolver.send(query);

for (RRset rRset : response.getSectionRRsets(Section.AUTHORITY)) {
    System.out.println(rRset);
}

производит:

{ peter.bob. 38400 IN NS [ns2.bobsen-technology.org.] [ns.klaus.de.] }
...