1

我正在尝试扩展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 第 516 行,类型类在创建Message对象时作为第二个参数提供,该对象位于第 1257 行。但是,这使我无法理解事物的运作方式。

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

4

1 回答 1

0

我通过查询我的域发现它Resolv似乎会自动生成它无法识别的记录类型的类。您可以做的是查询所有记录,然后过滤类型代码。SPF 记录的类型代码为 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常量,但据我所知,无法从实例中获取该值)。

于 2017-09-27T08:56:08.787 回答