我正在尝试扩展Resolv::DNS,以便能够获取SPF资源。为此,我简单地添加了以下内容:
class Resolv::DNS::Resource::IN::SPF < Resolv::DNS::Resource::IN::TXT
end
class Resolv::DNS::Resource::SPF < Resolv::DNS::Resource::TXT
end当我现在使用SPF而不是TXT进行查询时,我得到一个空的哈希值。所以我试着进一步挖掘..在resolv.rb line 516上,类型类是在创建位于line 1257上的Message对象时作为第二个参数提供的。然而,这让我停止了对事物工作原理的理解。
有没有人能给我一些启发或指导?
发布于 2017-09-27 16:56:09
通过查询我的域,我发现Resolv似乎会自动为它无法识别的记录类型生成类。您可以做的是查询所有记录,然后根据类型代码进行过滤。SPF records have type code 99,所以你最终会得到这样的结果:
require 'resolv'
resolver = Resolv::DNS.new
all_records = resolver.getresources('example.com', Resolv::DNS::Resource::IN::ANY)
spf_records = all_records.select { |r| r.class::TypeValue == 99 }
spf_records.each do |record|
puts(record.data)
end查询类型代码的方式有点丑陋(Resolv在生成的类上创建了一个TypeValue常量,但据我所见,它没有添加从实例中获取此值的方法)。
https://stackoverflow.com/questions/21063736
复制相似问题