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

2023-12-27

我正在用 C 语言实现 DNS 查询,并且有兴趣在单个查询数据包中请求 A 和 AAAA(IPv4 和 IPv6)记录,但是当我将两个查询放在一起时,我没有从名称服务器获得任何响应像这样的一包。我尝试将查询发送到几个不同的名称服务器(本地和 8.8.8.8),但没有成功。这是不起作用的东西,还是我的查询数据包可能格式错误?

我附加 AAAA 查询(到现有 A 请求数据包)的基本算法是增加数据包标头中的 QDCOUNT 字段,然后附加 RR 查询,其中 TYPE 设置为 AAAA,NAME 设置为现有 A 查询中主机名的指针(字节 0xC0 0x0C 表示距数据包开头 12 字节的偏移量)。这听起来正确吗?

仅供参考,仅使用数据包中的 A 查询一切正常。

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

Edit 2:这是查找的十六进制转储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

我不认为这有什么问题。


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

在这样的查询中可能存在歧义,因为每个数据包的标志(例如 AA)可能仅适用于其中一个问题。如果您问两个问题并且服务器仅对其中一个域具有权威性,那么服务器是否应该设置该标志?我怀疑诸如此类的问题阻碍了实施者。

有很多建议可以解决您所讨论的问题(例如this https://datatracker.ietf.org/doc/html/draft-sajitha-dnsext-qtype-addr-00引入结合 A 和 AAAA 的 QTYPE 的提案,以及 Paul Vixie 的提案repeated https://datatracker.ietf.org/doc/html/draft-ietf-dnsind-edns-02 attempts https://datatracker.ietf.org/doc/html/draft-ietf-dnsext-edns1-03引入多个问题的 EDNS 形式),但目前支持 IPv4 和 6 的程序倾向于执行两个单独的查询,或者 AAAA 后跟 A(超时后),或者同时执行两者。

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

Edit:来自 BIND 源中的 query.c:

   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;
   }

Edit:另外,来自 BIND 源中的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);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在单个 DNS 查询中请求 A 和 AAAA 记录 的相关文章

