我正在尝试扩展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,在创建Message
对象时,类型类作为第二个参数提供,该对象位于line 1257。但是,我不理解事情的运作方式。
任何人都可以启发我或给我一些指导吗?
答案 0 :(得分:0)
我通过查询我的域名发现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
常量,但根据我的意见,无法从实例中获取此值。