【问题标题】:Extending Resolv::DNS to also get SPF resources扩展 Resolv::DNS 以获取 SPF 资源
【发布时间】:2014-01-11 14:55:09
【问题描述】:

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

谁能启发我或给我一些指导?

【问题讨论】:

  • 您能给我一个您尝试获取 SPF 记录的域的示例吗?由于 SPF 记录只是 TXT 记录,因此这可能无法按照您尝试的方式进行。
  • AFAIK,将 spf 记录写为 TXT 只是出于兼容性原因,有一个实际的 SPF。通常情况下,你都写,但我想抓住一个刚刚输入 SPF 而不是 TXT 记录的情况。我已经在notionlab.ch 上设置了一个来测试这个。 dig -t spf 只返回 spf 之一,dig -t txt 只返回 txt 一个。

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


【解决方案1】:

我通过查询我的域发现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 常量,但据我所知,无法从实例中获取该值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2020-07-19
    相关资源
    最近更新 更多