在Ruby中获取DNS TXT记录

anu*_*uya 12 ruby dns

我需要从DNS记录中获取txt字段.
有没有红宝石api做这样的事情?

nslookup -q=txt xxxx.com
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 22

尝试安装dnsruby gem.

代码被主动维护,并在一些重要的生产系统中使用.

require 'rubygems'
require 'dnsruby'
include Dnsruby

# Use the system configured nameservers to run a query
res = Dnsruby::Resolver.new
ret = res.query("google.com", Types.TXT)
print ret.answer
Run Code Online (Sandbox Code Playgroud)

(在MacOS X上测试的代码 - 打印Google SPF记录)

另见@ Alex的答案,这是更惯用的Ruby - Alex是作者dnsruby.


All*_*len 17

使用Ruby stdlib Resolv::DNS库而不安装gem:

require 'resolv'
txt = Resolv::DNS.open do |dns|
  records = dns.getresources("_dmarc.yahoo.com", Resolv::DNS::Resource::IN::TXT)
  records.empty? ? nil : records.map(&:data).join(" ")
end
#=> "v=DMARC1; p=reject; sp=none; pct=100; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com, mailto:dmarc_y_rua@yahoo.com;"
Run Code Online (Sandbox Code Playgroud)

getresources返回所请求的记录类名称(Resolv::DNS::Resource::IN::TXT)的实例数组.如果没有找到TXT记录或主机名,我返回nil,否则我映射记录,调用data获取值,然后将它们连接在一起.

通过在上面的示例中替换TXT,也可以查询任何DNS记录类型[TXT,NS,CNAME,MX,...].

TXT记录是"非结构化"的,用于主机名的增强数据,如SPF,DKIM,DMARC配置.在实践中,可能只有一个TXT记录,但RFC没有说明可以有多少.

阅读以下文档:http://www.ruby-doc.org/stdlib-2.1.1/libdoc/resolv/rdoc/index.html


小智 7

require 'dnsruby'
Dnsruby::DNS.open {|dns|
  dns.each_resource("google.com", "TXT") {|rr| print rr}
    # or
  print dns.getresource("google.com", "TXT")}
}
Run Code Online (Sandbox Code Playgroud)