2017-02-04 22 views
6

Dựa trên tài liệu, tôi có thể thêm nhiều hơn 1 loại truy vấn trong tra cứu, nhưng kết quả luôn là chỉ có 1 loại.delphi indy IdDNSResolver không trả về tất cả các kết quả được yêu cầu dns

Ví dụ: tôi đặt id.QueryType: = [qtNS, qtA, qtMX]; và tôi chỉ lấy lại bản ghi A. Loại bỏ qtA, tôi nhận được 3 bản ghi NS, nhưng không có MX. Mỗi người trong số họ một mình hoạt động tốt.

Ví dụ:

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

id.QueryResult.count chỉ 1 là, và nó chỉ chứa bản ghi A.

Vậy làm cách nào tôi có thể nhận được tất cả 3 loại trong 1 truy vấn?

Trả lời

2

Yêu cầu DNS được mô tả trong RFC 1035. Theo tài liệu này, việc gửi nhiều câu hỏi trong cùng một yêu cầu được cho phép, tôi cho rằng đó là lý do tại sao nó được thực hiện theo cách này trong Indy.

Trong giao diện, máy chủ DNS thường không hỗ trợ điều này và chỉ trả về một câu trả lời ngay cả khi có nhiều câu hỏi. Bạn có thể tìm thêm thông tin trong this post và các bài đăng được liên kết từ đó.

Tôi giả định máy chủ DNS trả lời câu hỏi đầu tiên, vì vậy nếu bạn chuyển một mảng có nhiều loại, bạn có thể mong đợi câu trả lời cho loại có id thấp nhất. Trong trường hợp của bạn, mức độ ưu tiên sẽ là qtA > qtNS > qtMX. Nếu bạn cần câu trả lời cho tất cả chúng, bạn nên giải quyết chúng một cách riêng biệt.

+0

Cảm ơn bạn đã biết chi tiết :) – Softtouch

Các vấn đề liên quan