2017-02-04 2 views
6

Basierend auf der Dokumentation sollte ich in der Lage sein, mehr als 1 Abfragetyp in einer Suche hinzuzufügen, aber das Ergebnis ist immer nur 1 Typ.delphi indy IDDNSResolver gibt nicht alle angeforderten DNS-Ergebnisse zurück

Zum Beispiel setze ich id.QueryType: = [qtNS, qtA, qtMX]; und ich bekomme nur die A-Aufzeichnung zurück. Wenn ich qtA entferne, bekomme ich 3 NS Records zurück, aber kein MX. Jeder von ihnen allein funktioniert gut.

Beispiel:

id:=TIdDNSResolver.Create(nil); 
id.Host:='8.8.8.8'; 
id.QueryType:='[qtNS, qtA, qtMX]; 
id.Resolve('car.com'); 
... 

id.QueryResult.count nur 1, und es enthält nur die A-Platte.

Also wie kann ich alle 3 Arten in 1 Abfrage bekommen?

Antwort

2

DNS-Anforderungen werden in RFC 1035 beschrieben. Laut diesem Dokument ist das Senden mehrerer Fragen in derselben Anfrage erlaubt, ich gehe davon aus, dass dies in Indy so implementiert ist.

In der Praxis unterstützen DNS-Server dies normalerweise nicht und geben nur eine Antwort zurück, auch wenn mehrere Fragen vorhanden sind. Sie können mehr Informationen in this post und den Pfosten finden, die von dort verbunden werden.

Ich würde davon ausgehen, dass die DNS-Server die erste Frage beantworten, also wenn Sie ein Array mit mehreren Typen übergeben, könnten Sie eine Antwort für den Typ mit der niedrigsten ID erwarten. In Ihrem Fall wäre die Priorität qtA > qtNS > qtMX. Wenn Sie Antworten für alle benötigen, sollten Sie sie separat lösen.

+0

Vielen Dank für die Details :) – Softtouch

Verwandte Themen