【问题标题】:How to read TXT Records longer than 255 characters in correct order如何以正确的顺序读取超过 255 个字符的 TXT 记录
【发布时间】:2021-11-24 21:02:33
【问题描述】:

我正在使用DNSJava lib 来获取给定选择器 + 域名的 DKIM TXT 记录。当记录大小大于 255 个字符并跨越结果中的多个字符串时,我想确保以正确的顺序读取记录。根据RFC Doc & RFC DOC,我们应该连接结果中的所有字符串,但它并没有告诉我们DNS服务器是否会以正确的顺序返回记录字符串。

例如: “V = DKIM1; K = RSA; P = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUI5E9hZhMEEgjqF6fHNYYBmAEcF7DN2v / FA6yiY / a3R2L8ebGQjCdP2m3PfqLk8ovVd84eJ”, “FkNuXGEsR0rXEHveOjc161z1tz4TGzPC5pGmjuzlYaibUQAb8T1GLbRse + ZkXhCxudeeRj7NBbCjaH1biClbp4v4 / V0PLdugeGQQIDAQAB”, “juzlYaibUQAb8T1GLbRse + ZkXhCxudeeRj7” P>

在上面的例子中,我无法确定记录的顺序。只有 DKIM 标头部分可以被推断为记录的开头

【问题讨论】:

  • 顺序不必确定——它是明确定义的。
  • @CherryDT 你是说DNS服务器以正确的顺序返回记录,应用程序只需要连接结果吗?
  • 是与否,请看下面我的回答

标签: dns dkim dnsjava


【解决方案1】:

The order of those strings doesn't have to be determined, it's well-defined。请注意,您显示的字符串不是记录

您似乎将同一 TXT 记录中的不同字符串与多个 TXT 记录混淆了。您不能将一个字符串拆分为多个记录,但您可以将其拆分为 same 记录中的多个片段,这可能就是您所指的。

一个TXT记录可以包含多个字符串,见RFC 1035

3.3.14. TXT RDATA format

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                   TXT-DATA                    /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

where:

TXT-DATA        One or more <character-string>s.

TXT RRs are used to hold descriptive text.  The semantics of the text
depends on the domain where it is found.

如您所见,字符串的顺序是记录的 RDATA 本身的一部分。 DNS 服务器不应该以任何方式破坏它。

例如,这是在区域文件中定义示例记录的方式:

name IN TXT ("v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUI5E9hZhMEEgjqF6fHNYYBmAEcF7DN2v/FA6yiY/a3R2L8ebGQjCdP2m3PfqLk8ovVd84eJ"
             "FkNuXGEsR0rXEHveOjc161z1tz4TGzPC5pGmjuzlYaibUQAb8T1GLbRse+ZkXhCxudeeRj7NBbCjaH1biClbp4v4/V0PLdugeGQQIDAQAB"
             "juzlYaibUQAb8T1GLbRse+ZkXhCxudeeRj7")

...而多条 TXT 记录看起来更像这样:

name IN TXT ("v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUI5E9hZhMEEgjqF6fHNYYBmAEcF7DN2v/FA6yiY/a3R2L8ebGQjCdP2m3PfqLk8ovVd84eJ"
             "FkNuXGEsR0rXEHveOjc161z1tz4TGzPC5pGmjuzlYaibUQAb8T1GLbRse+ZkXhCxudeeRj7NBbCjaH1biClbp4v4/V0PLdugeGQQIDAQAB"
             "juzlYaibUQAb8T1GLbRse+ZkXhCxudeeRj7")
name IN TXT "google-site-verification=abcde_xxxxxxxxxxxxx"
name IN TXT "MS=ms1234567"

在后一种情况下,您无法确定返回这三个记录的顺序(v=DKIM1...google-site...MS=...),但无论如何它应该没有任何意义。

dnsjava 的情况下,您应该从getAnswers 获得一个包含不同记录(不一定按任何顺序)的数组,但对于每条记录,您应该获得其字符串(按顺序 ) 来自getStrings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多