随机推荐

  • JIRA:查找我上周记录的所有工作

    我如何创建一个 JIRA 过滤器来列出我遇到的所有问题 记录时间 然后我可以将其应用到活动流 通过 JQL 使用高级搜索 worklogAuthor currentUser AND worklogDate gt 2016 12 01 AND
  • 如何用python打开mp4文件?

    我试图制作一个使用默认 Windows 应用程序播放电影的脚本 但是当我尝试运行此脚本时 出现错误 强制转换为 Unicode 需要字符串或缓冲区 找到函数 我应该如何进行 import os print Push enter to pla
  • 使用 VBA 解析 JSON (Access 2010)

    我需要使用下面的 JSON 文件更新 MS Access 中的货币表 timestamp 1465843806 base CAD rates AED 2 87198141 AFN 54 21812828 ALL 95 86530071 AM
  • 如何向 Android 原生“编辑文本”上下文菜单添加选项

    是否可以将某些内容添加到用户长按任何编辑文本时显示的项目列表中 剪切 复制粘贴 选择文本 全选 输入法 我想在此菜单中添加另一个选项 但无法弄清楚 这个问题有重复的here https stackoverflow com questions
  • 如何防止用户更改系统日期/时间(在 Android 中)?

    我用谷歌搜索过 但我找不到任何建议来阻止用户更改 android 中的系统日期 时间 我们正在开发一个企业应用程序 我们希望阻止设备的用户能够设置时间设置 换句话说 我们想要设置一个策略来定义用户不能更改 Android 设备中的日期和时间
  • 安装的Python脚本无法导入包模块

    我创建了一个具有以下目录结构的 Python 包 LICENSE MANIFEST IN README rst VERSION docs multitool init py core init py classes py utils py
  • 从 Visual Studio 2017 在 Chrome 中调试网站时启用扩展

    从 Visual Studio 2015 切换到 2017 我发现启动 Web API 项目现在会启动一个干净 独立的 Chrome 窗口 在很大程度上我喜欢这样 而且我当然喜欢这个想法 但是 这也意味着Chrome 中缺少扩展程序 有没有
  • 限制 GWT 中的小数位数?

    在纯 Java 中 我通常会使用如下所示的函数来将小数位数限制为decimalCount对于给定的数字value 但是 根据 GWT 文档 GWT 不提供对日期和数字格式化类 例如 java text DateFormat java tex
  • 如何在Python 3.6中等待声音文件以vlc结尾

    我在 python 中的 vlc 有一个问题 import vlc sound vlc MediaPlayer sound mp3 sound play i wanna wait until the sound ends then do s
  • Java:没有 AtomicFloat 或 AtomicDouble 吗?

    我已经发现AtomicInteger AtomicLong 但是在哪里AtomicFloat or AtomicDouble 也许有什么技巧 API 文档为java util concurrent package http download
  • 在多租户数据库中索引 TenantID

    我正在为应用程序创建多租户数据库 我在每个表方法中都使用了 TenantID 效果非常好 我正处于性能调整阶段 我的问题是 每个表中的每个 TenantID 是否都应该建立索引以进行优化搜索 因为数据库上的每个查询都会在此列上进行过滤 期待
  • 在node.js中重新定义变量

    该脚本的执行 tmp js 其中包含 var parameters 1 eval var parameters a 1 1 eval console log parameters node tmp js 产生 如果我们注释掉第一条语句 并再
  • 使用.NET Moq时如何转发到另一个对象?

    给定一个对象 我想创建一个模拟 它实现该对象的接口并模拟一个方法 但将其余方法转发给真实对象 不是基类 例如 ISqlUtil sqlUtil GetTheRealSqlUtilObjectSomehow var mock new Mock
  • 如何获得更多的饲料项目?

    如何获取 Feed 的下一页或更多结果 例如 当我去现在安全 http leoville tv podcasts sn xmlfeed 页面 没有任何类型的 下一个 链接 并且 page 100 的 url 参数不执行任何操作 http l
  • 权限如何在 mac 上运行 sbin 命令?

    我正在使用 mac os x 并且我正在尝试运行shutdown命令但它说我不是超级用户 不过 我可以跑ifconfig无需成为超级用户 这两个命令都在 sbin 中 我的 PATH 环境变量包括 sbin 这就是为什么我可以运行 ifco
  • Mathf.Floor 与 (int) 的性能比较

    当我想知道哪个更快时 我正在创建和翻译一些算法 a int float or b Mathf FloorToInt float 提前致谢 编辑 如果有比这两种方法更快的方法 那也会有帮助 像我提到的那样用秒表进行测试 这个答案在这里是因为我
  • 查询外键嵌套for循环django

    我正在尝试返回企业的类别列表 对于每个类别 我想列出与该类别相关的所有项目 我要退回所有物品 而不是按类别 但我决定要按类别对它们进行排序 这就是我所尝试过的 以及其他尝试 我只是无法将这些项目归入这些类别 这是我最新的尝试 在我的 mod
  • 从使用 pyinstaller 导入 theano 的 python 3 脚本构建适用于 Windows 的 .exe

    2017年9月2日下午1点编辑 经过多次尝试后 我最终成功地用 pyinstaller 构建了一个 exe 不幸的是 我未能处理 theano 模块 在我的情况下是 pymc3 模块所需的 我不得不修改 py 文件并放弃部分应用程序 我下面
  • 捕获组的负向前瞻

    我正在尝试这个挑战 https regex alf nu 4 https regex alf nu 4 我想匹配所有不包含 ABBA 模式的字符串 Match aesthophysiology amphimictical baruria c
  • 在单个 DNS 查询中请求 A 和 AAAA 记录

    我正在用 C 语言实现 DNS 查询 并且有兴趣在单个查询数据包中请求 A 和 AAAA IPv4 和 IPv6 记录 但是当我将两个查询放在一起时 我没有从名称服务器获得任何响应像这样的一包 我尝试将查询发送到几个不同的名称服务器 本地和