首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >txt与DNS TXT记录中的条目

txt与DNS TXT记录中的条目
EN

Stack Overflow用户
提问于 2018-05-22 10:27:55
回答 1查看 1.1K关注 0票数 1

我想知道txt字段与使用dns_get_record的DNS查询返回的TXT记录中的条目字段有什么不同。

例如,如果我为TXT记录在's1._domainkey.mydomain.com‘上调用s1._domainkey.mydomain.com,就会得到:

代码语言:javascript
复制
entries: ["k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnVgd0NyrRE261IIiPqi+0H1baNyKcdj8Kea/VlSP4exzvKx8pJ01EWMwd094FV/6OCBIf7KGKgowMnWl3tW3Z5d++uZHkdgF+6xg7b9PynmX/NTo2kx92hlGgegwyulF5B7d2FM0doaCeoO4rD05jZzwi3cXx/156Gg9Xwd/Z/QIDAQAB"]

txt: "k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnVgd0NyrRE261IIiPqi+0H1baNyKcdj8Kea/VlSP4exzvKx8pJ01EWMwd094FV/6OCBIf7KGKgowMnWl3tW3Z5d++uZHkdgF+6xg7b9PynmX/NTo2kx92hlGgegwyulF5B7d2FM0doaCeoO4rD05jZzwi3cXx/156Gg9Xwd/Z/QIDAQAB"

产生此结果的代码是:

代码语言:javascript
复制
function retrieve_spf_record($domain) { 
    $txtRecords = dns_get_record($domain, DNS_TXT); 
    foreach ($txtRecords as $txtRecord) { 
        if (startsWith($txtRecord['txt'], 'v=spf1')) { 
            return $txtRecord; 
        } 
    } 
    return FALSE; 
}

在我看来,在这种情况下,条目与txt是相同的。但我想,在其他一些场景中,它们可以为不同的目的服务,否则就没有必要同时使用它们。

那么,为什么同时存在txt和entries字段呢?这是否与一个值太长(例如,超过512 B)的情况有关,以便将其拆分并存储在条目中?

如果上面的猜测是正确的,那么这样一个TXT记录的全部值将被连接起来,而txt字段应该被忽略--这是正确的吗?

欢迎任何解释。谢谢!

更新:以下是PHP的dns_get_record在“cisco.com”上返回的内容:

代码语言:javascript
复制
Array
(
    [host] => cisco.com
    [class] => IN
    [ttl] => 3158
    [type] => TXT
    [txt] => v=spf1 ip4:173.37.147.224/27 ip4:173.37.142.64/26 ip4:173.38.212.128/27 ip4:173.38.203.0/24 ip4:64.100.0.0/14 ip4:72.163.7.160/27 ip4:72.163.197.0/24 ip4:144.254.0.0/16 ip4:66.187.208.0/20 ip4:173.37.86.0/24 ip4:64.104.206.0/24 ip4:64.104.15.96/27 ip4:64.102.19.192/26 ip4:144.254.15.96/27 ip4:173.36.137.128/26 ip4:173.36.130.0/24 mx:res.cisco.com mx:sco.cisco.com include:spf.protection.outlook.com ~all
    [entries] => Array
        (
            [0] => v=spf1 ip4:173.37.147.224/27 ip4:173.37.142.64/26 ip4:173.38.212.128/27 ip4:173.38.203.0/24 ip4:64.100.0.0/14 ip4:72.163.7.160/27 ip4:72.163.197.0/24 ip4:144.254.0.0/16 ip4:66.187.208.0/20 ip4:173.37.86.0/24
            [1] =>  ip4:64.104.206.0/24 ip4:64.104.15.96/27 ip4:64.102.19.192/26 ip4:144.254.15.96/27 ip4:173.36.137.128/26 ip4:173.36.130.0/24 mx:res.cisco.com mx:sco.cisco.com include:spf.protection.outlook.com ~all
        )

)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-22 10:47:03

dns_get_record返回一个关联数组数组。

如果你跑

代码语言:javascript
复制
 var_dump(dns_get_record("s1._domainkey.mydomain.com"));

你得到的是啥?

您最初得到的输出可能是试图打印一个关联数组的工件,该数组被解释为某种更简单的类型。

在这两种情况下,“条目”字符串都小于255个八进制(ASCII字符),这是通用DNS TXT记录的最大长度。

但是,由于原始示例中的整个DKIM记录小于255个八进制,所以“条目”子数组中只有一个字符串。

cisco.com示例中,DKIM记录的总长度为405八进制,因此它必须在DNS中作为两个TXT记录来表示,这与RFC 4408相同。而且entries子数组中的两个字符串都小于255个八进制,所以看起来您的最大长度理论是正确的。

主关联数组的txt元素包含为了方便起见已经连接的TXT记录。如果由于某种原因需要原始的单个TXT记录,elements子数组可以为您提供它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50751832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档