【问题标题】:How to check if DNS record exists using Ruby?如何使用 Ruby 检查 DNS 记录是否存在?
【发布时间】:2021-06-01 13:29:05
【问题描述】:

我正在尝试检查给定的主机名是否已在我们的 IPAM 系统的 A 记录中使用。例如,如果https://this-internal-url.net 已经在 DNS 系统中“被占用”,它应该返回 true。否则为假。

我尝试了很多不同的解决方案,其中大部分来自 S.O.

当传入一个无效的 url 时,其中大多数会出错:

require 'resolv'
ip_ad = Resolv.getaddress <url>
print ip_ad

如果 url 在 dns 中不存在,则简单地出错。

require 'infoblox'
# create a connection
connection = Infoblox::Connection.new(
  username: <infoblox_user>,
  password: <infoblox_passwd>,
  host: <infoblox_grid_server>,
  ssl_opts: {verify: false},
  logger: Logger.new(STDOUT)
)

search = Infoblox::Arecord.find(connection, {"name~" => "#{url}"})
print search
# also tried: search = Infoblox::Search.find(connection, "search_string~" => "#{url}")

还有:

require 'rubygems'
require 'dnsruby'
include Dnsruby
info = system("nslookup -q=txt #{url}")
print info

还有:

require 'rubygems'
require 'dnsruby'
include Dnsruby
res = Dnsruby::Resolver.new
ret = res.query(url, Types.TXT)
print "#{ret.answer}"

还有:

require 'resolv'
txt = Resolv::DNS.open do |dns|
  records = dns.getresources(url, Resolv::DNS::Resource::IN::TXT)
  records.empty? ? nil : records.map(&:data).join(" ")
end
print txt

还有:

require "resolv"
Resolv::DNS.open do |dns|
  ress = dns.getresources "infoir.com", Resolv::DNS::Resource::IN::A
  log(ress.map { |r| [r.exchange.to_s, r.preference] })
end

我知道这些 sn-ps 都不会评估为真/假。我还没有找到任何解决方案,可以区分现有 DNS 记录和不存在的记录而不会出错。

任何指针将不胜感激!

【问题讨论】:

    标签: ruby dns ip-address resolv


    【解决方案1】:

    我解决了。

    name_taken = system("ping -c 1 -W 1 #{host_name}")
    

    name_taken 返回一个布尔值,我可以使用它来确定给定主机名的 DNS 记录是否已经存在。

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多