我想知道txt字段与使用dns_get_record的DNS查询返回的TXT记录中的条目字段有什么不同。
例如,如果我为TXT记录在's1._domainkey.mydomain.com‘上调用s1._domainkey.mydomain.com,就会得到:
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"产生此结果的代码是:
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”上返回的内容:
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
)
)发布于 2018-05-22 10:47:03
dns_get_record返回一个关联数组数组。
如果你跑
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子数组可以为您提供它们。
https://stackoverflow.com/questions/50751832
复制相似问题