ラウンドロビン構成からの応答であっても、DNSライブラリが常にDNSレコードの順序付きリストで機能するように、並べ替えアルゴリズムを実装しようとしています。
次の2つの応答を見てみましょう。
初め。
$ dig google.com A
; <<>> DiG 9.6.0-APPLE-P2 <<>> google.com A
;; ...
;; ANSWER SECTION:
google.com. 201 IN A 74.125.39.106
google.com. 201 IN A 74.125.39.105
google.com. 201 IN A 74.125.39.147
google.com. 201 IN A 74.125.39.104
google.com. 201 IN A 74.125.39.103
google.com. 201 IN A 74.125.39.99
;; ...
2番。
$ dig google.com A
; <<>> DiG 9.6.0-APPLE-P2 <<>> google.com A
;; ...
;; ANSWER SECTION:
google.com. 119 IN A 74.125.39.147
google.com. 119 IN A 74.125.39.104
google.com. 119 IN A 74.125.39.103
google.com. 119 IN A 74.125.39.99
google.com. 119 IN A 74.125.39.106
google.com. 119 IN A 74.125.39.105
;; ...
ANSWER
セクションに異なる順序でDNSレコードが含まれているという事実を除いて、これらは同じです。回答セクションを正規化するために並べ替えアルゴリズムを適用する必要があります。
アルゴリズムの初期バージョンはすでに理解していますが、テストを追加すればするほど、発見されたケースが見つかります。たとえば、次の応答では、最初のレコードの順序を変更しないでおく必要があります。
$ dig www.google.com A
; <<>> DiG 9.6.0-APPLE-P2 <<>> www.google.com A
;; ...
;; ANSWER SECTION:
www.google.com. 603039 IN CNAME www.l.google.com.
www.l.google.com. 78 IN A 74.125.39.105
www.l.google.com. 78 IN A 74.125.39.104
www.l.google.com. 78 IN A 74.125.39.147
www.l.google.com. 78 IN A 74.125.39.106
www.l.google.com. 78 IN A 74.125.39.99
www.l.google.com. 78 IN A 74.125.39.103
;; ...
適切なアルゴリズムを抽出するために読み取ることができる既存の実装/リファレンスはありますか?
更新:私の元の質問に対するいくつかの説明。DNSレコードを取得するためにライブラリは必要ありません、私はそれを持っています。応答の回答セクションを並べ替える効率的なアルゴリズムを見つける必要があります。
また、質問はAの質問に限定されないことに注意してください。元のDNSクエリは、NSクエリ、CNAMEクエリ、または任意のものである可能性があります。
私はRubyを使用していますが、これは質問自体には関係ありません。