代码之家  ›  专栏  ›  技术社区  ›  R.. GitHub STOP HELPING ICE

在单个DNS查询中请求A和AAAA记录

  •  26
  • R.. GitHub STOP HELPING ICE  · 技术社区  · 14 年前

    我正在C语言中开发一个DNS查询实现,并希望在一个查询包中同时请求a和AAAA(IPv4和IPv6)记录,但是当我将这两个查询放在一个这样的包中时,没有从名称服务器获得任何响应。我试过将查询发送到几个不同的名称服务器(本地和8.8.8.8),但没有成功。这是不起作用的,还是可能是我的查询包格式不正确?

    仅供参考,只要包中有一个查询,一切正常。

    编辑: 显然,我的查询都有点格式错误(我不知道与应答不同的查询没有TTL和RDLENGTH/RDATA字段)。修复后,我将返回RCODE=1格式错误回复,确认2个查询的存在。这是否意味着每个数据包不支持多个查询?

    这里有一个查找的hexdump www.google.com :

    d8 32 01 00 00 02 00 00 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 01 00 01 c0 0c 00 1c 00 01

    3 回复  |  直到 14 年前
        1
  •  34
  •   Charlotte    9 年前

    我不知道任何名称服务器在一个查询中支持多个问题。

    在这样的查询中可能存在歧义,因为每个包都有标记(如a a),这些标记只能应用于其中一个问题。如果您提出两个问题,而服务器仅对其中一个域具有权威性,那么服务器是否应该设置标志?我怀疑这样的问题已经阻止了实现者。

    有很多解决你所说问题的建议(例如 this 建议引入A和AAAA和Paul Vixie的QType repeated attempts

    我想还有“all”QTYPE,但是它可以返回比您需要的更多的数据。

    编辑:

       dns_message_currentname(message, DNS_SECTION_QUESTION,
             &client->query.qname);
       client->query.origqname = client->query.qname;
       result = dns_message_nextname(message, DNS_SECTION_QUESTION);
       if (result != ISC_R_NOMORE) {
         if (result == ISC_R_SUCCESS) {
           /*
            * There's more than one QNAME in the question
            * section.
            */
           query_error(client, DNS_R_FORMERR, __LINE__);
         } else
           query_error(client, result, __LINE__);
         return;
       }
    

    编辑: 另外,来自绑定源中的resolver.c:

        /*
         * XXXRTH  Currently we support only one question.
         */
        if (message->counts[DNS_SECTION_QUESTION] != 1) {
                log_formerr(fctx, "too many questions");
                return (DNS_R_FORMERR);
        }
    
        2
  •  14
  •   Flow Matt McDonald    8 年前

    技术上 支持在问题部分有多个记录(见第4.1.2节 RFC 1035 ),在实践中,它只是不起作用,正如你所发现的。

    尤其是,如果这两个问题会导致两个不同的rcode,那么就没有人能够定义正确的语义。

    我已经 tried to define those semantics at the IETF 但到目前为止,这还不算太远。

    在我自己的DNS包解析代码中,我总是拒绝任何这样的包。

        3
  •  -3
  •   Remy Lebeau    14 年前

    A AAAA