扩展Resolv :: DNS以获取SPF资源

时间:2014-01-11 14:55:10

标签: ruby-on-rails ruby dns spf resolv

我正在尝试扩展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。但是,我不理解事情的运作方式。

任何人都可以启发我或给我一些指导吗?

1 个答案:

答案 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常量,但根据我的意见,无法从实例中获取此值。