dns - 如何以正确的顺序读取超过 255 个字符的 TXT 记录
问题描述
我正在使用DNSJava lib 来获取给定选择器 + 域名的 DKIM TXT 记录。当记录大小大于 255 个字符并跨越结果中的多个字符串时,我想确保以正确的顺序读取记录。根据RFC Doc & RFC DOC,我们应该连接结果中的所有字符串,但它并没有告诉我们 DNS 服务器是否会以正确的顺序返回记录字符串。
Eg : "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUI5E9hZhMEEgjqF6fHNYYBmAEcF7DN2v/FA6yiY/a3R2L8ebGQjCdP2m3PfqLk8ovVd84eJ", "FkNuXGEsR0rXEHveOjc161z1tz4TGzPC5pGmjuzlYaibUQAb8T1GLbRse+ZkXhCxudeeRj7NBbCjaH1biClbp4v4/V0PLdugeGQQIDAQAB", "juzlYaibUQAb8T1GLbRse+ZkXhCxudeeRj7"
在上面的例子中,我无法确定记录的顺序。只有 DKIM 标头部分可以被推断为记录的开头
解决方案
这些字符串的顺序不必确定,它是明确定义的。请注意,您显示的字符串不是记录!
您似乎将同一 TXT 记录中的不同字符串与多个 TXT 记录混淆了。您不能将字符串拆分为多个记录,但您可以将其拆分为同一记录中的多个片段,这可能就是您所指的。
一条 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
。
推荐阅读
- angular - (Angular) 完整的应用程序同时运行两次
- c++ - 从结构化数组中读取信息
- python - 遍历 pandas DataFrame 中的列表
- gcloud - 将 gcloud 服务帐号限制为特定存储桶
- sql-server - Exec 语句中“=”附近的语法不正确
- javascript - 如何使用 Jest 和 React 测试函数
- entity-framework - 为什么我的子类中的一对多关系会出现循环错误?
- json - Reactjs fetch 方法返回空数组
- python - 为什么使用闭包将函数绑定到对象是错误的?
- azure-devops - 我们可以为带有 AzureDevOps 扩展的 iOS 应用程序配置 CI